Como adicionar uma página personalizada com produtos de venda cruzada

7

Você não acreditaria quanto tempo eu gastei pesquisando / tentando fazer isso acontecer. Tudo o que eu quero é que uma página extra apareça no processo de pedidos, após a página do produto, perguntando ao cliente quais produtos de venda cruzada eles desejam adicionar ao seu pedido (eu os chamaria de up-sell, mas acho que o Magento linguagem é "venda cruzada"). Realmente acho inacreditável que mais empresas não o desejem (acho que a "venda direta" pode aumentar muito os lucros e o que está embutido no Magento realmente não funciona tão bem (eu tenho mais de 20 produtos de venda cruzada) e eles nem se encaixa / mostra lá).

Estou usando o Magento ver. 1.9.1.0

Acabei de instalar o Porto Theme # 11 se isso faz diferença

NOVA INFORMAÇÃO: Eu tenho tentado implementar isso, mas sem sorte até agora. Até tenho alguém me ajudando agora, mas não conseguimos descobrir. Alguém pode dar instruções passo a passo sobre como fazer isso? (QUALQUER solução seria muito apreciada) .

Eu gostaria que funcionasse de maneira semelhante à do proflowers.com (veja a imagem em anexo): insira a descrição da imagem aqui

Eles exibem esta página quando a próxima etapa APÓS o cliente adicionar um produto ao carrinho (clica em PROSSEGUIR PARA VERIFICAR)

Todos os produtos de venda cruzada são SEMPRE O MESMO para todos (todos os produtos solicitados)


Editado em 15 de novembro de 2016:

A solução que recebeu a reputação de 100 realmente funciona. Qualquer pessoa que tente fazer o que estou tentando fazer deve baixar os arquivos e enviá-los para o diretório raiz e, em seguida, adicionar o seguinte código no seu app/code/community/TM/SuggestPage/controllers/IndexControlle‌​‌​r.phparquivo:

$block2 =  $this->getLayout()->createBlock('checkout/cart_coupon')->setTemplate('checkout/cart/coupon.phtml');
$this->getLayout()->getBlock('content')->append($block2);

Ainda estou tentando descobrir como exibir 12 produtos na página de venda cruzada especial em vez de apenas 4. Segundo o @MurtuzaZabuawala - isso deve ser feito modificando o arquivo crosssell.phtml em:

app/design/frontend/YourPackge/YourTheme/checkout/cart/

Encontrei meu crossell.phtml aqui :

/public_html/app/design/frontend/smartwave/porto/template/checkout/cart

(Espero que seja o correto - eu tenho o Porto Theme instalado)

Aqui está o que parece:

<?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; ?>

EDITADO em 2 de dezembro de 2016:

Essa é uma ótima solução que funciona perfeitamente, especialmente se você deseja atribuir diferentes produtos de venda cruzada a cada produto individualmente. No meu caso - quero que todos os meus produtos tenham os mesmos produtos de venda cruzada EXATA e desejo poder mudar isso dependendo da estação, então decidi dar uma etapa extra no check-out (solução fornecida por Murtuza Zabuawala abaixo) exibem produtos de uma categoria especial criada por esse motivo. Murtuza Zabuawala fez um ótimo trabalho. Só estou perdendo a etapa final aqui:

Quando eu coloco o código que deve exibir os produtos de uma categoria específica:

$block = $this->getLayout()->createBlock('catalog/product_list')->set‌​CategoryId(157)->set‌​Template('catalog/pr‌​oduct/list.phtml'); $this->getLayout()->getBlock('content')->append($block);

Eu recebi a seguinte mensagem de erro:

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

meu

app / code / community / TM / SuggestPage / controllers / IndexControlle‌‌ r.php

se parece com isso:

<?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();
    }
}

Quando tentei o seguinte código (em 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);

**

  • me deu este erro :
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your

Na versão do servidor MySQL para a sintaxe correta a ser usada perto de ')' na linha 1, a consulta foi: 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 /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-> consulta ('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 ... ', Matriz) # 5 /home/mystore/public_html/lib/Zend/Db/Adapter/Abstract.php(756): Varien_Db_Adapter_Pdo_Mysql-> query (Objeto (Varien_Db_Select), Matriz) # 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)), Objeto (Mage_Catalog_Model_Category), NULL) # 8 / home / mystore / public_html / app / code / core / Mage 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/core/Mage/Catalog/Block/Product/List.php(142): Mage_Catalog_Block_Product_List -> _ getProductCollection /> (get # 11) /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/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 (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 ('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}

Error log record number: 573016373867

