Cách thêm trang tùy chỉnh với các sản phẩm bán chéo


7

Bạn sẽ không tin rằng tôi đã dành bao nhiêu thời gian để nghiên cứu / cố gắng để thực hiện điều này. Tất cả những gì tôi muốn là có thêm một trang trong quy trình đặt hàng sau khi trang sản phẩm hỏi khách hàng họ muốn bán sản phẩm nào mà họ muốn thêm vào đơn đặt hàng (tôi sẽ gọi họ là bán nhưng tôi đoán Magento biệt ngữ là "bán chéo"). Tôi thực sự thấy không thể tin được rằng nhiều doanh nghiệp không muốn điều này (tôi nghĩ rằng "bán tăng giá" có thể làm tăng đáng kể lợi nhuận và những gì được tích hợp trong Magento không thực sự hoạt động tốt (tôi có hơn 20 sản phẩm "Bán chéo" và họ thậm chí không phù hợp / hiển thị trên đó).

Tôi đang sử dụng Magento ver. 1.9.1.0.

Tôi vừa cài đặt Chủ đề Porto # 11 nếu điều đó tạo ra sự khác biệt

THÔNG TIN MỚI: Tôi đã cố gắng thực hiện điều này nhưng không có may mắn cho đến nay. Tôi thậm chí có ai đó giúp tôi bây giờ nhưng chúng tôi không thể tìm ra. Ai đó có thể xin vui lòng hướng dẫn từng bước về cách làm điều này? (BẤT K Solution giải pháp nào sẽ được đánh giá cao) .

Tôi muốn nó hoạt động tương tự như những gì proflowers.com có ​​(xem ảnh chụp màn hình kèm theo): nhập mô tả hình ảnh ở đây

Họ có trang này xuất hiện khi bước tiếp theo SAU khách hàng thêm một sản phẩm vào giỏ hàng (nhấp vào CHẾ BIẾN ĐỂ KIỂM TRA)

Tất cả các sản phẩm bán chéo đều LUÔN LÀ CÙNG cho mọi người (mọi sản phẩm được đặt hàng)


Chỉnh sửa vào ngày 15 tháng 11 năm 2016:

Các giải pháp đã được trao 100 danh tiếng thực sự hoạt động. Bất cứ ai đang cố gắng làm những gì tôi đang cố gắng nên tải xuống các tệp và tải chúng vào thư mục gốc của bạn và sau đó thêm mã sau vào app/code/community/TM/SuggestPage/controllers/IndexControlle‌​‌​r.phptệp của bạn :

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

Tôi vẫn đang cố gắng tìm ra cách hiển thị 12 sản phẩm trên trang Bán chéo đặc biệt thay vì chỉ 4. Truy cập vào @MurtuzaZabuawala - điều này nên được thực hiện bằng cách sửa đổi tệp crosssell.phtml trong:

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

Tôi tìm thấy crossell.phtml của tôi ở đây :

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

(Tôi hy vọng đó là một cái đúng - Tôi đã cài đặt Chủ đề Porto)

Đây là những gì nó trông giống như:

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

EDITED ngày 2 tháng 12 năm 2016:

Đây là một giải pháp tuyệt vời hoạt động hoàn hảo đặc biệt nếu bạn muốn chỉ định các sản phẩm bán chéo khác nhau cho từng sản phẩm. Trong trường hợp của tôi - Tôi muốn tất cả các sản phẩm của mình đều có các sản phẩm bán chéo CHÍNH XÁC và tôi muốn có thể thay đổi tùy theo mùa nên tôi quyết định có thêm bước kiểm tra (giải pháp do Murtuza cung cấp Zabuawala bên dưới) hiển thị các sản phẩm từ một danh mục đặc biệt tôi tạo ra chỉ vì lý do này. Murtuza Zabuawala đã làm rất tốt với. Tôi chỉ thiếu bước cuối cùng ở đây:

Khi tôi nhập mã sẽ hiển thị các sản phẩm từ một danh mục cụ thể:

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

Tôi nhận được thông báo lỗi sau:

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

của tôi

ứng dụng / mã / cộng đồng / TM / Đề xuất / bộ điều khiển / IndexControlle‌ r.php

trông như thế này:

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

Khi tôi đã thử đoạn mã sau thay thế (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);

**

  • nó đã cho tôi lỗi này :
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your

Phiên bản máy chủ MySQL cho cú pháp đúng để sử dụng gần ')' ở dòng 1, truy vấn là: CHỌN mg_catalog_category_entity. * TỪ mg_catalog_category_entityWHERE (entity_id =)

Trace:
#0 /home/mystore/public_html/lib/Varien/Db/Statement/Pdo/Mysql.php(110):

Zend_Db_Statement_Pdo -> _ exec (Array) # 1 /home/mystore/public_html/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql -> _ exec (Array) /Zend/Db/Ad CHƯƠNG / Abauge.php (480): Zend_Db_Statement-> thực thi (Mảng) # 3 /home/mystore/public_html/lib/Zend/Db/Ad Module / Pdo / Abauge.php (238): Zend_Db truy vấn ('CHỌN 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/Ad Module / Abauge.php (756): Varien_Db_Ad CHƯƠNG_Pdo_Mysql-> truy vấn (Object (Varien_Db_Select), Array) /public_html/app/code/core/Mage/Eav/Model/Entity/ Abauge.php (943): Zend_Db_Ad CHƯƠNG_Abauge-> fetchRow (Object (Varien_Db_Select)) # 7 / home / mystore / public_html /Catalog/Model/Resource/ Ab khu vực Model / Abstract.php (225): Mage_Catalog_Model_Resource_Abauge-> load (Object (Mage_Catalog_Model_Carget), Object (Mage_Catalog_Model_Carget), NULL) # 9 / home / mystore / public_html / app / .php (80):Mage_Core_Model_Ab khu vực /mystore/public_html/app/code/core/Mage/Core/Block/ Abauge.php (918): Mage_Catalog_Block_ Productt_List -> _ beforeToHtml () # 12 / home / mystore / public_html / app / code / core / /Text / List.php (43): Mage_Core_Block_Abauge-> toHtml () # 13 /home/mystore/public_html/app/code/core/Mage/Core/Block/ Ab khu.php (919): Mage_Core_Block_Text # 14 /home/mystore/public_html/app/code/core/Mage/Core/Block/Abauge.php(637): Mage_Core_Block_Abauge-> toHtml () # 15 / home / mystore / public_html / app / code / core /Core/Block/ Ab khu.php (581): Mage_Core_Block_Ab khu-_getChildHtml ('nội dung', đúng) # 16 /home/mystore/public_html/app/design/frontend/smartwave/porto/template/page/1column.phtml(49): Mage_Core_Block_Abauge-> getChild home / mystore / public_html / app / code / core / Mage / Core / Block / Template.php (241): bao gồm ('/ 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 / Chặn / Mẫu.php (286): Mage_Core_Block_Template-> renderView () # 20 /home/mystore/public_html/app/code/core/Mage/Core/Block/ Abauge.php (919): Mage_Core_Block_Template -> 21 /home/mystore/public_html/app/code/core/Mage/Core/Model/Layout.php(555): Mage_Core_Block_Abauge->toHtml () # 22 /home/mystore/public_html/app/code/core/Mage/Core/Contoder/Varien/Action.php(390): Mage_Core_Model_Layout-> getOutput () # 23 / home / myst / code / cộng đồng / TM / suggestPage / controls / IndexContoder.php (33): Mage_Core_Controll_Varien_Action-> renderLayout () # 24 /home/mystore/public_html/app/code/core/Mage/Core/Controll/Vien/ 418): TM_SuggestPage_IndexControll-> indexAction () # 25 /home/mystore/public_html/app/code/core/Mage/Core/Contoder/Varien/Router/St Chuẩn.php (250): Mage_Core_Controll_Var # 26 /home/mystore/public_html/app/code/core/Mage/Core/Contoder/Varien/Front.php(172): Mage_Core_Controll_Varien_Router_St Chuẩn->khớp (Đối tượng (Mage_Core_Controll_Request_Http)) # 27 /home/mystore/public_html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controll_Varien_Front-> 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

Bộ điều khiển của tôi có giả sử như thế này không?

<?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 ('nội dung') -> chắp thêm ($ block);

    $this->renderLayout();
    }
}

