So fügen Sie eine benutzerdefinierte Seite mit Cross-Selling-Produkten hinzu


7

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): Geben Sie hier die Bildbeschreibung ein

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/IndexControlle‌​‌​r.phpDatei 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')->set‌​CategoryId(157)->set‌​Template('catalog/pr‌​oduct/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')->set‌​CategoryId(157)->set‌​Template('catalog/pr‌​oduct/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/IndexControlle‌​‌​r.php:

** **.

$category = Mage::getModel('catalog/category')->load(190);  
   $block = $this->getLayout()->createBlock('catalog/product_list')->set‌​Category($category)->set‌​Template('catalog/pr‌​oduct/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. * FROM mg_catalog_category_entityWHERE (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('SELECTmg_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')->set‌​Category($category)->set‌​Template('catalog/pr‌​oduct/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?



1
Sie möchten, dass die Seite angezeigt wird, nachdem ein Produkt in den Warenkorb gelegt wurde oder wenn der Kunde zur Kasse geht?
Marius

Ihre Frage ist verwirrend. Bitte klären Sie Ihre Frage. Muss Ihr Kunde zu Upselling-Produkten (Upselling-Produktseite) des Produkts weiterleiten, das dem Warenkorb hinzugefügt wurde?
ForgeOnline


Raul Sanchez - Vielen Dank, aber dies ist NICHT mein Problem (mein Cross-Selling-Produkt wird auf der Produktdetailseite angezeigt), aber ich möchte im Check-out-Prozess eine zusätzliche Seite mit nur Cross-Selling-Produkten erstellen, weil ich haben mehr als 20 Cross-Selling-Produkte und sie werden niemals auf die Produktseite passen und der Kunde wird sie dort nicht sehen ...
Allysin

Antworten:


8

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

public function indexAction()
{
    $this->loadLayout()
        ->_initLayoutMessages('checkout/session')
        ->_initLayoutMessages('catalog/session');

    $_product = Mage::getModel('catalog/product')->load(1); //here 1 is product Id
    $block =  $this->getLayout()->createBlock('checkout/cart_crosssell')->setProduct($_product)->setTemplate('checkout/cart/crosssell.phtml');
    $this->getLayout()->getBlock('content')->append($block);

    $this->renderLayout();
}

und für Ihr 4-Produkt-Problem überprüfen Sie bitte in Ihrer app/design/frontend/YourPackge/YourTheme/checkout/cart/crosssell.phtmlDatei 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;


1
Gehen Sie zu app/code/community/TM/SuggestPage/controllers/IndexController.phpund fügen Sie diesen Code in indexAction vor renderLayout
Murtuza Zabuawala


1
@ Allysin können Sie bitte Ihre ganze neue indexController-Datei
Murtuza Zabuawala


1
@ Allysin Index controller.php ersetzen Sie einfach durch Crossseell-Code
Murtuza Zabuawala

3

Wir 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:

<controller_action_predispatch_checkout_onepage_index>
    <observers>
        <namespace_module>
            <class>namespace_module/observer</class>
            <method>redirectToUpsellOnCheckout</method>
        </namespace_module>
    </observers>
</controller_action_predispatch_checkout_onepage_index>

Edit 15/11/16 Hier ist, was ich bisher habe, braucht noch einige Änderungen:

App / etc / modules /

<?xml version="1.0"?>
<config>
    <modules>
        <Dc_Crosssells>
            <active>true</active>
            <codePool>community</codePool>
        </Dc_Crosssells>
    </modules>
</config>

app / code / community / Dc / Crosssells / etc / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Dc_Crosssells>
            <version>0.0.1</version>
        </Dc_Crosssells>
    </modules>
    <global>
        <blocks>
            <dc_crosssells>
                <class>Dc_Crosssells_Block</class>
            </dc_crosssells>
        </blocks>
        <events>
            <controller_action_predispatch_checkout_onepage_index>
                <observers>
                    <dc_crosssells>
                        <class>Dc_Crosssells_Model_Observer</class>
                        <method>controllerActionPredispatchCheckoutOnepageIndex</method>
                    </dc_crosssells>
                </observers>
            </controller_action_predispatch_checkout_onepage_index>
        </events>
    </global>
    <frontend>
        <routers>
            <beforeyoucheckout>
                <use>standard</use>
                <args>
                    <module>Dc_Crosssells</module>
                    <frontName>before-you-checkout</frontName>
                </args>
            </beforeyoucheckout>
        </routers>
        <layout>
            <updates>
                <dc_crosssells>
                    <file>dc/dc_crosssells.xml</file>
                </dc_crosssells>
            </updates>
        </layout>
    </frontend>
</config>

app / code / community / Dc / Crosssells / Model / Observer.php

<?php
class Dc_Crosssells_Model_Observer
{
    public function controllerActionPredispatchCheckoutOnepageIndex(Varien_Event_Observer $observer)
    {
        if(Mage::getSingleton('core/session')->getCrossSellFlag()) {
            Mage::app()->getResponse()->setRedirect(Mage::getBaseUrl() . 'before-you-checkout');
            Mage::getSingleton('core/session')->setCrossSellFlag('true'); 
        }
    }

}

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

<?php
class Dc_Crosssells_IndexController extends Mage_Core_Controller_Front_Action
{

    public function indexAction()
    {
        $this->loadLayout(array('default'));

        $block = $this->getLayout()->getBlock('before.you.buy')->getBlockHtml('before.you.buy');
        $this->getLayout()->getBlock('content')->append($block);
        $this->_initLayoutMessages('core/session');
        $this->renderLayout();
    }

}

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

<?php
class Dc_Crosssells_Block_BeforeYouBuy extends Mage_Core_Block_Template
{
    public function getCrossSellProductsFromCategory()
    {
        $category = Mage::getModel('catalog/category')->load(292);

        $products = Mage::getModel('catalog/product')->getCollection()
            ->addCategoryFilter($category)
            ->addAttributeToSelect('*');

        return $products;
    }
}

app / design / frontend / base / default / layout / dc / dc_crosssell.xml

<?xml version="1.0"?>
<layout version="0.1.0">
    <beforeyoucheckout_index_index>
        <reference name="content">
            <block type="dc_crosssells/beforeYouBuy" name="before.you.buy" template="dc/crosssell.phtml"/>
        </reference>
    </beforeyoucheckout_index_index>
</layout>

app / design / frontend / base / default / template / dc / crosssell.phtml

<?php $products = $this->getCrossSellProductsFromCategory();

foreach($products as $item) {
    echo $item->getName(). '<br />';
}

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.


Was du hast, klingt genau so, wie ich es brauche! Es macht mir nichts aus, alle Cross-Selling-Produkte in eine Kategorie einzuteilen und diese anzeigen zu lassen. Können Sie mir auf irgendeine Weise näher erläutern, wie ich dies möglicherweise umsetzen kann? Ich habe es tatsächlich geschafft, einen zusätzlichen Schritt im Check-out-Prozess zu bekommen (ich habe die Erweiterung "SuggestPage" von Murtuza Zabuawala installiert / direkt über Ihrem Beitrag hier /), aber es werden nur 4 Cross-Selling-Artikel aus den Cross-Sells angezeigt tatsächlich mit diesem Produkt im Admin verbunden. Jede Hilfe wäre sehr dankbar! ;-)
Allysin

