2009-03-03 143 views
10

我想創建Magento的一個頁面,顯示該類別的可視化表示..例如如何從Magento獲取類別列表?

CATEGORY 
product 1 
product 2 

ANOTHER CATEGORY 
product 3 

我的問題是,他們的數據庫是非常不同的,以我過去見過的組織。他們有專門的數據類型表,如varchar,int等。我認爲這是用於性能或類似的。

我還沒有找到一種方法來使用MySQL來查詢數據庫並獲取類別列表。然後,我想將這些類別與產品進行匹配,以獲取每個類別的產品列表。不幸的是,Magento似乎使這非常困難。

此外,我還沒有找到一種方法,將在一個頁塊內工作..我創建了showcase.phtml並將其放入XML佈局,它顯示並運行其PHP代碼。我希望能夠像$this->getAllCategories()一樣循環,然後在內部嵌入循環,像$category->getChildProducts()

任何人都可以幫助我嗎?

回答

5

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

} 
16

中的代碼對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的系統提供的對象中。

例如,我不知道如何獲得類別列表。然而,我通過法師代碼庫greffped

grep -i -r -E 'class.+?category' 

哪個返回了大約30個類的列表。滾動瀏覽這些內容時,猜測哪些對象可能有方法或需要進行方法調用來獲取類別相對容易。

+0

我不知道你怎麼能實際使用所產生的集合或數組來獲取名稱或類別的網址。我需要的數據存儲在結果的「_data:protected」鍵中。你能詳細說明一下嗎? – 2009-06-30 10:14:16

0

非常感謝。真的有幫助。拿到遊戲,做一個循環,然後的getName()

foreach ($collection as $cat): 

    echo $cat->getName(); 

endforeach; 
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。

0

我用這個在/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; ?> 
0

我做了我如何創建自定義類上市與Magento的塊這個小視頻。 我相信有更好的方法來實現這一點,甚至可以做得更好,但這只是我的方法。我只是創建了它,希望它能幫助解釋某些人的某些事情。

Magento Custom Category Listing Tutorial

0

類別清單塊:

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

這裏有一個簡單的例子

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