Franz Holzinger

Verse of the day

Denn Gott ist nicht ungerecht, daß er vergesse eures Werks und der Arbeit der Liebe, die ihr erzeigt habt an seinem Namen, da ihr den Heiligen dientet und noch dienet.
Hebraeer 6:10

© Bible Gateway's Verse of the Day


Verfasser  
15-02-12 18:30:07 hook für Lieferdaten
Stefanie
Hallo!

Ich würde gern wissen, ob es denn schon einen Hook gibt, mit dem man bei der Seite, in der die Lieferanschrift eingegeben wird, eingreifen kann. Ich müsste nämlich folgendes Umsetzen: Der User sollte die Möglichkeit haben, unterschiedliche Lieferadressen anzulegen und eben auf der Lieferadressenseite auswählen, an welche er genau liefern will von den bereits angelegten, bzw. wenn eine eingetragen wird, welche noch nicht vorhanden ist, sollte die für den User neu angelegt werden (ähnlich wie bei amazon).

Gibts da schon was? Vielen Dank schon im Vorhinein für die Antwort!
15-02-12 20:41:07 getItemMarkerArrays
Franz Holzinger
Es gibt am Ende der Datei view/class.tx_ttproducts_basket_view.php den Hook getItemMarkerArrays, mit dem man so ziemlich alles auf den Warenkorb Seiten einfügen kann.

17-02-12 10:00:09 finalizeOrder
Stefanie
Als ich getItemMarkerArrays gesehen hab, dachte ich mir, dass der vielleicht zu früh einsetzt, eben schon im Warenkorb und die Adresseingabe erfolgt erst danach.

Jetzt hab ich gerade den finalizeOrdner-Hook entdeckt, der auch einen Parameter $address übergibt. Wann greift der?
17-02-12 12:12:02 Finalize
Franz Holzinger
Das FINALIZE bedeutet den Abschluss der Bestellung. Danach wird der Warenkorb geleert und es kann auch nichts mehr eingegeben werden.
Die Adresseneingabe ist im PHP Code ein Teil der Warenkorb Ansicht.
20-02-12 21:01:31 getItemMarkerArrays
Stefanie
Jetzt komm ich leider irgendwie nicht mehr weiter. Vielleicht hättest du Zeit, mir auf die Sprünge zu helfen:

Den Hook hab ich verwendet, der funktioniert auch und meine Funktion schaut so aus:

public function getItemMarkerArrays($obj, &$templateCode, &$code, &$markerArray, &$subpartArray){
global $TSFE;
global $TCA;

$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'a.adress_salt',
'mytable a',
'a.feusers_uid = \''.$TSFE->fe_user->user['ses_userid'].'\'',
'',
'');

if ($GLOBALS['TYPO3_DB']->sql_num_rows($res) > 0) {
$i = 0;
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {

$markerArray['###TEST###'] .= $row['adress_salt'];
$i++;
}
} else {
$subpartArray['###AMS_DELIVERYDATA###']='';
}
}

Und so werden auch alle Ergebnisse ausgegeben, aber eben verkettet und hintereinander. Wie schaff ich es nochmal, dass für jedes Element, das gefunden wird, ein eigener Marker ###TEST### befüllt wird? Ich probier und probier und komm einfach nicht drauf. Danke schon mal für die Hilfe und entschuldigung für die Umstände
21-02-12 21:10:31 mehrere TEST Marker
Franz Holzinger
In der Schleife steht jetzt:

$markerArray['###TEST###'] .= $row['adress_salt'];
$i++;

Das sollte aber ersetzt werden durch:


$i++;
$markerArray['###TEST' . $i . '###'] = $row['adress_salt'];


Und dahinter noch eine Schleife

for ($i = 1; $i < 20; ++$i) {
if (!isset($markerArray['###TEST' . $i . '###'])) {
$markerArray['###TEST' . $i . '###'] = '';
}
}

damit die Marker geleert werden, wenn sie nicht ausgefüllt worden sind.
23-02-12 17:53:28 am ende
Stefanie
hab ichs jetzt so gemacht (dann brauch ich die Marker im html-Template nicht durchnummerieren)

whileschleife:
$markerArray['###delivery###'][$i]['###TEST###'] = $row['adress_salt'];

$item = $this->cObj->getSubpart($subpart, '###ITEM###');

if ($markerArray['###delivery###']) {
for ($i=0;$i<count($markerArray['###delivery###']);$i++) {
$subpartArray['###CONTENT###'] .= $this->cObj->substituteMarkerArrayCached($item,$markerArray['###delivery###'][$i]);
}
}

vielen Danke trotzdem für die Mühe
27-02-12 23:53:31 Marker weg auf der Bestellbestätigungsseite
Stefanie
Jetzt hab ich bedauerlicherweise wieder ein neues Problem.

Im getItemMarkerArrays-Hook übergeb ich werte an die ###DELIVERY...### Marker. Auf der Bestellungsübersichtsseite (noch vor Absendung der Bestellung) sind die dann auch noch immer Vorhanden und werden richtig befüllt, wenn man dann aber die Bestellung abschickt, sind die auf einmal leer. Anscheinend werden die vorher zugewiesenen Werte nicht übernommen für den Bestellabschluss, obwohl ich auch da im Template wieder diese ###DELIVERY...### Marker verwende.