Meu Controller.php deve se parecer com isso?

<?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 ('conteúdo') -> anexar ($ bloco);

    $this->renderLayout();
    }
}

EDITADO em 29 de dezembro de 2016:

A solução publicada por Murtuza Zabuawala é ótima! A única coisa que ainda preciso fazer é inserir algum código para chamar (exibir) produtos de uma categoria específica em vez dos itens reais de venda cruzada. Alguma idéia de como fazer isso?

Allysin
fonte
Eu acho que isso poderia funcionar para você magento.stackexchange.com/questions/95972/…
Raul Sanchez
1
deseja que a página seja exibida após a adição de um produto ao carrinho ou quando o cliente fizer o checkout?
Marius
Sua pergunta é confusa. Esclareça sua pergunta. Você precisa que seu cliente redirecione para produtos com vendas adicionais (página de vendas com vendas adicionais) do produto que foi adicionado ao carrinho?
ForgeOnline 8/16
Raul Sanchez - Obrigado, mas esse não é o meu problema (meu produto de venda cruzada está sendo exibido na página de detalhes do produto), mas o que eu estou procurando é criar uma página extra no processo de check-out com apenas produtos de venda cruzada porque eu tem mais de 20 produtos de venda cruzada e eles nunca vai caber na página do produto eo cliente não vai vê-los lá ...
Allysin

Respostas:

8

Instale a extensão abaixo que ajudará você a criar página extra após o carrinho

https://github.com/tmhub/suggestpage

extensão acima, adicione página extra após o carrinho e essa página você adicionará esse código e obterá dados de produtos com venda cruzada

alterar seu indexController indexAction como abaixo

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();
}

e, para o seu problema de 4 produtos, verifique no seu app/design/frontend/YourPackge/YourTheme/checkout/cart/crosssell.phtmlarquivo qualquer condição que interrompa o ciclo após quatro produtos e altere-o.

para aumentar o limite do produto de venda cruzada, siga esta etapa rápida

1) copiar app/code/core/Mage/Checkout/Block/Cart/Crosssell.phparquivo paraapp/code/local/Mage/Checkout/Block/Cart/Crosssell.php

2) encontre esta linha e aumente o limite conforme sua necessidade protected $_maxItemCount = 4;

Murtuza Zabuawala
fonte
1
Vá para app/code/community/TM/SuggestPage/controllers/IndexController.phpe adicione esse código no indexAction antes do renderLayout
Murtuza Zabuawala 8/16
1
@Allysin você pode por favor postar toda a sua nova indexController Arquivo
Murtuza Zabuawala
1
Vamos continuar esta discussão no chat .
Murtuza Zabuawala 15/11
1
@Allysin índice Controller.php apenas substituir com código crossseell
Murtuza Zabuawala
3

Implementamos algo no site de um cliente, no qual você clica em continuar para fazer o checkout e acessa uma página antes que ela solicite a adição de amostras gratuitas. Elas são extraídas de uma categoria, mas seria igualmente fácil obter algumas vendas cruzadas /produtos relacionados.

Basicamente em termos de código, o que teria que acontecer é que um módulo teria que escutar o evento controller_action_predispatch_checkout_onepage_indexe redirecionar o usuário para uma página criada por esse módulo com os produtos que você precisa; depois disso, defina um sinalizador de sessão para dizer que esse usuário já viu nessa página de up-sell e permita que eles cheguem ao caixa.

Não tenho certeza se existem módulos por aí que atualmente fazem isso.

Como um breve exemplo, temos isso como nosso 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>

Editar 15/11/16 Aqui está o que eu tenho até agora, ainda precisa de algumas reparações:

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'); 
        }
    }

}

Isso acima é suficiente para redirecionar o usuário para outra página depois de clicar no checkout. Seria necessário definir um sinalizador dentro desse observador para a sessão e, em seguida, verificar se esse sinalizador existe, se existir, faça o redirecionamento.

Em seguida, podemos criar um controlador. Essa será a nossa página "antes do checkout", cria / renderiza o layout usando um bloco do modelo. app / code / community / Dc / Crosssells / controllers / 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();
    }

}

Temos uma classe de bloco para abrigar as funções necessárias ao bloco de front-end, ainda não testei totalmente, é suposto retornar uma coleção de produtos filtrada pela categoria que você deveria ter criado no back-end; no meu caso, é a categoria 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 / padrão / 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 / padrão / modelo / dc / crosssell.phtml

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

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

