2008-11-07 41 views
14

Có ai biết cách tôi có thể nhận danh sách các sản phẩm thuộc một danh mục cụ thể từ trong một tệp xem trong Magento không?Sản phẩm Magento theo loại

+0

Ý anh là "megento" hoặc "magneto"? cả hai đều được sử dụng trong câu hỏi và thẻ của bạn –

+0

Cố định magneto -> magento –

Trả lời

8

Tất cả phụ thuộc vào chế độ xem bạn đang ở. ;-)

Trước hết, tôi hy vọng bạn ở lại trong mẫu của bạn thiết lập (mặc định trong ví dụ của tôi).

Sử dụng điều này như một dụ:

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

Tôi đang sử dụng đoạn mã trên để hiển thị loại chị trong mẫu của tôi - nó không phải là lý tưởng, nhưng nó hoạt động.

Đó là loại hack vì tôi chưa có thời gian để tìm hiểu tất cả bố cục XML điên rồ. Nếu không, nếu bạn sử dụng các XML bạn cần lưu ý - tất cả đều phụ thuộc vào nơi bạn đang ở. Trường hợp có nghĩa là tệp mẫu và về cơ bản cũng là bố cục (về mặt ứng dụng/thiết kế/lối vào/mặc định/mặc định/bố cục/*).

Tôi biết điều đó không nhiều, nhưng tôi hy vọng nó sẽ giúp bạn bắt đầu.

7

Đây là mã để nhận sản phẩm từ bất kỳ danh mục cụ thể nào. Bạn cũng có thể sử dụng tệp này trong tệp xem.

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

Bạn có thể sử dụng đối tượng magento để lọc.

Ví dụ:

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

Bạn cũng có thể sử dụng '' '$ currentCategory = Mage :: registry ('current_category');' '' – iamjonesy

0

Bạn nên luôn luôn tránh đặt mã như thế này vào một cái nhìn, đó là thói quen rất xấu. Bạn cũng có thể gặp sự cố khi chế độ xem có thể được lưu vào bộ nhớ cache, dẫn đến hành vi không mong muốn.

bạn nên ghi đè lên khối bạn đang sử dụng, đặt mã ở đó. sau đó bạn có thể gọi bất kỳ phương thức mới nào bên trong tệp xem của mình.

ví dụ, bạn có thể sao chép Mage_Catalog_Block_Product_List

từ: ứng dụng/code/core/Catalogue/Khối/sản phẩm/List.php

tới: ứng dụng/code/local/Catalogue/Khối/sản phẩm/List.php

bạn có thể thêm phương thức mới, có thể sử dụng một số mã được đề cập trong các bài đăng ở trên. phương pháp mới của bạn sau đó sẽ có sẵn bên trong tệp xem của bạn (list.phtml hoặc bất kỳ chế độ xem nào sử dụng khối này)

3

Tôi khá cần thiết. Sau đây là cách tôi đã thực hiện:

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

Hy vọng điều này sẽ hữu ích.

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

     }    

    ?> 
+0

thnx để sửa đổi mufaddal .. – Chiragit007

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 } ?> 
Các vấn đề liên quan