EDITED ngày 29 tháng 12 năm 2016:

Giải pháp được đăng bởi Murtuza Zabuawala là tuyệt vời! Điều duy nhất tôi vẫn cần làm là đưa một số mã vào để gọi lên (hiển thị) các sản phẩm từ một danh mục cụ thể thay vì các mặt hàng bán chéo thực tế. Có ý tưởng nào để làm việc này không?


Tôi nghĩ rằng điều này có thể làm việc cho bạn magento.stackexchange.com/questions/95972/NH
Raul Sanchez

1
Bạn muốn trang được hiển thị sau khi sản phẩm được thêm vào giỏ hàng hoặc khi khách hàng tiến hành thanh toán?
Marius

Câu hỏi của bạn khó hiểu, Hãy làm rõ câu hỏi của bạn. Bạn có cần khách hàng của bạn chuyển hướng đến các sản phẩm bán chạy (trang sản phẩm bán chạy) của sản phẩm đã được thêm vào giỏ hàng không?
ForgeOnline


Raul Sanchez - Cảm ơn bạn nhưng đây không phải là vấn đề của tôi (sản phẩm bán chéo của tôi đang hiển thị trong trang chi tiết sản phẩm) nhưng những gì tôi đang tạo ra là một trang bổ sung trong quy trình Thanh toán chỉ với các sản phẩm bán chéo vì tôi có hơn 20 sản phẩm bán chéo và chúng sẽ không bao giờ phù hợp trên trang sản phẩm và khách hàng sẽ không thấy chúng ở đó ...
Allysin

