【问题标题】:How to get a category listing from Magento?如何从 Magento 获取类别列表?
【发布时间】:2009-03-03 01:09:33
【问题描述】:

我想在 Magento 中创建一个页面,显示类别的可视化表示。示例

CATEGORY
 product 1
 product 2

ANOTHER CATEGORY
 product 3

我的问题是,他们的数据库的组织方式与我过去看到的非常不同。他们有专门用于 varchar、int 等数据类型的表。我认为这是为了性能或类似的。

我还没有找到使用 MySQL 查询数据库并获取类别列表的方法。然后我想将这些类别与产品相匹配,以获得每个类别的产品列表。不幸的是,Magento 似乎让这变得非常困难。

我还没有找到可以在页面块中工作的方法。我创建了showcase.phtml 并将其放入XML 布局中,它会显示并运行其PHP 代码。我希望有一些简单的东西,比如循环通过$this->getAllCategories(),然后在内部使用类似$category->getChildProducts()的嵌套循环。

谁能帮助我?

【问题讨论】:

    标签: php magento categories product catalog


    【解决方案1】:

    来自 SEO 相关类 (Mage_Catalog_Block_Seo_Sitemap_Category) 中的代码

    $helper     = Mage::helper('catalog/category');
    $collection = $helper->getStoreCategories('name', true, false);
    $array      = $helper->getStoreCategories('name', false, false);
    

    尽量忘记它是为您的商店提供动力的数据库,而是专注于使用 Magento 系统提供的对象。

    例如,我不知道如何获取类别列表。但是,我用

    浏览了 Mage 代码库
    grep -i -r -E 'class.+?category'
    

    它返回了大约 30 个类的列表。滚动浏览这些,相对容易猜测哪些对象可能具有方法或需要进行方法调用来获取类别。

    【讨论】:

    • 我不确定如何实际使用生成的集合或数组来获取类别的名称或 url。我需要的数据存储在结果的“_data:protected”键中。你能详细说明一下吗?
    • 我的问题是,如果这对管理模块文件有帮助,加载类别列表?
    【解决方案2】:

    something like this 可能会对你有所帮助,我已经稍微修改了它以更具体地回答你的问题。

     $h3h3=Mage::getModel('catalog/category')->load(5);  // YOU NEED TO CHANGE 5 TO THE ID OF YOUR CATEGORY
    
    
    $h3h3=$h3h3->getProductCollection();
    
    
    foreach($h3h3->getAllIds() as $lol)
    {
        $_product=Mage::getModel('catalog/product')->load($lol);
    
        print $_product->getName()."<br/>";
    
    }
    

    【讨论】:

      【解决方案3】:

      我改编自 Paul Whipp's website:

      SELECT e.entity_id AS 'entity_id', vn.value AS 'name'   
      FROM catalog_category_entity e  
      LEFT JOIN catalog_category_entity_varchar vn  
      ON e.entity_id = vn.entity_id AND vn.attribute_id = 33 
      ORDER BY entity_id;
      

      这将为您提供目录类别 ID。

      【讨论】:

        【解决方案4】:

        这是一个简单的例子

        $categories = Mage::getModel('catalog/category')->getCollection()  
            ->addAttributeToSelect('name')
            ->addAttributeToSelect('url_key')
            ->addAttributeToSelect('my_attribute')
            ->setLoadProductCount(true)
            ->addAttributeToFilter('is_active',array('eq'=>true))
            ->load();
        

        【讨论】:

          【解决方案5】:

          非常感谢。真的有帮助。要获取游戏,请循环然后 getName()

          foreach ($collection as $cat):
          
              echo $cat->getName();
          
          endforeach;
          

          【讨论】:

            【解决方案6】:

            我在 /app/design/frontend/default/default/template/catalog/product/feature.xml 中使用了这个

            <?php
            /**
             * Home page Featured Product list template
             *
             * @see Mage_Catalog_Block_Product_List
             */
            ?>
            <?php 
            if (!is_null($this->_productCollection)) {
                $_origCollection = $this->_productCollection;
                $this->setCollection(null);
            }
            $this->setCategoryId(16);
            $_productCollection=$this->getLoadedProductCollection() ?>
            <?php if($_productCollection->count()): ?>
            <div class="featured-products">
                <h2><?php echo $this->__('Featured Products') ?></h2>
                <?php foreach ($_productCollection as $_product): ?>
                    <div>
                        <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>">
                            <img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(150, 50); ?>" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" />
                            <h3 class="product-name"><?php echo $this->htmlEscape($_product->getName())?></h3>
                            <?php echo nl2br($this->htmlEscape($_product->getShortDescription())) ?>
                        </a>
                    </div>
                <?php endforeach; ?>
            </div>
            <?php endif; ?>
            

            【讨论】:

              【解决方案7】:

              类别列表块:

              <?php
              $categories = Mage::getModel('catalog/category')->load(2)->getChildren();
              $catIds = explode(',',$cats);
              ?>
              <ul>
              <?php foreach($catIds as $catId): ?>
                  <li>
                      <?php
                          $category = Mage::getModel('catalog/category')->load($catId);
                          echo $category->getName();
              
                          $subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();
                          $subCatIds = explode(',',$subCats);
                      ?>
                          <?php if(count($subCatIds) > 1):?>
                              <ul>
                              <?php foreach($subCatIds as $subCat) :?>
                                  <li>
                                  <?php
                                      $subCategory = Mage::getModel('catalog/category')->load($subCat);
                                      echo $subCategory->getName();
                                  ?>
                                  </li>
                              <?php endforeach;?>
                              </ul>
                          <?php endif; ?>
                  </li>
              <?php endforeach; ?>
              </ul>
              

              【讨论】:

                【解决方案8】:

                我制作了这个关于如何使用 Magento 创建自定义类别列表块的小视频。 我确信有更好的方法可以实现这一点,甚至可以做得更好,但这只是我的方法。我创建它只是希望它有助于向那里的某些人解释一些事情。

                Magento Custom Category Listing Tutorial

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2015-04-29
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-04-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-08-20
                  相关资源
                  最近更新 更多