Как мне получить случайные Перекрестные продажи продуктов?


Это фрагмент кода, который генерирует перекрестные продукты:

<?php $_helper = $this->helper('catalog/output'); ?>
<?php 
    $_product = $this->getProduct(); 
   // echo get_class($this); 
?>

<?php if($_crossSellProducts = $_product->getCrossSellProducts()): ?>

    <div class="crosssell">
        <h2><?php echo $this->__('Suntem mandri sa va prezentam clientii TRENDfurniture:') ?></h2>

        <ul id="crosssell-products-list">
        <?php foreach ($_crossSellProducts as $_item): ?>

            <?php  
            $_item = Mage::getModel('catalog/product')->load($_item->getId()); 
            ?>
            <li class="item">
                <a class="product-image" href="<?php echo $_item->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_item->getName()) ?>">
                    <img src="<?php echo $this->helper('catalog/image')->init($_item, 'thumbnail'); ?>" alt="<?php echo $this->htmlEscape($_item->getName()) ?>" />
                </a>
            </li>

        <?php endforeach; ?>
        </ul>

        <script type="text/javascript">decorateList('crosssell-products-list', 'none-recursive')</script>
    </div>
<?php endif;?>

Я пытался использовать:

 $_item ->getSelect()->order(new Zend_Db_Expr('RAND()'));                  
 $_item ->setPage(1, 4);

Но безрезультатно.Это результат работы функции get_class: mage_catalog_block_product_view

Author: Teja Bhagavan Kollepara, 2014-08-13

3 answers

Создайте функцию на view.php

    public function getCrosspro(){
        $product = $this->getProduct();
        /* @var $product Mage_Catalog_Model_Product */

        $itemCollection = $product->getCrossSellProductCollection()
            ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
            ->setPositionOrder()
            ->addStoreFilter();

        Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($itemCollection);
            $itemCollection->getSelect()->order(new Zend_Db_Expr('RAND()')); 
            $itemCollection->setPage(1, 4);
         $itemCollection->load();

        foreach ($itemCollection as $product) {
            $product->setDoNotUseCategoryId(true);
        };

return $itemCollection
}

И изменить:

<?php if($_crossSellProducts = $_product->getCrossSellProducts()): ?>

До

<?php if($_crossSellProducts = $this->getCrosspro()): ?>
 1
Author: Amit Bera, 2014-08-13 14:00:33

Чтобы реализовать пользовательскую логику для продуктов перекрестной продажи, вы можете переопределить метод getCrossSellProducts или вызвать метод из своего собственного класса, где все волшебство.

Если вам нужно просто использовать логику по умолчанию, но сортировать продукты случайным образом каждый раз, когда вам нужно добавить сортировку по ранду до загрузки коллекции, а не после, так как это не имеет эффекта.

Редактировать: Основываясь на вашем коде, примените сортировку и ограничение на $_crossSellProducts перед циклом.

 2
Author: Amasty, 2014-08-13 14:06:16

Коллекцию товаров для перекрестной продажи можно получить, используя этот код:

$_crossSellProductCollection = $_product->getCrossSellProductCollection();

Затем вы бы использовали это для установки случайного порядка и размера страницы:

$_crossSellProductCollection->getSelect()->order(new Zend_Db_Expr('RAND()'));
$_crossSellProductCollection->setPage(1, 4);

Редактировать: Затем вы можете выполнить итерацию по этим продуктам следующим образом:

<?php foreach ($_crossSellProductCollection as $_item): ?>
    ...
<?php endforeach; ?>
 1
Author: Colin O'Dell, 2014-08-13 14:00:43