Magento по категориям

Кто-нибудь знает, как я могу получить список продуктов, относящихся к определенной категории, из файла вида в Magento ?

Solutions Collecting From Web of "Magento по категориям"

Вы можете использовать объект magento для фильтрации.

Пример:

$categoryId = 123; // a category id that you can get from admin $category = Mage::getModel('catalog/category')->load($categoryId); $products = Mage::getModel('catalog/product') ->getCollection() ->addCategoryFilter($category) ->load(); print_r($products); 

Все зависит от того, с каким видом вы находитесь. 😉

Во-первых, я надеюсь, что вы остались в своем шаблоне (по умолчанию в моем примере).

Используйте это в качестве примера :

 <?php $_cat = $this->getCurrentCategory(); $_parent = $_cat->getParentCategory(); $_categories = $_parent->getChildren(); /* @var $category Mage_Catalog_Model_Category */ $collection = Mage::getModel('catalog/category')->getCollection(); /* @var $collection Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */ $collection->addAttributeToSelect('url_key') ->addAttributeToSelect('name') ->addAttributeToSelect('is_anchor') ->addAttributeToFilter('is_active', 1) ->addIdFilter($_categories) ->setOrder('position', 'ASC') ->joinUrlRewrite() ->load(); $productCollection = Mage::getResourceModel('catalog/product_collection'); $layer = Mage::getSingleton('catalog/layer'); $layer->prepareProductCollection($productCollection); $productCollection->addCountToCategories($collection); // $productCollection should be ready here ;-) ?> 

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

Это своего рода взлом, потому что у меня еще не было времени узнать все безумие XML. В противном случае, если вы используете XML, вам нужно иметь в виду – все зависит от того, где вы находитесь. Где означает файл шаблона и, по существу, также макет (с точки зрения приложения / дизайна / интерфейса / по умолчанию / по умолчанию / макета / *).

Я знаю, что это не так много, но я надеюсь, что это поможет вам начать.

Вот код для получения продуктов из какой-либо конкретной категории. Вы также можете использовать это в файле вида.

 // if you want to display products from current category $category = Mage::registry('current_category'); // if you want to display products from any specific category $categoryId = 10; $category = Mage::getModel('catalog/category')->load($categoryId); $productCollection = Mage::getResourceModel('catalog/product_collection') ->addCategoryFilter($category); // printing products name foreach ($productCollection as $product) { echo $product->getName(); echo "<br />"; } 
 <?php $c_id = 2; $category = new Mage_Catalog_Model_Category(); $category->load($c_id); $collection = $category->getProductCollection(); $collection->addAttributeToSelect('*'); foreach ($collection as $_product) { ?> <a href="<?php echo $_product->getProductUrl(); ?>"><?php echo $_product->getName(); ?></a> <?php } ?> 

Мне в значительной степени нужно то же самое. Вот как я это сделал:

 $prod_whole = array(); if(!empty($_menu)) //$_menu = array of Categories with some basic info foreach($_menu as $v) { if($v['name']=='HOME') continue; $cat_id = $v['id']; #/ Setup Products $category = Mage::getModel('catalog/category')->load($cat_id); $collection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('*') // select all attributes ->addCategoryFilter($category) ->setPageSize(8) // limit number of results returned ->setCurPage(0) ->load() ; $prod_collection = array(); foreach ($collection as $product) { $prod_collection_1 = array(); #/ Basic Info $prod_collection_1['id'] = $product->getId(); $prod_collection_1['name'] = $product->getName(); $prod_collection_1['price'] = (float) $product->getPrice(); //$prod_collection_1['desc'] = $product->getDescription(); //$prod_collection_1['short'] = $product->getShortDescription(); $prod_collection_1['type'] = $product->getTypeId(); $prod_collection_1['status'] = $product->getStatus(); $prod_collection_1['special_price'] = $product->getSpecialPrice(); $prod_collection_1['direct_url'] = $product->getProductUrl(); #/ getCategoryIds(); returns an array of category IDs associated with the product foreach ($product->getCategoryIds() as $category_id) { $category = Mage::getModel('catalog/category')->load($category_id); $prod_collection_1['parent_category'] = $category->getParentCategory()->getName(); $prod_collection_1['category'] = $category->getName(); //$prod_collection_1['category_idx'] = preg_replace('/[\s\'\"]/i', '_', strtolower(trim($prod_collection_1['category']))); $prod_collection_1['category_id'] = $category->getId(); } #/gets the image url of the product $prod_collection_1['img'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage(); $prod_collection[] = $prod_collection_1; }//end foreach..... $prod_whole[$cat_id] = $prod_collection; }//end foreach categories....... //var_dump('<pre>', $prod_whole); 

Надеюсь это поможет.

 <?php $category_id = 10; // if you know static category then enter number $catagory_model = Mage::getModel('catalog/category')->load($category_id); //where $category_id is the id of the category $collection = Mage::getResourceModel('catalog/product_collection'); $collection->addCategoryFilter($catagory_model); //category filter $collection->addAttributeToFilter('status',1); //only enabled product $collection->addAttributeToSelect(array('name','url','small_image')); //add product attribute to be fetched //$collection->getSelect()->order('rand()'); //uncomment to get products in random order $collection->addStoreFilter(); if(!empty($collection)) { foreach ($collection as $_product): echo $_product->getName(); //get product name endforeach; }else { echo 'No products exists'; } ?> 

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

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

например, вы можете скопировать Mage_Catalog_Block_Product_List

от: app / code / core / Каталог / Блок / Продукт / List.php

to: app / code / local / Каталог / Блок / Продукт / List.php

вы могли бы добавить новый метод, возможно, используя некоторый код, упомянутый в вышеупомянутых сообщениях. ваш новый метод будет доступен в вашем файле вида (list.phtml или любом представлении с использованием этого блока)