Câu trả lời:


8

Cài đặt bên dưới tiện ích mở rộng sẽ giúp bạn tạo thêm trang sau giỏ hàng

https://github.com/tmhub/suggestpage

ở trên phần mở rộng thêm trang bổ sung sau giỏ hàng và trang đó bạn sẽ thêm các mã này và bạn sẽ nhận được dữ liệu sản phẩm bán chéo

thay đổi indexControll indexAction của bạn như dưới đây

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

và đối với 4 vấn đề về sản phẩm của bạn, vui lòng kiểm tra trong app/design/frontend/YourPackge/YourTheme/checkout/cart/crosssell.phtmltệp của bạn bất kỳ điều kiện nào phá vỡ vòng lặp sau bốn sản phẩm sau đó thay đổi nó.

để tăng giới hạn cho sản phẩm bán chéo theo bước nhanh này

1) sao chép app/code/core/Mage/Checkout/Block/Cart/Crosssell.phptập tin vàoapp/code/local/Mage/Checkout/Block/Cart/Crosssell.php

2) tìm dòng này và tăng giới hạn theo nhu cầu của bạn protected $_maxItemCount = 4;


1
đi đến app/code/community/TM/SuggestPage/controllers/IndexController.phpvà thêm mã này vào indexAction trước khi renderLayout
Murtuza Zabuawala


1
@Allysin bạn có thể vui lòng đăng toàn bộ tệp IndexContoder mới của bạn
Murtuza Zabuawala


1
@Allysin index control.php chỉ cần thay thế bằng mã
crossseell

3

Chúng tôi đã triển khai một cái gì đó trên trang web của khách hàng nơi bạn nhấp vào để tiến hành kiểm tra bạn hạ cánh trên một trang trước khi nó yêu cầu bạn thêm các mẫu miễn phí, những mẫu này được lấy từ một danh mục nhưng sẽ dễ dàng kéo theo một số bán chéo /những sản phẩm liên quan.

