Kategorilere göre Magento ürünleri

5 Cevap php

Herkes bir görünüm dosyası içinde belirli bir kategoriye ait ürünlerin bir listesini alabilirsiniz biliyor mu Magento?

5 Cevap

Sen filtrelemek için magento nesnesini kullanabilirsiniz.

Örnek:

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

Bu, tüm içeri konum görüntülemek hangi bağlıdır ;-)

Öncelikle, ben (benim örnekte varsayılan), şablon seti içinde kaldı umuyoruz.

Bir olarak kullanmak example:

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

Ben şablona kardeş kategorileri görüntülemek için yukarıdaki kodu kullanıyorum - ideal değil ama çalışıyor.

Ben henüz tüm düzen XML delilik öğrenmek için zaman yoktu çünkü kesmek çeşit bulunuyor. Eğer aklınızda tutmanız gereken XMLs kullanın Aksi takdirde - hepsi size nerede bağlıdır. Where şablon dosyası anlamına gelir ve esasen de (app / tasarım / frontend / default / default / düzeni / * açısından) düzeni.

Ben çok değil biliyorum, ama başlamak için yardımcı olur umarım.

Burada herhangi bir özel kategori ürünleri almak için koddur. Siz de view dosyasında kullanabilirsiniz.

$productCollection = Mage::getResourceModel('catalog/product_collection')
                             ->addCategoryFilter($category);

Umarım bu yardımcı olur. Teşekkürler.

Ben hemen hemen aynı gerekli. İşte ben bunu yaptım nasıl:

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

Umarım bu yardımcı olur.

You should always avoid putting code like this into a view, it's very bad practice. You can also run into issues as views can be cached, leading to unexpected behaviour.

Eğer orada kod yerleştirerek, kullandığınız blok geçersiz kılmalıdır. Eğer view dosyası içinde herhangi bir yeni yöntemleri çağırabilir.

Örneğin, Mage_Catalog_Block_Product_List kopya olabilir

dan: app / kod / çekirdek / Katalog / Blok / Ürün / List.php

için: app / kod / local / Katalog / Blok / Ürün / List.php

you could then add a new method, possibly using some of the code mentioned in the above posts. your new method would then be available inside your view file (list.phtml or any view using this block)