Hintergrund
Ich entwickle ein Modul, das einige benutzerdefinierte Entitäten erstellt, die die für ein bestimmtes Produkt verfügbaren Optionen in Beziehung setzen / beeinflussen. So funktioniert das:
Wenn ein Produkt geladen wird, wird eine Abfrage für meine benutzerdefinierten Entitäten unter Verwendung von zwei der Produktattribute ausgeführt.
Ich verwende das Ergebnis der Abfrage und präsentiere es in zwei Schritten wie folgt (die erste Auswahl des Kunden wirkt sich auf die verfügbaren Optionen für die zweite aus):
Die Herausforderung
Folgendes muss ich im Frontend erreichen:
1. Überschreiben Sie zwei Logikelemente in der Produktansicht.phtml:
--- Zuerst:
<form action="<?php echo $this->getSubmitUrl($_product) ?>" method="post" id="product_addtocart_form"<?php if($_product->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>>
... Sie werden feststellen, dass enctype="multipart/form-data"
nur hinzugefügt $_product->getOptions()
wird true
, wenn dies der Fall ist , und meine Produkte werden sie tatsächlich nicht haben (dies würde also zurückkehren false
).
--- Zweite:
<?php if ($_product->isSaleable() && $this->hasOptions()):?>
<?php echo $this->getChildChildHtml('container1', '', true, true) ?>
<?php endif;?>
... auch, weil meine Produkte keine benutzerdefinierten Optionen haben, also $this->hasOptions()
zurückkehren false
und das Rendern von container1 verhindern würden .
2. Ersetzen / überschreiben / überschreiben Sie 'container1' - den untergeordneten Block (ist es ein Block?), Der den HTML-Code für die benutzerdefinierten Optionen "enthält", wie hier gezeigt:
Ich habe einige Beiträge gelesen, in denen behauptet wird, dass das view.phtml
direkte Kopieren und Bearbeiten nicht der richtige Weg ist, aber was ist die Alternative?
Zweitens habe ich gelesen, dass ich entweder remove
oder unSet
das container1
Stück kann - welche Methode soll ich verwenden und wie ersetze ich dann meine eigene richtig container1
?
Vielen Dank!
quelle
catalog.xml
es mit denPRODUCT_TYPE_xxxxxx
Griffen geht?Antworten:
Ich arbeite seit einiger Zeit an einem ähnlichen Modul und bin auf fast dasselbe gestoßen. Ich habe einen benutzerdefinierten Produkttyp hinzugefügt, damit dies funktioniert.
Der Schlüssel ist der
product_type_data
Block. Auf diese Weise können Sie diesen Block überschreiben, ohne andere Vorlagendateien ändern zu müssen. In der Layout-XML-Datei meines Moduls habe ich hinzugefügt:Von dort füge ich meine Formularfelder in die Vorlage ein. Die Werte werden an einen Beobachter des
sales_quote_add_item
Ereignisses übergeben, zu dem ich die Auswahl des Benutzers hinzufügen kannadditional_options
.Mithilfe eines benutzerdefinierten Produkttyps können Sie außerdem Ihre eigene
_prepareProduct()
Methode verwenden, mit der Sie verschiedene Werte festlegen können, an die weitergeleitet wirdparent::_prepareProduct($buyRequest, $product, $processMode)
(Ich werde wahrscheinlich zurückkommen und dies später mit zusätzlichen Details ändern)
quelle
Ich hoffe, ich bin nicht zu spät, um diese Frage zu beantworten. Sie benötigen benutzerdefinierte Optionen für das Produkt. Das Produkt enthält nur benutzerdefinierte Optionswerte, wenn diese
catalog_product_option
vorhanden sind. Fügen Sie daher benutzerdefinierte Optionen im Backend mit einem benutzerdefinierten Feld hinzu, indem Sie diese in der Tabelle mit geringfügigen Änderungen in adminhtml hinzufügen.Dies ist der einfachste Weg, um die Ausgabe zu erzielen. Andernfalls müssen Sie auch das Produkt-Rendering, den Warenkorb und den Bestellfluss bearbeiten.
Wenn Sie nun benutzerdefinierte Optionen mit einem zusätzlichen Feld benötigen, das Ihnen beim Filtern dieser benutzerdefinierten Option hilft, müssen Sie mehr Anpassungen vornehmen oder nicht im Frontend.
Schreiben Sie Ihren Code entsprechend diesem Feldwert in
local/mage/catalog/Block/Product
oder in.layout/view
Bitte lassen Sie mich wissen, ob Sie diesen Weg für geeignet halten. Ich werde die genauen Dateien und Änderungen herausfinden, falls dies noch erforderlich ist.
quelle
Um eine Vorlage in Magento zu überschreiben, können Sie zunächst entweder eine local.xml-Datei im Layoutordner erstellen und den Knoten überschreiben, der dem Abschnitt der Vorlage oder der Ansicht entspricht, die Sie überschreiben möchten. oder Ihre eigene Vorlage Ordner erstellen und außer Kraft setzen , dass das Layout und Template - Struktur von dort gibt es ein gutes Beispiel ist hier . Zweitens haben Sie versucht, konfigurierbare Produkte zu verwenden, um das zu tun, was Sie erreichen möchten, denn wie Sie es beschrieben haben, scheint es, dass konfigurierbare Produkte dies bereits tun
quelle