Magento产品按类别划分

时间:2008-11-07 17:20:54

标签: php magento categories product catalog

有谁知道我如何从Magento的视图文件中获取属于特定类别的产品列表?

8 个答案:

答案 0 :(得分:21)

您可以使用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);

答案 1 :(得分:8)

这一切都取决于你所处的观点。; - )

首先,我希望你留在你的模板集中(我的例子中默认)。

将此用作示例

<?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,则需要记住 - 这一切都取决于您所处的位置。 其中表示模板文件,基本上也是布局(就app / design / frontend / default / default / layout /*而言)。

我知道这并不多,但我希望能帮助你入门。

答案 2 :(得分:7)

以下是从任何特定类别获取产品的代码。您也可以在视图文件中使用它。

// 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 />";
}

答案 3 :(得分:5)

<?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 } ?>

答案 4 :(得分:3)

我几乎需要同样的东西。我是这样做的:

$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);

希望这有帮助。

答案 5 :(得分:3)

<?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';

        }              

    ?>

答案 6 :(得分:0)

你应该总是避免将这样的代码放到视图中,这是非常糟糕的做法。 您也可以在缓存视图时遇到问题,从而导致意外行为。

你应该覆盖你正在使用的块,在那里放置代码。然后,您可以在视图文件中调用任何新方法。

例如,您可以复制Mage_Catalog_Block_Product_List

from:app / code / core / Catalog / Block / Product / List.php

to:app / code / local / Catalog / Block / Product / List.php

然后你可以添加一个新方法,可能使用上面帖子中提到的一些代码。 然后,您的新方法将在您的视图文件(list.phtml或使用此块的任何视图)中可用

答案 7 :(得分:0)

以下是将所有产品及其类别导出到csv

的代码
--pages-as-heap=yes