クロスセル製品を含むカスタムページを追加する方法


7

私がこれを実現するために調査/試行に費やした時間がどれほど信じられないでしょう。私が欲しいのは、注文に追加するクロスセル製品を顧客に尋ねた後、注文プロセスで追加のページを表示することだけです(私はそれらをアップセルと呼びますが、Magentoだと思います)用語は「クロスセル」です)。多くの企業がこれを望まないのは本当に信じられないことです(「アップセル」により利益が大幅に増加し、Magentoに組み込まれているものがあまりうまく機能しないと思います(「クロスセル」製品が20個以上あり、適合/表示しないでください)。

Magento ver。を使っています。1.9.1.0。

ポルトテーマ#11をインストールしました。

新しい情報:これを実装しようとしましたが、今のところ運がありません。私は誰かが私を手伝っていますが、それを理解することはできません。誰かがこれを行う方法を段階的に説明してくれますか?(どんな解決策も大歓迎です)

proflowers.comと同じように機能させたい(同封のスクリーンショットを参照)。 ここに画像の説明を入力してください

お客様がカートに商品を追加した後の次のステップとして、このページが表示されます(チェックアウトに進むをクリックします)

すべてのクロスセル製品は常に すべての人に同じです(注文したすべての製品)


2016年11月15日に編集:

100の評判を獲得したソリューションは実際に機能します。私がやろうとしていることをやろうとしている人は、ファイルをダウンロードしてルートディレクトリにアップロードし、次のコードをapp/code/community/TM/SuggestPage/controllers/IndexControlle‌​‌​r.phpファイルに追加する必要があります。

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

まだ4つではなく、12の製品を特別なクロスセルページに表示する方法を理解しようとして ます。

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

ここでcrossell.phtmlを見つけまし

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

(私はそれが正しいものであることを願っています-私はポルトテーマをインストールしています)

これは次のようになります。

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

2016年12月2日編集:

これは、特に異なるクロスセル製品を各製品に個別に割り当てたい場合に最適なソリューションです。私の場合-すべての商品に「完全同一」のクロスセル商品を入れたいのですが、季節に応じてそれを変更できるようにしたいので、チェックアウトで追加のステップを行うことにしました(Murtuzaが提供するソリューション)以下のZabuawala)は、このために私が作成した特別なカテゴリの製品を表示しています。Murtuza Zabuawalaは素晴らしい仕事をしました。私はここで最後のステップを逃しています:

特定のカテゴリの製品を表示するコードを挿入すると、次のようになります。

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

次のエラーメッセージが表示されます。

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

俺の

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

このようになります:

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

ときに私が代わりに次のコードを試してみました(中: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);

**

  • それは私にこのエラーを与えました:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your

1行目でnear ')'を使用するための正しい構文のMySQLサーバーバージョンクエリは次のとおりです: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-> query( '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(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(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 {メイン}

Error log record number: 573016373867

私のController.phpは次のようになっていると思いますか?

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

2016年12月29日編集:

Murtuza Zabuawalaによって投稿されたソリューションは素晴らしいです!まだ必要なことは、実際のクロスセルアイテムの代わりに、特定のカテゴリの製品を呼び出す(表示する)ためのコードを挿入することだけです。それを行う方法はありますか?


私はあなたがこれが動作できると思いmagento.stackexchange.com/questions/95972/...
ラウル・サンチェス

1
商品がカートに追加された後、または顧客がチェックアウトに進んだときにページを表示したいですか?
マリウス

あなたの質問は混乱しています、あなたの質問を明確にしてください。カートに追加された製品のアップセル製品(アップセル製品ページ)にリダイレクトする必要がありますか?
ForgeOnline 2016年


ラウル・サンチェス-ありがとうございましたが、これは私の問題ではありません(私のクロスセル製品が製品詳細ページに表示されています)が、チェックアウトプロセスでクロスセル製品だけの追加ページを作成しています。 20を超えるクロスセル製品があり、それらが製品ページに適合せず、顧客にそれらが表示されない...
Allysin

回答:


8

カートの後に追加ページを作成するのに役立つ拡張機能の下にインストールします

https://github.com/tmhub/suggestpage

上記の拡張機能により、カートの後に追加のページが追加され、そのページにこれらのコードが追加され、クロスセル製品データが取得されます

以下のようにindexController indexActionを変更します

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

また、4つの製品の問題については、app/design/frontend/YourPackge/YourTheme/checkout/cart/crosssell.phtml4つの製品の後でループが中断する条件をファイルで確認し、変更してください。

クロスセル製品の制限を増やすには、この簡単な手順に従ってください

1)app/code/core/Mage/Checkout/Block/Cart/Crosssell.phpファイルをコピーapp/code/local/Mage/Checkout/Block/Cart/Crosssell.php

2)この行を見つけて、必要に応じて制限を増やします protected $_maxItemCount = 4;


1
行くapp/code/community/TM/SuggestPage/controllers/IndexController.phpとrenderLayout前indexActionにこのコードを追加
Murtuza Zabuawala


1
@Allysinで新しいindexControllerファイルを投稿してください
Murtuza Zabuawala


1
@Allysinインデックスcontroller.phpをクロスシールコードに置き換える
Murtuza Zabuawala 2016年

3