Ich werde heute versuchen, meine Antwort mit einer vollständigeren Lösung zu aktualisieren. Ich weiß nichts über die Suggestpage-Erweiterung und habe derzeit keine Testumgebung zum Testen. :)
DanCarlyon

Ich bin wirklich daran interessiert - ich denke, das Hinzufügen der Cross-
Selling

Hallo @Allysin, es tut mir wirklich leid für die Verzögerung. Ich habe meine Antwort mit einem Teil des Codes aktualisiert, den ich schreiben konnte, obwohl er noch nicht ganz vollständig ist. Aber es gibt ein Github-Repo, in dem Sie herunterladen können, was ich geschrieben habe, und damit spielen können.
DanCarlyon

0

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

/**
 * Get crosssell items
 *
 * @return array
 */
public function getItems()
{
    $items = $this->getData('items');
    if (is_null($items)) {
        $items = $this->getProduct()->getCrossSellProducts();
        $this->setData('items', $items);
    }
    return $items;
}

} 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.


Danke für die Hilfe. Lassen Sie mich Folgendes fragen: Verstehe ich es richtig, dass ich den Code in das graue Feld in die 5 von Ihnen erwähnten Dateien einfügen und dann getChildHtml in view.phtml hinzufügen würde? Würde dies beim Auschecken eine zusätzliche Seite erstellen und die Cross-Selling-Produkte darauf anzeigen? Ich bin offen für jede Lösung, die mindestens 12 Cross-Selling-Produkte so anzeigt, dass Kunden sie einfach nicht verpassen können ... Danke
Allysin,

Wenn Sie alle Cross-Selling-Produkte zum Zeitpunkt des Hinzufügens zum Warenkorb anzeigen möchten, können Sie sie mithilfe der Ereignisse und Beobachter in Magento im Popup anzeigen. Als ob Sie "checkout_cart_product_add_after" verwenden könnten und dort müssen Sie alle Cross-Selling-Produkte in einem Popup oder als Ihr vorgeschlagenes Design anzeigen.
Asheem Patro

Sie können auch ein Ajax-Add-to-Cart zu den Cross-
Selling-

Vielen Dank für Ihre Vorschläge. Ein Popup klingt wunderbar, aber das Problem hier wird sein, dass ich mit diesen Dingen nicht genug vertraut bin, um es zu implementieren. Ich kann FTP verwenden, um Dateien hochzuladen und Änderungen an vorhandenen Dateien vorzunehmen, aber ohne schrittweise Anweisungen - ich werde nicht herausfinden können, wie das eingerichtet wird ... :-(
Allysin

Dazu müssen Sie zunächst einen Ajax in den Warenkorb Ihres Magentos legen. Dann können Sie mit Observer die zugehörigen Cross-Selling- oder Up-Selling-Produkte in einem Fenster anzeigen und dort auch einen Ajax-Warenkorb für die Cross-Selling-Produkte erstellen. Um dies zu erreichen, müssen Sie sich viel Mühe geben :-)
Asheem Patro

0

Versuchen Sie den folgenden Code für das Rendern von Kategorien

   $category = Mage::getModel('catalog/category')->load(157);  
   $block = $this->getLayout()->createBlock('catalog/product_list')->set‌​Data('category_id',$category)->set‌​Template('catalog/pr‌​oduct/list.phtml'); 
   $this->getLayout()->getBlock('content')->append($block);

Ich habe es getan und auch einen Fehler bekommen (ich habe diesen Fehler oben in meinem ursprünglichen Beitrag gepostet).
Allysin

1
@ Allysin wir müssen schauen Ich kann nicht sagen, warum dieser Fehler kommt
Murtuza Zabuawala

@ Allysin überprüfen aktualisierte Antwort
Murtuza Zabuawala
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.