Sie würden nicht glauben, wie viel Zeit ich damit verbracht habe, dies zu erforschen / zu versuchen. Alles, was ich möchte, ist, dass nach der Produktseite eine zusätzliche Seite im Bestellvorgang angezeigt wird, auf der der Kunde gefragt wird, welche Cross-Selling-Produkte er seiner Bestellung hinzufügen möchte (ich würde sie als Upselling bezeichnen, aber ich denke, das Magento Jargon ist "Cross-Selling"). Ich finde es wirklich unglaublich, dass mehr Unternehmen dies nicht wollen (ich denke, "Upselling" kann den Gewinn erheblich steigern, und was in Magento eingebaut ist, funktioniert nicht so gut (ich habe mehr als 20 "Cross-Selling" -Produkte und sie) dort nicht mal passen / zeigen).
Ich benutze Magento ver. 1.9.1.0.
Ich habe gerade das Porto Theme # 11 installiert, wenn das einen Unterschied macht
NEUE INFO: Ich habe versucht, dies umzusetzen, aber bisher kein Glück. Ich habe sogar jemanden, der mir jetzt hilft, aber wir können es nicht herausfinden. Kann jemand bitte Schritt für Schritt Anweisungen dazu geben? (Jede Lösung wäre sehr dankbar) .
Ich möchte, dass es ähnlich funktioniert wie proflowers.com (siehe den beigefügten Screenshot):
Diese Seite wird als nächster Schritt angezeigt, nachdem der Kunde ein Produkt in den Warenkorb gelegt hat (klicken Sie auf PROCEED TO CHECKOUT).
Alle die Cross-Selling - Produkte sind immer die SAME für jeden (jedes Produkt zu bestellen)
Bearbeitet am 15. November 2016:
Die Lösung, die mit 100 ausgezeichnet wurde, funktioniert tatsächlich. Jeder, der versucht, das zu tun, was ich versuche, sollte die Dateien herunterladen und in Ihr Stammverzeichnis hochladen und dann den folgenden Code in Ihre app/code/community/TM/SuggestPage/controllers/IndexController.php
Datei einfügen :
$block2 = $this->getLayout()->createBlock('checkout/cart_coupon')->setTemplate('checkout/cart/coupon.phtml');
$this->getLayout()->getBlock('content')->append($block2);
Ich versuche immer noch herauszufinden, wie 12 Produkte auf der speziellen Cross-Selling-Seite anstatt nur 4 angezeigt werden. Gemäß @MurtuzaZabuawala sollte dies durch Ändern der Datei crosssell.phtml in:
app/design/frontend/YourPackge/YourTheme/checkout/cart/
Ich habe meine crossell.phtml hier gefunden :
/public_html/app/design/frontend/smartwave/porto/template/checkout/cart
(Ich hoffe es ist das richtige - ich habe das Porto Theme installiert)
So sieht es aus:
<?php
/**
* Cart cross sell items template
*
* @see Mage_Checkout_Block_Cart_Crosssell
*/
$store = Mage::app()->getStore();
$code = $store->getCode();
$aspect_ratio = Mage::getStoreConfig("porto_settings/category/aspect_ratio",$code);
$ratio = ($aspect_ratio || (!$aspect_ratio && Mage::getStoreConfig("porto_settings/category/ratio_width",$code) == 0))?1:(Mage::getStoreConfig("porto_settings/category/ratio_height",$code)/Mage::getStoreConfig("porto_settings/category/ratio_width",$code));
?>
<?php if($this->getItemCount()): ?>
<div class="crosssell">
<h2><?php echo $this->__('Based on your selection, you may be interested in the following items:') ?></h2>
<ul id="crosssell-products-list" class="row">
<?php foreach ($this->getItems() as $_item): ?>
<li class="item col-sm-6 col-md-3">
<a class="product-image" href="<?php echo $_item->getProductUrl() ?>" title="<?php echo $this->escapeHtml($_item->getName()) ?>"><img src="<?php echo $this->helper('catalog/image')->init($_item, 'thumbnail')->resize(84,84*$ratio); ?>" width="84" height="<?php echo 84*$ratio ?>" alt="<?php echo $this->escapeHtml($_item->getName()) ?>" /></a>
<div class="product-details">
<h3 class="product-name"><a href="<?php echo $_item->getProductUrl() ?>"><?php echo $this->escapeHtml($_item->getName()) ?></a></h3>
<?php echo $this->getPriceHtml($_item, true) ?>
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_item) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
<ul class="add-to-links">
<?php if ($this->helper('wishlist')->isAllow()) : ?>
<li><a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
<?php endif; ?>
<?php if($_compareUrl=$this->getAddToCompareUrl($_item)): ?>
<li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
<?php endif; ?>
</ul>
</div>
</li>
<?php endforeach; ?>
</ul>
<script type="text/javascript">decorateList('crosssell-products-list', 'none-recursive')</script>
</div>
<?php endif; ?>
EDITIERT 2. Dezember 2016:
Dies ist eine großartige Lösung, die perfekt funktioniert, insbesondere wenn Sie jedem Produkt einzeln unterschiedliche Cross-Selling-Produkte zuweisen möchten. In meinem Fall - Ich möchte, dass alle meine Produkte genau die gleichen Cross-Selling-Produkte haben, und ich möchte dies je nach Saison ändern können. Deshalb habe ich mich für den zusätzlichen Schritt beim Auschecken entschieden (Lösung von Murtuza) Zabuawala unten) zeigen Produkte aus einer speziellen Kategorie an, die ich nur aus diesem Grund erstellt habe. Murtuza Zabuawala hat einen tollen Job gemacht. Ich vermisse hier nur den letzten Schritt:
Wenn ich den Code eingebe, der die Produkte einer bestimmten Kategorie anzeigen soll:
$block = $this->getLayout()->createBlock('catalog/product_list')->setCategoryId(157)->setTemplate('catalog/product/list.phtml'); $this->getLayout()->getBlock('content')->append($block);
Ich erhalte die folgende Fehlermeldung:
> There has been an error processing your request
>
>
> SQLSTATE[42000]: Syntax error or access violation: 1064 You have an
> error in your SQL syntax; check the manual that corresponds to your
> MySQL server version for the right syntax to use near ')' at line 1,
> query was: SELECT `mg_catalog_category_entity`.* FROM
> `mg_catalog_category_entity` WHERE (entity_id =)
>
> Trace:
> #0 /home/mystore/public_html/lib/Varien/Db/Statement/Pdo/Mysql.php(110):
> Zend_Db_Statement_Pdo->_execute(Array)
> #1 /home/mystore/public_html/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
> #2 /home/mystore/public_html/lib/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array)
> #3 /home/mystore/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238):
> Zend_Db_Adapter_Abstract->query('SELECT `mg_cata...', Array)
> #4 /home/mystore/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(428): Zend_Db_Adapter_Pdo_Abstract->query('SELECT `mg_cata...', Array)
> #5 /home/mystore/public_html/lib/Zend/Db/Adapter/Abstract.php(756): Varien_Db_Adapter_Pdo_Mysql->query(Object(Varien_Db_Select), Array)
> #6 /home/mystore/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php(943):
> Zend_Db_Adapter_Abstract->fetchRow(Object(Varien_Db_Select))
> #7 /home/mystore/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php(698):
> Mage_Eav_Model_Entity_Abstract->load(Object(Mage_Catalog_Model_Category),
> Object(Mage_Catalog_Model_Category), NULL)
> #8 /home/mystore/public_html/app/code/core/Mage/Core/Model/Abstract.php(225):
> Mage_Catalog_Model_Resource_Abstract->load(Object(Mage_Catalog_Model_Category),
> Object(Mage_Catalog_Model_Category), NULL)
> #9 /home/mystore/public_html/app/code/core/Mage/Catalog/Block/Product/List.php(80):
> Mage_Core_Model_Abstract->load(Object(Mage_Catalog_Model_Category))
> #10 /home/mystore/public_html/app/code/core/Mage/Catalog/Block/Product/List.php(142):
> Mage_Catalog_Block_Product_List->_getProductCollection()
> #11 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(918):
> Mage_Catalog_Block_Product_List->_beforeToHtml()
> #12 /home/mystore/public_html/app/code/core/Mage/Core/Block/Text/List.php(43):
> Mage_Core_Block_Abstract->toHtml()
> #13 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(919):
> Mage_Core_Block_Text_List->_toHtml()
> #14 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(637):
> Mage_Core_Block_Abstract->toHtml()
> #15 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(581):
> Mage_Core_Block_Abstract->_getChildHtml('content', true)
> #16 /home/mystore/public_html/app/design/frontend/smartwave/porto/template/page/1column.phtml(49):
> Mage_Core_Block_Abstract->getChildHtml('content')
> #17 /home/mystore/public_html/app/code/core/Mage/Core/Block/Template.php(241):
> include('/home/mystore/pu...')
> #18 /home/mystore/public_html/app/code/core/Mage/Core/Block/Template.php(272):
> Mage_Core_Block_Template->fetchView('frontend/smartw...')
> #19 /home/mystore/public_html/app/code/core/Mage/Core/Block/Template.php(286):
> Mage_Core_Block_Template->renderView()
> #20 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(919):
> Mage_Core_Block_Template->_toHtml()
> #21 /home/mystore/public_html/app/code/core/Mage/Core/Model/Layout.php(555):
> Mage_Core_Block_Abstract->toHtml()
> #22 /home/mystore/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(390):
> Mage_Core_Model_Layout->getOutput()
> #23 /home/mystore/public_html/app/code/community/TM/SuggestPage/controllers/IndexController.php(32):
> Mage_Core_Controller_Varien_Action->renderLayout()
> #24 /home/mystore/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(418):
> TM_SuggestPage_IndexController->indexAction()
> #25 /home/mystore/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250):
> Mage_Core_Controller_Varien_Action->dispatch('index')
> #26 /home/mystore/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172):
> Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
> #27 /home/mystore/public_html/app/code/core/Mage/Core/Model/App.php(354):
> Mage_Core_Controller_Varien_Front->dispatch()
> #28 /home/mystore/public_html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
> #29 /home/mystore/public_html/index.php(87): Mage::run('', 'store')
> #30 {main}
meine
app / code / community / TM / SuggestPage / controller / IndexControlle r.php
sieht aus wie das:
<?php class TM_SuggestPage_IndexController extends Mage_Core_Controller_Front_Action { public function indexAction() { $this->loadLayout() ->_initLayoutMessages('checkout/session') ->_initLayoutMessages('catalog/session'); $block2 = $this->getLayout()->createBlock('checkout/cart_coupon')->setTemplate('checkout/cart/coupon.phtml'); $this->getLayout()->getBlock('content')->append($block2); $_product = Mage::getModel('catalog/product')->load(1); //here 1 is product Id $block = $this->getLayout()->createBlock('catalog/product_list')->setCategoryId(157)->setTemplate('catalog/product/list.phtml'); $this->getLayout()->getBlock('content')->append($block); $this->renderLayout(); } }
Als ich stattdessen den folgenden Code ausprobiert habe (in :) app/code/community/TM/SuggestPage/controllers/IndexController.php
:
** **.
$category = Mage::getModel('catalog/category')->load(190);
$block = $this->getLayout()->createBlock('catalog/product_list')->setCategory($category)->setTemplate('catalog/product/list.phtml'); $this->getLayout()->getBlock('content')->append($block);
** **.
- es gab mir diesen Fehler :
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your
Die MySQL-Serverversion für die richtige Syntax zur Verwendung in der Nähe von ')' in Zeile 1 lautete: SELECT
mg_catalog_category_entity
. * FROMmg_catalog_category_entity
WHERE (entity_id =)Trace: #0 /home/mystore/public_html/lib/Varien/Db/Statement/Pdo/Mysql.php(110):
Zend_Db_Statement_Pdo -> _ execute (Array) # 1 /home/mystore/public_html/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql -> _ execute (Array) # 2 / home / mystore / public_html / lib /Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement-> execute (Array) # 3 /home/mystore/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract-> Abfrage ('SELECT
mg_cata...', Array) #4 /home/mystore/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(428): Zend_Db_Adapter_Pdo_Abstract->query('SELECT
mg_cata ... ', Array) # 5 /home/mystore/public_html/lib/Zend/Db/Adapter/Abstract.php(756): Varien_Db_Adapter_Pdo_Mysql-> query (Object (Varien_Db_Select), Array) # 6 / home / mystore /public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php(943): Zend_Db_Adapter_Abstract-> fetchRow (Object (Varien_Db_Select)) # 7 / home / mystore / public_html / app / code / core / Mage /Catalog/Model/Resource/Abstract.php(698): Mage_Eav_Model_Entity_Abstract-> load (Objekt (Mage_Catalog_Model_Category), Objekt (Mage_Catalog_Model_Category), NULL) # 8 / home / mystore / public_html / Model / Abstract.php (225): Mage_Catalog_Model_Resource_Abstract-> load (Objekt (Mage_Catalog_Model_Category), Objekt (Mage_Catalog_Model_Category), NULL) # 9 / home / mystore / public_html / app / code / core / Mage / Catalog / Block / .php (80):Mage_Core_Model_Abstract-> load (Object (Mage_Catalog_Model_Category)) # 10 /home/mystore/public_html/app/code/core/Mage/Catalog/Block/Product/List.php(142): Mage_Catalog_Block_Product_List_Product /mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(918): Mage_Catalog_Block_Product_List -> _ beforeToHtml () # 12 / home / mystore / public_html / app / code / core / Mage / Core / Block /Text/List.php(43): Mage_Core_Block_Abstract-> toHtml () # 13 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(919): Mage_Core_Block_Text_List -> _ toHt # 14 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(637): Mage_Core_Block_Abstract-> toHtml () # 15 / home / mystore / public_html / app / code / core / Mage /Core/Block/Abstract.php(581): Mage_Core_Block_Abstract->_getChildHtml ('content', true) # 16 /home/mystore/public_html/app/design/frontend/smartwave/porto/template/page/1column.phtml(49): Mage_Core_Block_Abstract-> getChildHtml ('content') # 17 / home / mystore / public_html / app / code / core / Mage / Core / Block / Template.php (241): include ('/ home / mystore / pu ...') # 18 / home / mystore / public_html / app / code / core / Mage / Core / Block / Template.php (272): Mage_Core_Block_Template-> fetchView ('frontend / smartw ...') # 19 / home / mystore / public_html / app / code / core / Mage / Core / Block / Template.php (286): Mage_Core_Block_Template-> renderView () # 20 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abstract.php(919): Mage_Core_Block_Template -> _ toHtml () # 21 /home/mystore/public_html/app/code/core/Mage/Core/Model/Layout.php(555): Mage_Core_Block_Abstract->toHtml () # 22 /home/mystore/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(390): Mage_Core_Model_Layout-> getOutput () # 23 / home / mystore / public_html / app / code / community / TM / SuggestPage / controller / IndexController.php (33): Mage_Core_Controller_Varien_Action-> renderLayout () # 24 /home/mystore/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php ( 418): TM_SuggestPage_IndexController-> indexAction () # 25 /home/mystore/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action-> dispatch # 26 /home/mystore/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match (Object (Mage_Core_Controller_Request_Http)) # 27 /home/mystore/public_html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front-> dispatch () # 28 / home /ml / app / Mage.php (684): Mage_Core_Model_App-> run (Array) # 29 /home/mystore/public_html/index.php(87): Mage :: run ('', 'store') # 30 {main}Error log record number: 573016373867
Soll meine Controller.php so aussehen?
<?php class TM_SuggestPage_IndexController extends Mage_Core_Controller_Front_Action { public function indexAction() { $this->loadLayout() ->_initLayoutMessages('checkout/session') ->_initLayoutMessages('catalog/session'); $block2 = $this->getLayout()->createBlock('checkout/cart_coupon')->setTemplate('checkout/cart/coupon.phtml'); $this->getLayout()->getBlock('content')->append($block2); $_product = Mage::getModel('catalog/product')->load(1); //here 1 is product Id $category = Mage::getModel('catalog/category')->load(190); $block = $this->getLayout()->createBlock('catalog/product_list')->setCategory($category)->setTemplate('catalog/product/list.phtml');
$ this-> getLayout () -> getBlock ('content') -> append ($ block);
$this->renderLayout(); } }
EDITIERT am 29. Dezember 2016:
Die von Murtuza Zabuawala gepostete Lösung ist großartig! Das einzige, was ich noch tun muss, ist, Code einzugeben, um Produkte aus einer bestimmten Kategorie anstelle der eigentlichen Cross-Selling-Artikel aufzurufen (anzuzeigen). Irgendeine Idee, wie das geht?
quelle
Antworten:
Installieren Sie die folgende Erweiterung, mit der Sie zusätzliche Seiten nach dem Warenkorb erstellen können
https://github.com/tmhub/suggestpage
Über der Erweiterung fügen Sie eine zusätzliche Seite nach dem Warenkorb hinzu. Auf dieser Seite fügen Sie diesen Code hinzu und Sie erhalten Cross-Selling-Produktdaten
Ändern Sie Ihre indexController indexAction wie folgt
und für Ihr 4-Produkt-Problem überprüfen Sie bitte in Ihrer
app/design/frontend/YourPackge/YourTheme/checkout/cart/crosssell.phtml
Datei alle Bedingungen, die nach vier Produkten für die Schleife brechen, und ändern Sie sie dann.Befolgen Sie diesen schnellen Schritt, um das Limit für Cross-Selling-Produkte zu erhöhen
1) kopieren
app/code/core/Mage/Checkout/Block/Cart/Crosssell.php
Datei nachapp/code/local/Mage/Checkout/Block/Cart/Crosssell.php
2) Finden Sie diese Linie und erhöhen Sie das Limit gemäß Ihren Anforderungen
protected $_maxItemCount = 4;
quelle
app/code/community/TM/SuggestPage/controllers/IndexController.php
und fügen Sie diesen Code in indexAction vor renderLayoutWir haben etwas auf einer Kundenwebsite implementiert, auf der Sie auf "Weiter" klicken, um zu überprüfen, ob Sie auf einer Seite landen, bevor Sie aufgefordert werden, kostenlose Muster hinzuzufügen. Diese werden aus einer Kategorie gezogen, sind aber genauso einfach in einem Cross-Selling zu finden / verwandte Produkte.
Im Wesentlichen müsste in Bezug auf den Code ein Modul auf das Ereignis warten
controller_action_predispatch_checkout_onepage_index
warten und den Benutzer auf eine Seite umleiten, die von diesem Modul mit den von Ihnen benötigten Produkten erstellt wurde. Anschließend muss ein Sitzungsflag gesetzt werden, das besagt, dass dieser Benutzer dies bereits gesehen hat diese Upselling-Seite und lassen Sie sie bis zur Kasse.Ich bin mir nicht sicher, ob es Module gibt, die dies derzeit tun.
Als kurzes Beispiel haben wir dies als unsere XML:
Edit 15/11/16 Hier ist, was ich bisher habe, braucht noch einige Änderungen:
App / etc / modules /
app / code / community / Dc / Crosssells / etc / config.xml
app / code / community / Dc / Crosssells / Model / Observer.php
Das oben Genannte reicht aus, um den Benutzer nach dem Auschecken auf eine andere Seite umzuleiten. Müsste ein Flag in diesem Beobachter für die Sitzung setzen und dann prüfen, ob dieses Flag vorhanden ist. Wenn dies der Fall ist, führen Sie die Umleitung durch.
Dann können wir einen Controller erstellen. Dies ist unsere Seite "Vor dem Auschecken". Sie erstellt / rendert das Layout mithilfe eines Blocks aus der Vorlage. app / code / community / Dc / Crosssells / controller / IndexController.php
Wir haben eine Blockklasse, in der die vom Frontend-Block benötigten Funktionen untergebracht sind. Ich habe dies nicht vollständig getestet. Sie soll eine Produktsammlung zurückgeben, die nach der Kategorie gefiltert ist, die Sie im Backend erstellt haben sollten, in meinem Fall nach Kategorie 292. app / code / community / Dc / Crosssells / Block / BeforeYouBuy.php
app / design / frontend / base / default / layout / dc / dc_crosssell.xml
app / design / frontend / base / default / template / dc / crosssell.phtml
Ich habe diesen Code noch nicht vollständig getestet und muss noch einige Arbeiten ausführen, um die Produkte mit Schaltflächen zum Hinzufügen zum Warenkorb usw. ordnungsgemäß anzuzeigen. Ich habe ihn hier in ein Github-Repo eingefügt: https://github.com/DanCarlyon/MagentoCrossSellPage
Fühlen Sie sich frei, herunterzuladen und damit zu spielen.
quelle
Probieren Sie dieses Modul aus:
Datei: app \ etc \ modules \ Rkt_CrossSell.xml
echte Community-Datei: app \ code \ community \ Rkt \ CrossSell \ etc \ config.xml
1.0.0 Rkt_CrossSell_Helper Rkt_CrossSell_Block rkt_crossell.xml Datei: app \ code \ community \ Rkt \ CrossSell \ Block \ Katalog \ Produkt \ Ansicht \ Crosssell.php
} Datei: app \ code \ community \ Rkt \ CrossSell \ Helper \ Data.php
} Datei: app \ design \ frontend \ base \ default \ layout \ rkt_crossell.xml
Fügen Sie nun in Ihrer view.phtml diesen Code an der entsprechenden Position hinzu
getChildHtml ('crosssell')?> Leeren Sie jetzt Ihren Cache. Überprüfen Sie, ob alle Dateinamen und Dateipfade korrekt sind. Dann können Sie loslegen
Sie können einen Block auf der Produktseite hinzufügen oder die HTML-Datei innerhalb einer CMS-Seite aufrufen.
quelle
Versuchen Sie den folgenden Code für das Rendern von Kategorien
quelle