php - Productos de Magento por categorías
category catalog (7)
Aquí está el código para obtener productos de cualquier categoría en particular. Puede usar esto en el archivo de vista también.
// 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 />";
}
¿Alguien sabe cómo puedo obtener una lista de productos pertenecientes a una categoría específica dentro de un archivo de vista en Magento ?
Todo depende de la vista en la que se encuentre ;-)
En primer lugar, espero que haya permanecido dentro de su conjunto de plantillas (predeterminado en mi ejemplo).
Use esto como un ejemplo :
<?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 ;-)
?>
Estoy usando el código anterior para mostrar categorías hermanas en mi plantilla, no es ideal, pero funciona.
Es una especie de truco porque aún no tuve tiempo de aprender toda la locura de XML de diseño. De lo contrario, si utiliza los XML que debe tener en cuenta, todo depende de dónde se encuentre. Donde significa el archivo de la plantilla y esencialmente también el diseño (en términos de la aplicación / diseño / frontend / default / default / layout / *).
Sé que no es mucho, pero espero que te ayude a empezar.
Puedes usar el objeto magento para filtrar.
Ejemplo:
$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);
Siempre debe evitar poner código como este en una vista, es una muy mala práctica. También puede tener problemas ya que las vistas se pueden almacenar en caché, lo que genera un comportamiento inesperado.
debe anular el bloque que está utilizando, colocando el código allí. a continuación, puede llamar a cualquier método nuevo dentro de sus archivos de visualización.
por ejemplo, podría copiar Mage_Catalog_Block_Product_List
desde: app / code / core / Catalog / Block / Product / List.php
a: app / code / local / Catalog / Block / Product / List.php
a continuación, puede agregar un nuevo método, posiblemente utilizando algunos de los códigos mencionados en las publicaciones anteriores. su nuevo método estaría entonces disponible dentro de su archivo de vista (list.phtml o cualquier vista usando este bloque)
Yo prácticamente necesitaba lo mismo. Así es como lo hice:
$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);
Espero que esto ayude.
<?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'';
}
?>
<?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 } ?>