Ubercart Product-Node referenzieren (Crossseler)
am 25.03.2011 - 09:02 Uhr in
Hallo Forum,
ich stehe vor folgendem Problem und würde mich über einen Ansatz freuen:
Wir importen mit Node-'Import ca. 3500 Artikel in einen Ubercart-Shop. Im Inhaltstypen des Produkts haben wir 6 CCK-Felder eingebaut, welche die Artikel-Nummern für 6 Crossseller-Produkte aufnehmen, die ebenfalls importiert werden. Ich möchte nun mit Hilfe eines Views innerhalb des Produkt-Nodes die 6 Crossseller anzeigen (Titel verlinkt auf den Produkt-Node, Bild & Preis pro Crossseller-Artikel) - referenziert über die Artikel-Nummern.
Mit den vorhandenen Crossseller-Modulen kommen wir nicht weiter, da hier die Referenzierung manuell erfolgt. Auch mit CCK Node Reference können wir das ganze nicht realisieren, da sich durch den Import die nid's mit jedem Import ändern. Node Reference referenziert ausserdem nur Nodes die bereits existieren - für einen Import nicht wirklich zu gebrauchen.
Evtl. hat ja jemand eine Idee? Danke dafür im voraus!
Gruß, Markus
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich habe so etwas ähnliches
am 25.03.2011 - 13:04 Uhr
Ich habe so etwas ähnliches (nicht für Übercart) mit einem eigenen Modul gelöst. Dazu einmal zu Fuß eine entsprechende Referenz aufbauen und einen Dump von dem Node erstellen, damit man die Struktur kennt. Dann eine Funktion schreiben, die die Nodes der Reihe nach läd, auf Grund von Informationen aus einer Tabelle und CCK-Feldern die Referenzen aufbaut und den Node speichert. Diese Funktion mittels hook_menu auf einen URL legen, den man nach dem Import aufruft, damit die entsprechenden Referenzen aufgebaut werden. Über Access-Rights kann man noch sicherstellen, daß nur ein Admin diesen URL aufrufen kann.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Danke für die Antwort, ich
am 08.04.2011 - 11:08 Uhr
Danke für die Antwort, ich habs nun trotzdem mit Views lösen können:
Einen View erstellt der die gewünschten Felder für die Produktausgabe enthält, also in meinem Fall Titel, Preis und Artikelbild. Den View binde ich direkt in meiner node-product.tpl.php per PHP ein. Mit $view->add_item füge ich dem View den benötigten Filter hinzu. Mit $view->set_item übergebe ich meine Crossseller-Nummer die als CCK-Field im Inhaltstypen Produkt hinterlegt ist. Sieht dann wie folgt aus:
<?php
$cross1 = $node->field_cross01[0]['view'];
$view = views_get_view('crossseller');
$display_id = 'default';
$view->set_display($display_id);
$id = $view->add_item($display_id, 'filter', 'uc_products', 'model');
$item = $view->get_item($display_id, 'filter', $id);
$item['value'] = array($cross1);
$view->set_item($display_id, 'filter', $id, $item);
$view->is_cacheable = FALSE;
print $view->execute_display('default',array($args));
}
?>
Es funktioniert, die Crosseller werden sauber innerhalb der Produkt-Node ausgegeben.
Danke und Gruß, Markus