Về cơ bản mã khôn ngoan những gì sẽ xảy ra là, một mô-đun sẽ phải lắng nghe sự kiện controller_action_predispatch_checkout_onepage_indexvà chuyển hướng người dùng đến một trang được xây dựng bởi mô-đun đó với các sản phẩm bạn yêu cầu, sau đó đặt cờ phiên để nói rằng người dùng này đã thấy trang bán chạy này và cho phép họ thông qua thanh toán.

Tôi không chắc chắn nếu có bất kỳ mô-đun ngoài đó hiện đang làm điều này.

Để làm ví dụ ngắn gọn, chúng tôi có cái này là xml của chúng tôi:

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

Chỉnh sửa 15/11/16 Đây là những gì tôi có cho đến nay, vẫn cần một số sửa đổi:

ứng dụng / etc / mô-đun /

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

ứng dụng / mã / cộng đồng / 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>

ứng dụng / mã / cộng đồng / 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'); 
        }
    }

}

Ở trên là đủ để chuyển hướng người dùng đến một trang khác sau khi nhấn đi kiểm tra. Sẽ cần đặt cờ trong trình quan sát này vào phiên và sau đó kiểm tra xem cờ đó có tồn tại không, nếu có, hãy thực hiện chuyển hướng.

Sau đó, chúng ta có thể tạo một bộ điều khiển, đây sẽ là trang "trước khi bạn kiểm tra", nó tạo / kết xuất bố cục bằng cách sử dụng một khối từ mẫu. ứng dụng / mã / cộng đồng / Dc / Crosssells / bộ điều khiển / IndexContoder.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();
    }

}

Chúng tôi có một lớp khối để chứa các chức năng cần thiết của khối frontend, tôi chưa kiểm tra đầy đủ điều này, nó được cho là trả về một bộ sưu tập sản phẩm được lọc theo danh mục bạn nên tạo trong phần phụ trợ, trong trường hợp của tôi là loại 292. ứng dụng / mã / cộng đồng / 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;
    }
}

ứng dụng / thiết kế / frontend / cơ sở / mặc định / 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>

ứng dụng / thiết kế / frontend / cơ sở / mặc định / mẫu / dc / crosssell.phtml

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

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

Tôi chưa kiểm tra đầy đủ mã này đúng cách và vẫn cần một số công việc để thực sự hiển thị các sản phẩm đúng cách với các nút thêm vào giỏ hàng, v.v. Tôi đã đặt nó trong một repo github ở đây: https://github.com/DanCarlyon/MagentoCrossSellPage

Hãy tải về và chơi với nó.


những gì bạn có âm thanh chính xác như những gì tôi cần! Tôi không ngại đưa tất cả các sản phẩm bán chéo vào một danh mục và hiển thị nó. Có cách nào bạn có thể cho tôi biết thêm chi tiết về cách tôi có thể thực hiện điều này không? Tôi đã quản lý để thực sự có thêm một bước trong quy trình thanh toán (Tôi đã cài đặt tiện ích mở rộng "Đề xuất" từ Murtuza Zabuawala / ngay phía trên bài đăng của bạn tại đây /) nhưng nó chỉ hiển thị 4 mặt hàng bán chéo từ bán chéo thực sự liên kết với sản phẩm đó trong Admin. Bất kỳ trợ giúp sẽ được thực sự đánh giá cao! ;-)
Allysin

Tôi sẽ thử và cập nhật câu trả lời của mình hôm nay với một giải pháp đầy đủ hơn, tôi thực sự không biết gì về tiện ích mở rộng đề xuất và hiện không có môi trường thử nghiệm để kiểm tra. :)
DanCarlyon

Tôi thực sự quan tâm đến điều này - Tôi nghĩ rằng việc thêm các sản phẩm bán chéo từ một danh mục sẽ thực sự làm những gì tôi đang cố gắng thực hiện
Allysin

