Ссылки на предыдущий и следующий товары

20 март 2013

В одном из новых проектов появилась задача сделать ссылки на предыдущий с следующий товары в категории. Конечно, в сети гуляет несколько подобных решений, но все они не учитывают того факта что на магазине могут быть включены flat_tables. Такое пренебрежение ведет к ошибкам, возникающим из-за применения недопустимых механизмов доступа к части информации о категориях и продуктах.

Готовый код, позволяющий получать url`ы к ближайшим товарам, учитывающий flat_tables:

Инициализация:


app/etc/modules/Mygento_Prevnext.xml


    <config>
        <modules>
            <Mygento_Prevnext>
                <active>true</active>
                <codePool>local</codePool>
            </Mygento_Prevnext>
        </modules>
    </config>


app/etc/modules/Mygento_Prevnext.xml

Теперь Magento знает о нашем новом модуле. Создадим сам модуль, который будет расположен в директории


app/code/local/Mygento/Prevnext
Структура папок модуля:
magento/app/code/local/
	Mygento/
		Prevnext/
			 Block/
			 etc/
			 Helper/
			 Model/
			 sql/

Файл конфига модуля:


app/code/local/Mygento/Prevnext/etc/config.xml



<?xml version="1.0"?>
<config>
    <modules>
        <Mygento_Customer>
            <version>1.0</version>
        </Mygento_Customer>
    </modules>
    <global>       
        <helpers>
            <prevnext>
                <class>Mygento_Prevnext_Helper</class>
            </prevnext>
        </helpers>
    </global>
</config>

Файл хелпера:


app/code/local/Mage/Prevnext/Helper/Data.php



<?php

class Mygento_Prevnext_Helper_Data extends Mage_Core_Helper_Abstract {

public function getPrevNext() {
    $_category = Mage::getSingleton('catalog/layer')-&gt;getCurrentCategory();
    $_currentCategoryId = $_category-&gt;getId();
    $_prodId = Mage::registry('current_product')-&gt;getId();
    $_category-&gt;load($_currentCategoryId);
    $_collection = $_category-&gt;getProductCollection()
            -&gt;addAttributeToFilter('status', 1)
            -&gt;addAttributeToFilter('visibility', 4);
    $new = array();
    //Foreach for category
    foreach ($_collection as $_collectionItem) {
        array_push($new, $_collectionItem-&gt;getId());
    }
    //Foreach for direct product url
    if ($new == NULL) {
        foreach (Mage::getModel('catalog/product')-&gt;getCollection() as $_collectionItem) {
            array_push($new, $_collectionItem-&gt;getId());
        }
    }
    $new = array_flip($new);
    $keys = array_flip(array_keys($new));
    $values = array_keys($new);
    //Prev product id
    if (($keys[$_prodId] - 1) &lt; 0) {
        $x = count($new) - 1;
    } else {
        $x = $keys[$_prodId] - 1;
    }
    //Next product id
    if (($keys[$_prodId] + 1) &gt; count($new) - 1) {
        $y = 0;
    } else {
        $y = $keys[$_prodId] + 1;
    }
    unset($new);
    // Get products Url
    $_Prevurl = Mage::getModel('catalog/product')-&gt;load($values[$x])-&gt;getProductUrl();
    $_Nexturl = Mage::getModel('catalog/product')-&gt;load($values[$y])-&gt;getProductUrl();
    $data = array($_Prevurl, $_Nexturl);
    return $data;
}

}

Всё, модуль готов, теперь во view.phtml обратимся к нему:



<?php $urls = Mage::helper('prevnext')->getPrevNext(); ?>
<a class="prev-product" href="<?php echo $urls[0]; ?>"></a>
<a class="next-product" href="<?php echo $urls[1]; ?>"></a> 


Желающие могут скачать готовый модуль

А тут наши модули для Magento

Choose languageRU

© 2009—2025 Mygento. Все права защищены. Политика конфиденциальности

Menu Menu Menu

Аккредитованная
ИТ-компания