Ainda não testei completamente esse código e ainda preciso de algum trabalho para exibir os produtos corretamente com os botões adicionar ao carrinho, etc. Coloquei-o em um repositório do github aqui: https://github.com/DanCarlyon/MagentoCrossSellPage

Sinta-se livre para fazer o download e jogar com ele.

DanCarlyon
fonte
o que você tem soa exatamente como o que eu preciso! Não me importo de colocar todos os produtos de venda cruzada em uma categoria e exibir isso. Existe alguma maneira de você me fornecer mais detalhes sobre como eu posso implementar isso? Consegui realmente obter uma etapa extra no processo de check-out (instalei a extensão "SuggestPage" da Murtuza Zabuawala / logo acima da sua postagem aqui /), mas ela exibe apenas 4 itens de venda cruzada das vendas cruzadas que são realmente associado a esse produto no Admin. Qualquer ajuda seria muito apreciada! ;-)
Allysin 8/16
Vou tentar atualizar minha resposta hoje com uma solução mais completa, eu realmente não sei nada sobre a extensão sugerpage e atualmente não tenho um ambiente de teste para testá-lo. :)
DanCarlyon
Eu estou realmente interessado neste - Eu acho que adicionar os produtos de venda cruzada de uma categoria realmente fazer o que estou tentando realizar
Allysin
Oi @Allysin realmente sinto muito pelo atraso, atualizei minha resposta com alguns dos códigos que consegui escrever, embora ainda não esteja completo. Mas há um repositório no github onde você pode baixar o que escrevi e brincar com ele.
DanCarlyon
0

Experimente este módulo:

Arquivo: app \ etc \ modules \ Rkt_CrossSell.xml

verdadeiro arquivo da comunidade: app \ code \ community \ Rkt \ CrossSell \ etc \ config.xml

1.0.0 Rkt_CrossSell_Helper Rkt_CrossSell_Block rkt_crossell.xml Arquivo: app \ code \ community \ Rkt \ CrossSell \ Block \ Catalog \ Product \ View \ 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;
}

} Arquivo: app \ code \ community \ Rkt \ CrossSell \ Helper \ Data.php

} Arquivo: app \ design \ frontend \ base \ default \ layout \ rkt_crossell.xml

Agora, no seu view.phtml, adicione este código na posição apropriada

getChildHtml ('crosssell')?> Agora limpe seu cache. Verifique o nome do arquivo evey e os caminhos do arquivo estão corretos. Então você está pronto para ir

Você pode adicionar um bloco na página do produto ou chamar o arquivo phtml dentro de uma página do cms.

Asheem Patro
fonte
Obrigado por ajudar. Deixe-me perguntar uma coisa: eu entendi corretamente que eu insira o código na caixa cinza nos 5 arquivos mencionados e, em seguida, adicione o getChildHtml em view.phtml? Isso criaria uma página extra no processo de check-out e exibia os produtos de venda cruzada nela? Estou aberto a qualquer solução que iria exibir, pelo menos, 12 produtos de venda cruzada em tal maneira a que os clientes simplesmente não seria capaz de perdê-las ... Obrigado
Allysin
Se você deseja exibir todo o produto de venda cruzada no momento, adicione ao carrinho, você pode mostrar em pop-up usando os eventos e observadores em Magento. Como você pode usar "checkout_cart_product_add_after" e lá você tem que mostrar todo o produto de venda cruzada em um pop-up ou como seu design sugerido.
Asheem Patro
Você também pode executar um add ajax ao carrinho para as vender produtos transversais
Asheem Patro
Muito obrigado por suas sugestões. Um pop-up parece maravilhoso, mas o problema aqui será que eu não sou versado o suficiente nessas coisas para implementá-lo. Posso usar o FTP para fazer upload de arquivos e fazer alterações nos arquivos existentes, mas sem instruções passo a passo - não poderei descobrir como configurá-lo ... :-(
Allysin
Para isso, você deve adicionar um carrinho de ajax ao seu magento. Em seguida, usando o observador, você pode mostrar os produtos de venda cruzada ou de venda cruzada relacionados em uma janela e também é necessário fazer um ajax adicionar ao carrinho para os produtos de venda cruzada. Para que isso aconteça você vai precisar de uma série de esforços :-)
Asheem Patro
0

Experimente o código abaixo Para renderização de categoria

   $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);
Murtuza Zabuawala
fonte
Eu fiz e recebi um erro também (eu publiquei esse erro no topo da minha postagem original).
Allysin
1
@Allysin precisamos olhar não posso dizer por que esse erro está chegando
Murtuza Zabuawala
@Allysin check answer updated #
Murtuza Zabuawala