【问题标题】:Magento products by categoriesMagento 产品按类别
【发布时间】:2008-11-07 17:20:54
【问题描述】:

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

【问题讨论】:

  • 你的意思是“megento”还是“magneto”?两者都用于您的问题和标签
  • 固定磁电机 -> magento

标签: php magento categories product catalog


【解决方案1】:

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

【讨论】:

  • 你也可以使用$currentCategory = Mage::registry('current_category');
【解决方案2】:

这完全取决于你在哪个视图中。;-)

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

将此作为示例

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

我正在使用上面的代码在我的模板中显示姐妹类别 - 这并不理想,但它有效。

这有点像 hack,因为我还没有时间学习所有的布局 XML 疯狂。否则,如果您使用 XML,则需要牢记——这完全取决于您所处的位置。 在哪里表示模板文件,本质上也是布局(在 app/design/frontend/default/default/layout/* 方面)。

我知道这并不多,但我希望它可以帮助您入门。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:
      <?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 } ?>
      

      【讨论】:

        【解决方案5】:

        我非常需要同样的东西。这是我的做法:

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

        希望这会有所帮助。

        【讨论】:

          【解决方案6】:
          <?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';
          
                  }              
          
              ?>
          

          【讨论】:

            【解决方案7】:

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

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

            例如,您可以复制 Mage_Catalog_Block_Product_List

            来自:app/code/core/Catalog/Block/Product/List.php

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

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

            【讨论】:

              【解决方案8】:

              这是一个将所有产品及其类别导出到 csv 的代码

              <?php 
              set_time_limit(0);
              ini_set("memory_limit",-1);
              ini_set('max_execution_time','1800000000');
              
              require_once '../app/Mage.php';
              Mage::app(); 
              
              $category = Mage::getModel('catalog/category');
              $tree = $category->getTreeModel();
              $tree->load();
              
              $ids = $tree->getCollection()->getAllIds();
              $fp = fopen('category-product-export.csv', 'w');
              $field = array('Product SKU','Category Name'); 
              fputcsv($fp, $field);
              
              $_productCollection = Mage::getModel('catalog/product')
                                      ->getCollection()
                                      ->addAttributeToSelect('*')
                                      ->addFieldToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
                                      ->load();
              
              foreach ($_productCollection as $_product){
                 $cats = $_product->getCategoryIds();
                 $cnt = 0;
                 $catName = '';
                  foreach($cats as $id) {
                      $category->load($id);
                      $root = 'Root Catalog';
                          $isRoot = strtolower($root);
                          $categoryName = strtolower($category->getName());
                          if($categoryName == $isRoot){
                              continue;
                          }
                      $categories[$id]['name'] = $category->getName();
                      $categories[$id]['path'] = $category->getPath();
              
                      $path = explode('/', $categories[$id]['path']);
                      $len = count($path);
                      $string = '';
                      if($id > 2){
                          foreach ($path as $k=>$pathId)
                          {
                              $separator = '';
                              if($pathId > 2){
                                  $category->load($pathId);
                                  if($k != $len-1){ $separator = ' || ';}
                                  $string.= $category->getName() . $separator;
                              }
              
                          }
                          if($cnt > 0) {
                              $catName.= ','.$string;
                          } else {
                              $catName = $string;
                          }
              
                          $cnt++;
                      }
                  }
                  //echo $catName;
                  $field = array($_product->getSku(),$catName); 
                  fputcsv($fp, $field);   
              
              } 
              
              ?>
              <a href="category-product-export.csv">Download</a>
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-06-25
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多