Xin chào @Allysin thực sự xin lỗi vì sự chậm trễ, tôi đã cập nhật câu trả lời của mình với một số mã tôi đã có thể viết, mặc dù nó vẫn chưa hoàn chỉnh. Nhưng có một repo github nơi bạn có thể tải xuống những gì tôi đã viết và chơi với nó.
DanCarlyon

0

Hãy thử mô-đun này:

Tệp: app \ etc \ module \ Rkt_CrossSell.xml

cộng đồng thật Tập tin: app \ code \ Community \ Rkt \ CrossSell \ etc \ config.xml

1.0.0 Rkt_CrossSell_Helper Rkt_CrossSell_Block rkt_crossell.xml Tệp: 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;
}

} Tệp: ứng dụng \ code \ cộng đồng \ Rkt \ CrossSell \ Helper \ Data.php

} Tệp: app \ design \ frontend \ base \ default \ layout \ rkt_crossell.xml

Bây giờ trong view.phtml của bạn thêm mã này vào vị trí thích hợp

getChildHtml ('crosssell')?> Bây giờ hãy xóa bộ nhớ cache của bạn. Kiểm tra hai lần tên tệp evey và đường dẫn tệp là chính xác. Sau đó, bạn tốt để đi

Bạn có thể thêm một khối trên trang sản phẩm hoặc người khác gọi tệp phtml bên trong trang cms.


Cảm ơn vì sự giúp đỡ. Hãy để tôi hỏi bạn điều này - Tôi có hiểu chính xác rằng tôi sẽ chèn mã vào hộp màu xám vào 5 tệp bạn đề cập và sau đó thêm getChildHtml vào view.phtml không? Điều đó có tạo thêm một trang trong quy trình thanh toán và hiển thị các sản phẩm bán chéo trên đó không? Tôi sẵn sàng cho bất kỳ giải pháp nào sẽ hiển thị ít nhất 12 sản phẩm bán chéo theo cách mà khách hàng sẽ không thể bỏ lỡ chúng ... Cảm ơn bạn
Allysin

Nếu bạn muốn hiển thị tất cả các sản phẩm bán chéo tại thời điểm thêm vào giỏ hàng, bạn có thể hiển thị trong cửa sổ bật lên bằng cách sử dụng các sự kiện và quan sát viên trong Magento. Giống như bạn có thể sử dụng "checkout_cart_product_add_after" và ở đó bạn phải hiển thị tất cả các sản phẩm bán chéo trong một cửa sổ bật lên hoặc như thiết kế được đề xuất của bạn.
Asheem Patro

Bạn cũng có thể thực hiện ajax thêm vào giỏ hàng cho các sản phẩm bán chéo
Asheem Patro

cảm ơn bạn rất nhiều vì những gợi ý của bạn Một cửa sổ bật lên nghe có vẻ tuyệt vời nhưng vấn đề ở đây sẽ là tôi không đủ thành thạo trong những điều này để thực hiện nó. Tôi có thể sử dụng FTP để tải lên các tệp và thay đổi các tệp hiện có nhưng không có hướng dẫn từng bước - Tôi sẽ không thể tìm ra cách thiết lập
tệp

Để làm như vậy fisrt, bạn phải tạo ajax thêm vào giỏ hàng trong magento của bạn. Sau đó, bằng cách sử dụng trình quan sát, bạn có thể hiển thị các sản phẩm bán chéo hoặc bán sản phẩm chéo có liên quan trong một cửa sổ và bạn cũng phải tạo một ajax thêm vào giỏ hàng cho các sản phẩm bán chéo. Để thực hiện điều này, bạn sẽ cần rất nhiều nỗ lực :-)
Asheem Patro

0

Thử mã dưới đây để hiển thị danh mục

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

Tôi đã làm và cũng có một Lỗi (Tôi đã đăng Lỗi đó lên đầu trong bài viết gốc của mình).
Allysin

1
@Allysin chúng ta cần xem Tôi không thể nói tại sao lỗi này lại đến
Murtuza Zabuawala

@Allysin kiểm tra câu trả lời được cập nhật
Murtuza Zabuawala
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.