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):
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/IndexController.php
arquivo:
$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')->setCategoryId(157)->setTemplate('catalog/product/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')->setCategoryId(157)->setTemplate('catalog/product/list.phtml'); $this->getLayout()->getBlock('content')->append($block); $this->renderLayout(); } }
Quando tentei o seguinte código (em 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);
**
- 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
. * 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 /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('SELECT
mg_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')->setCategory($category)->setTemplate('catalog/product/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?
fonte
Respostas:
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
e, para o seu problema de 4 produtos, verifique no seu
app/design/frontend/YourPackge/YourTheme/checkout/cart/crosssell.phtml
arquivo 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.php
arquivo paraapp/code/local/Mage/Checkout/Block/Cart/Crosssell.php
2) encontre esta linha e aumente o limite conforme sua necessidade
protected $_maxItemCount = 4;
fonte
app/code/community/TM/SuggestPage/controllers/IndexController.php
e adicione esse código no indexAction antes do renderLayoutImplementamos 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_index
e 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:
Editar 15/11/16 Aqui está o que eu tenho até agora, ainda precisa de algumas reparações:
app / etc / modules /
app / code / community / Dc / Crosssells / etc / config.xml
app / code / community / Dc / Crosssells / Model / Observer.php
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
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
app / design / frontend / base / padrão / layout / dc / dc_crosssell.xml
app / design / frontend / base / padrão / modelo / dc / crosssell.phtml
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.
fonte
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
} 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.
fonte
Experimente o código abaixo Para renderização de categoria
fonte