Feld mit berechnetem Inhalt

Hooks ermöglichen Ihnen die Ausführung beliebigen PHP-Codes während des Speicherns, Parkens, Veröffentlichens und Löschens jeglicher Inhaltstypen in webEdition.
Rudi
Senior Member
Beiträge: 134
Registriert: Do 1. Jan 1970, 02:00

Feld mit berechnetem Inhalt

Beitragvon Rudi » Mi 20. Apr 2011, 18:56

Hallo Forum,
keine Ahnung ob ich hier richtig bin -ich schildere mal mein Problem:

Die Preise eines Shops basieren auf Katalog-Nettopreisen - der online Preis liegt um einen festen Rabattsatz darunter.
Beispiel:

Katalogpreis: 100
Rabatt: 30
Onlinepreis: 70

Alles kein Problem bei Zahlung auf Rechnung oder Abbuchung etc.
PayPal übernimmt nun aber den Inhalt eines Feldes (price) und nicht das Ergebnis einer Berechnung.

Das heisst ich bräuchte ein FLoatfeld das als Daten den aus Katpreis und Rabatt berechneten Onlinepreis enthält.
Das bei jedem Artikel 'zu Fuß' zu berechnen ist müssig.

Gibts eine Lösung??

Rudi
Senior Member
Beiträge: 134
Registriert: Do 1. Jan 1970, 02:00

Re: Feld mit berechnetem Inhalt

Beitragvon Rudi » Mi 27. Apr 2011, 21:59

Keinerlei Tipp ??? - Auch ein Hinweis dass sowas nicht geht wäre hilfreich.
Oder gehts per PHPMyAdmin? Was ist zu berücksichtigen??

Danke!!!

cfgerhard
Junior Member
Beiträge: 9
Registriert: Mi 17. Jun 2015, 14:14
Kontaktdaten:

Re: Feld mit berechnetem Inhalt

Beitragvon cfgerhard » Di 13. Sep 2016, 20:49

Hallo,

mich würde das auch interessieren, Gibt es inzwischen jemanden, der sich damit beschäftigt hat?

Kann mir jemand evtl. das setzen von Triggern in der DB erklären?

Viele Grüße

Christian

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 646
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover
Kontaktdaten:

Re: Feld mit berechnetem Inhalt

Beitragvon Carrear » Mi 14. Sep 2016, 09:14

Feld anlegen. Einen Listview schreiben über alle Artikelobjekte. Im Listview Artikel-Objekt-ID in Variable schreiben, Onlinepreis berechnen und in eine Variable schreiben und dann:

Code: Alles auswählen

$obj = new we_objectFile();
$obj->initByID( $GLOBALS['articleID'] );
$obj->setElement( 'Onlinepreis', $GLOBALS['onlinePrice'] );
$obj->we_save();
$obj->we_publish();
Dokument auf dieser Vorlage anlegen und einmal aufrufen - voilà ^^

VG Martin :)

cfgerhard
Junior Member
Beiträge: 9
Registriert: Mi 17. Jun 2015, 14:14
Kontaktdaten:

Re: Feld mit berechnetem Inhalt

Beitragvon cfgerhard » Fr 16. Sep 2016, 13:50

Hallo,

ich habe dein Beispiel
Carrear hat geschrieben:Feld anlegen. Einen Listview schreiben über alle Artikelobjekte. Im Listview Artikel-Objekt-ID in Variable schreiben, Onlinepreis berechnen und in eine Variable schreiben und dann:

Code: Alles auswählen

$obj = new we_objectFile();
$obj->initByID( $GLOBALS['articleID'] );
$obj->setElement( 'Onlinepreis', $GLOBALS['onlinePrice'] );
$obj->we_save();
$obj->we_publish();
wie folgt adaptiert:

Code: Alles auswählen

			<table>
								<th>Stipendiat</th>
								<th>Alter</th>
								<we:listview name="Stipendiaten" type="object" order="Nachname" classid="1">
						<we:repeat>
					<tr>	
							<?php
						$now = time();
						$alter = $now - 'Geburtsdatum';
							$obj = new we_objectFile();
							$obj->initByID( $GLOBALS['WE_ID'] );
							$obj->setElement( 'Alter', $GLOBALS['alter'] );
							$obj->we_save();
							$obj->we_publish();
					?>
							
								<td><we:field name="Nachname" />, <we:field name="Vorname" /></td>
								<td><we:field name="Alter" /></td>
							</tr>
						</we:repeat>
										
						
		</we:listview>
	</table>
	
leider klappt das nicht so richtig. Kann mir da vielleicht noch jemand helfen wo ich falsch liege?

Vielen Dank

Christian

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 646
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover
Kontaktdaten:

Re: Feld mit berechnetem Inhalt

Beitragvon Carrear » Fr 16. Sep 2016, 17:54

cfgerhard hat geschrieben:Hallo,

ich habe dein Beispiel

