2013-11-11 2 views
0

Im пытается зацикливать несколько категорий, поэтому пользовательский вставить как (2,43,11) в теге заголовка, он должен показать, что категории в настоящее время он захватывает только один идентификатор. Есть идеи? благодаря!Magento - Loop множественная категория ID

код цикла:

<?php $currentID = Mage::getSingleton('cms/page')->getContentHeading(); ?> 
<?php if($currentID): ?> 
<?php 

$categoryid = $currentID; 

$category = new Mage_Catalog_Model_Category(); 
$category->load($categoryid); 
$collection = $category->getProductCollection(); 
$collection->addAttributeToSelect('*'); 

foreach ($collection as $_product) { ?> 

<li> 

</li> 

<?php } ?> 
<?php endif;?> 

ответ

2

Скорее всего вы забыли разделить категорию идентификаторов в первой строке. Попробуйте это:

<?php $currentID = explode(',', Mage::getSingleton('cms/page')->getContentHeading()); ?> 
<?php foreach($currentID as categoryid): ?> 
<?php 

$category = new Mage_Catalog_Model_Category(); 
$category->load($categoryid); 
$collection = $category->getProductCollection(); 
$collection->addAttributeToSelect('*'); 

foreach ($collection as $_product) { ?> 

<li> 

</li> 

<?php } ?> 
<?php endforeach;?> 

Но, в любом случае это действительно плохой стиль кодирования, вам нужно переместить такой код для отдельного блока и использовать некоторый кэш, чтобы предотвратить бесполезную перегрузку. Я не рекомендую использовать его на производстве.

Некоторые рекомендации,

  • Заменить новый с Mage :: getModel
  • Если вы используете коллекцию категории (несколько категорий) это сделать смысл использовать Mage :: getModel ('Каталог/category ') -> getCollection() и фильтровать его с помощью фильтра' in '(см. пример ниже)
  • Попытайтесь избежать использования addAttributeToSelect (' * '), это довольно дорогостоящая операция (по смыслу использования ресурсов)

Это немного лучше

<?php 
    $ids = explode(',', Mage::getSingleton('cms/page')->getContentHeading()); 
    $categories = Mage::getModel('catalog/category')->getCollection() 
     ->addAttributeToFilter('entity_id', array('in' => $ids)); 

    foreach($categories as $category) { 
     $collection = $category->getProductCollection(); 
     $collection->addAttributeToSelect('needed_attribute_code'); 
     foreach ($collection as $_product) { 
?> 
     <li> 

     </li> 

<?php } } ?> 

Но все выглядит некрасиво, потому что это в шаблоне. Такой код должен быть в блочном классе.

+0

спасибо! вы дали мне идею: я закончил использовать эту строку: $ productIds = array (explode (',', $ currentID); $ attributes = Mage :: getSingleton ('catalog/config') -> getProductAttributes(); $ коллекция = Mage :: getModel ('каталог/продукт') -> getCollection() -> addAttributeToFilter ('ENTITY_ID', массив ('в' => $ productIds)) -> addAttributeToSelect ($ атрибуты); –

+0

Приятно знать, что это полезно для вас. Удачи – Sergey