Wie schaff ich es, diese Werte bis zum Bestellungsabschluß weiterzutransportieren? Entschuldigung für die vielen Fragen.
28-02-12 22:03:27 Felder des FE Benutzers speichern
Franz Holzinger
Die erlaubten Felder des Benutzers sind hard codiert.
Um auch alle Felder der Tabelle fe_users zu erlauben muss die Funktion init_intern in der Datei view/class.tx_ttproducts_info_view.php am Ende erweitert werden.


// if feuserextrafields is loaded use also these extra fields
if (t3lib_extMgm::isLoaded('feuserextrafields')) {
...
$this->feuserfields .= ',' . $this->feuserextrafields;
}

if (isset($TCA['fe_users']['columns']) && is_array(($TCA['fe_users']['columns']))) {
foreach (($TCA['fe_users']['columns']) as $field => $fieldTCA) {
if (!t3lib_div::inList($this->feuserfields, $field)) {
$this->feuserfields .= ',' . $field;
}
}
}


Nur die in der Variable $this->feuserfields enthaltenen Felder werden auch gespeichert.
28-02-12 22:05:52 $TCA erweitern
Franz Holzinger
Wenn die Extension neue Felder hinzugefügt hat, dann muss dieser Hook in der Datei ext_localconf.php eingetragen sein:


// add the table enhancements to the FE
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_products']['extendingTCA'][] = 'MeinExtensionKey';

29-02-12 00:15:28 welcher Array führt im BASKET_ORDERCONFIRMATION_TEMPLATE zur Anzeige der Adressdaten
Stefanie
das mit dem extendingTCA ist schon mal gut zu wissen, das brauch ich bestimmt auch noch, aber bisher sind das keine neuen Felder eigentlich. Und Einträge in die fe_users sollten auch nicht gemacht werden, weil ich nur die ###DELIVERY marker verwende.

Das ganze funktioniert bisher so, dass der Käufer eine Checkbox klicken kann, wenn er die Lieferadresse speichern will, durch die aktivierte Checkbox wird beim Bestellabschluss die Adresse in eine eigene von mir erstellte Tabelle eingetragen. Wird das nächste mal bestellt, werden alle auf diesem Wege angelegten Lieferadressen aus dieser Tabelle wieder ausgelesen und stehen als Alternative zur Adresseingabe wieder zur Verfügung und können mit einem Radiobutton ausgewählt werden, im ###BASKET_INFO_TEMPLATE###.

Wird eine diese Adressen mit Radiobutton ausgewählt, werden alle schon vorhandenen ###DELIVERY### Marker (ich hab davon gar keine neu angelegt, sondern einfach NAME, ADDRESS_DISPLAY...verwendet) mit den Werten befüllt, also zumindest noch bis zum ###BASKET_PAYMENT_TEMPLATE###, beim Bestellabschluss allerdings (im BASKET_ORDERCONFIRMATION_TEMPLATE) sind die dann alle leer.

Und ich suche und suche nach dem Array oder was es auch immer ist, aus dem die Adressdaten für den Bestellabschluß ausgelesen werden und die dann in die DB gespeichert werden.

Ich hab schon versucht, es im Hook getItemMarkerArrays so zuzuweisen:

$markerArray['###DELIVERY_NAME###'] = $row['name'];

(was eben nur bis zum payment-template reicht), oder mit den POST-Werten

$_POST['recs']['delivery']['name'] = $row['name'];

aber all diese Daten scheinen nicht die zu sein, die am Ende für das Speichern in die Datenbank sys_products_orders verwendet werden oder auf der Bestellabschlussseite angezeigt werden.
29-02-12 19:03:12 globales $infoViewObj
Franz Holzinger
Die eingegebenen Adressdaten können über das globale Objekt $infoViewObj eingelesen werden.


$infoViewObj = &t3lib_div::getUserObj('&tx_ttproducts_info_view');

$infoViewObj->infoArray
29-02-12 23:08:22 nicht vorhanden
Stefanie
dieses Objekt gibts bei mir leider gar nicht, ich verwende 2.6.4., heisst der da vielleicht anders?

Jetzt hab ich alles anders gelöst und hab den hook für globale Marker genommen und die Werte mit hidden-Feldern weitergereicht. Ich glaub das ist wahrscheinlich nicht die eleganteste Lösung, aber führt doch zum Ziel. Diese globalen Marker werden dann am ende auch in der email und auf der Bestellbestätigungsseite richtig angezeigt. Lang und steinig ist der Weg...

Vielen vielen Dank mal wieder trotzdem für die große Mühe!
1-03-12 08:56:30 info Object
Franz Holzinger
Auch unter tt_products 2.6.4 gibt es das Info Objekt:

require_once (PATH_BE_ttproducts.'lib/class.tx_ttproducts_info.php');

$infoObj = &t3lib_div::getUserObj('&tx_ttproducts_info');

< BACK TO FORUM