無料のサンプルを追加する前に、ページをクリックしてチェックアウトする前にクリックするクライアントWebサイトに何かを実装しました。これらは、カテゴリーからプルされますが、クロスセルでプルするのと同じくらい簡単です。 /関連製品。

本質的にコード賢明なことは、モジュールはイベントをリッスンし、controller_action_predispatch_checkout_onepage_index必要な製品を含むそのモジュールによって構築されたページにユーザーをリダイレクトする必要があります。その後、セッションフラグを設定して、このユーザーがすでに見たことを伝えます。このアップセルページを使用して、チェックアウトを許可します。

現在これを実行しているモジュールがそこにあるかどうかはわかりません。

簡単な例として、これを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>

15/11/16を編集 これが私がこれまでに持っているものです、まだいくつかの修正が必要です:

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

}

上記は、チェックアウトに移動した後にユーザーを別のページにリダイレクトするのに十分です。このオブザーバー内のフラグをセッションに設定し、そのフラグが存在するかどうかを確認する必要があります。存在する場合はリダイレクトを行います。

次に、コントローラを作成できます。これは「チェックアウト前」のページで、テンプレートのブロックを使用してレイアウトを作成/レンダリングします。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();
    }

}

フロントエンドブロックに必要な関数を格納するブロッククラスがあります。これは完全にはテストしていません。バックエンドで作成する必要があるカテゴリ(この場合はカテゴリ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 />';
}

私はまだこのコードを完全にテストしていませんが、カートに追加ボタンなどを使用して実際に製品を正しく表示するためのいくつかの作業が必要です。こちらのgithubリポジトリに配置しました:https : //github.com/DanCarlyon/MagentoCrossSellPage

ダウンロードしてお試しください。


あなたが持っているものは私が必要としているものとまったく同じように聞こえます!すべてのクロスセル製品を1つのカテゴリーに入れて、それを表示してもかまいません。これを実装する方法について詳しく教えてもらえる方法はありますか?私は実際にチェックアウトプロセスで追加のステップを取得することができました(Murtuza Zabuawalaの「SuggestPage」拡張機能を/ここの投稿のすぐ上にインストールしました)。管理で実際にその製品に関連付けられています。どんな助けでも本当にいただければ幸いです!;-)
Allysin 2016年

私は今日、より完全なソリューションで私の答えを更新してみます。サジェストページ拡張については何も知りませんし、現在それをテストするためのテスト環境もありません。:)
DanCarlyon 2016年

私はこれに本当に興味があります。カテゴリからクロスセル製品を追加すると、私が達成しようとしていることを本当に実行できると思います
Allysin

こんにちは@Allysinは本当に遅れて申し訳ありません。私は自分が書いたコードの一部を使用して回答を更新しましたが、まだ完全ではありません。しかし、私が書いたものをダウンロードしてそれを試すことができるgithubリポジトリがあります。
DanCarlyon 2016年

0

このモジュールを試してください:

ファイル:app \ etc \ modules \ Rkt_CrossSell.xml

真のコミュニティファイル:app \ code \ community \ Rkt \ CrossSell \ etc \ config.xml

1.0.0 Rkt_CrossSell_Helper Rkt_CrossSell_Block rkt_crossell.xmlファイル: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;
}

}ファイル:app \ code \ community \ Rkt \ CrossSell \ Helper \ Data.php

}ファイル:app \ design \ frontend \ base \ default \ layout \ rkt_crossell.xml

今あなたのview.phtmlでこのコードを適切な位置に追加してください

getChildHtml( 'crosssell')?>キャッシュをクリアします。ファイル名とファイルパスが正しいことを再確認してください。その後、あなたは行ってもいいです

製品ページにブロックを追加するか、cmsページ内のphtmlファイルを呼び出すことができます。


助けてくれてありがとう。質問させてください-灰色のボックスのコードを5つのファイルに挿入し、getChildHtmlをview.phtmlに追加することは正しく理解できますか?チェックアウトプロセスで追加のページを作成し、その上にクロスセル製品を表示しますか?私は、顧客が見逃すことのできないような方法で少なくとも12のクロスセル製品を表示するソリューションを
受け入れ

一度にすべてのクロスセル商品を表示したい場合は、カートに追加して、Magentoのイベントとオブザーバーを使用してポップアップで表示できます。「checkout_cart_product_add_after」を使用できるように、すべてのクロスセル製品をポップアップまたは推奨デザインとして表示する必要があります。
Asheem Patro

ajax add to cart to a cross sell products
Asheem Patro

ご提案ありがとうございます。ポップアップは素晴らしいように聞こえますが、ここでの問題は、私がそれを実装するのに十分にこれらに精通していないことです。FTPを使用してファイルをアップロードし、既存のファイルに変更を加えることができますが、ステップバイステップの説明がありません-それを設定する方法を理解できません... :-(
Allysin

そのためには、まずajaxをmagentoのカートに追加する必要があります。次に、オブザーバーを使用して、関連するクロスセルまたはアップセルの商品をウィンドウに表示できます。また、クロスセル商品のカートにajaxを追加する必要もあります。これを実現するには、多くの努力が必要になります:-)
Asheem Patro

0

カテゴリレンダリングについては、以下のコードを試してください

   $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);

エラーも発生しました(元の投稿の一番上にそのエラーを投稿しました)。
Allysin

1
@Allysin確認する必要がありますこのエラーが発生する理由は
わかり

@Allysinチェックの更新された回答
Murtuza Zabuawala 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.