Code: Alles auswählen

			<table>
								<th>Stipendiat</th>
								<th>Alter</th>
								<we:listview name="Stipendiaten" type="object" order="Nachname" classid="1">
						<we:repeat>
					<tr>	
							<?php
						$now = time();
						$alter = $now - 'Geburtsdatum';
							$obj = new we_objectFile();
							$obj->initByID( $GLOBALS['WE_ID'] );
							$obj->setElement( 'Alter', $GLOBALS['alter'] );
							$obj->we_save();
							$obj->we_publish();
					?>
							
								<td><we:field name="Nachname" />, <we:field name="Vorname" /></td>
								<td><we:field name="Alter" /></td>
							</tr>
						</we:repeat>
										
						
		</we:listview>
	</table>
	
leider klappt das nicht so richtig. Kann mir da vielleicht noch jemand helfen wo ich falsch liege?

Vielen Dank

Christian
  • Was ist "$alter = $now - 'Geburtsdatum';" - Was ist denn da 'Geburtsdatum'? Und die Variable $now, was steht da drin und wie deklarierst du sie?
  • Als was für einen Feldtypen hast du denn das Feld "Alter" in der Klasse deklariert? Bei Datumsfeldern musst du aufs Format achten. Ich bin mir nicht ganz sicher aber ich glaube mich zu erinnern, dass man da tatsächlich noch mit Unix Timestamps arbeiten muss?

cfgerhard
Junior Member
Beiträge: 9
Registriert: Mi 17. Jun 2015, 14:14
Kontaktdaten:

Re: Feld mit berechnetem Inhalt

Beitragvon cfgerhard » Fr 16. Sep 2016, 22:07

Carrear hat geschrieben:
  • Was ist "$alter = $now - 'Geburtsdatum';" - Was ist denn da 'Geburtsdatum'? Und die Variable $now, was steht da drin und wie deklarierst du sie?
Die Variable $now wird mit dem aktuellen Timestamp belegt. Die Deklaration erfolgt durch $now = time(); - Das Geburtsdatum ist ein Datumsfeld (Unix) aus dem Objekt der Klasse Stipendiaten.
[*]Als was für einen Feldtypen hast du denn das Feld "Alter" in der Klasse deklariert? Bei Datumsfeldern musst du aufs Format achten. Ich bin mir nicht ganz sicher aber ich glaube mich zu erinnern, dass man da tatsächlich noch mit Unix Timestamps arbeiten muss?[/list]
Das Alter soll als Integer in das Objekt geschrieben werden.

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 646
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover
Kontaktdaten:

Re: Feld mit berechnetem Inhalt

Beitragvon Carrear » Mo 19. Sep 2016, 09:15

Ja aber was ist das denn für eine Schreibweise? Also ich kenne das nicht, dass durch 'Geburtsdatum' der Wert einer Variable angesprochen wird (wo ist das Dollarzeichen und wofür die einfachen Anführungszeichen?). Du ziehst da von einem Timestamp einen String ab. Keine Ahnung was das Ergebnis sein kann - kannst dir ja mal $alter ausgeben lassen.

mokraemer
Senior Member
Beiträge: 3221
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: Feld mit berechnetem Inhalt

Beitragvon mokraemer » Mo 19. Sep 2016, 13:51

ja das php-Fragment ist total durcheinander. $alter wird lokal gesetzt und global ausgelesen. Der Kode ist so def. ungültig.
webEdition-Kern-Entwickler

cfgerhard
Junior Member
Beiträge: 9
Registriert: Mi 17. Jun 2015, 14:14
Kontaktdaten:

Re: Feld mit berechnetem Inhalt

Beitragvon cfgerhard » Mo 19. Sep 2016, 20:10

mokraemer hat geschrieben:ja das php-Fragment ist total durcheinander. $alter wird lokal gesetzt und global ausgelesen. Der Kode ist so def. ungültig.
Hallo,

und vielen Dank für eure Hinweise. Könnt ihr mir bitte behilflich sein diesen Knoten zu lösen?

Viele Grüße

ChristiaN

Benutzeravatar
Carrear
webEdition Partner
webEdition Partner
Beiträge: 646
Registriert: Do 17. Jan 2013, 03:02
Wohnort: Hannover
Kontaktdaten:

Re: Feld mit berechnetem Inhalt

Beitragvon Carrear » Di 20. Sep 2016, 08:40

Beantworte bitte erstmal meine Frage. Du willst das alter anhand des heutigen Datums und des Geburtsdatums berechnen. In deinem Code steht:

Code: Alles auswählen

$alter = $now - 'Geburtsdatum';
Wobei du $now mit time() erstellst. In der oben genannten Codezeile steht das "-" (Minus) 'Geburtsdatum'. Also rechnest du den Zeitstempel minus einem String. Das macht doch gar keinen Sinn. Du musst erstmal eine Variable Geburtsdatum deklarieren. Ich würde dann eine Funktion schreiben:

Code: Alles auswählen

function getAge( $birthdate ) {
  $birthday = new DateTime( $birthdate );
  $today = new DateTime( date('Y-m-d') );
  $age = $birthday->diff( $today );
 
  return $age->format('%y');
}
Dann schreibst du da oben in deinem Prozedere erstmal das Geburtsdatum der Person in eine Variable und rufst damit diese Funktion auf.

VG Martin


Zurück zu „Hooks“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast