Magentoのビュー ファイル内から特定のカテゴリに属する製品のリストを取得する方法を知っている人はいますか?
8 に答える
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);
それはすべてあなたがどのビューにいるかによります。;-)
まず、テンプレートセット(私の例ではデフォルト)内にとどまっていることを願っています。
例としてこれを使用してください:
<?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 ;-)
?>
上記のコードを使用して、テンプレートに姉妹カテゴリを表示しています。これは理想的ではありませんが、機能します。
レイアウトXMLの狂気をすべて学ぶ時間がまだなかったので、これは一種のハックです。それ以外の場合、XMLを使用する場合は、覚えておく必要があります。すべては、現在の場所によって異なります。ここで、はテンプレートファイルを意味し、基本的にはレイアウトも意味します(app / design / frontend / default / default / layout / *の観点から)。
それほど多くはないことは承知していますが、それがあなたの始めに役立つことを願っています。
これは、特定のカテゴリから製品を取得するためのコードです。これはビューファイルでも使用できます。
// 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 />";
}
<?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 } ?>
私はほとんど同じことが必要でした。これが私がやった方法です:
$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);
お役に立てれば。
このようなコードをビューに配置することは常に避ける必要があります。これは非常に悪い習慣です。ビューをキャッシュして予期しない動作を引き起こす可能性があるため、問題が発生する可能性もあります。
使用しているブロックをオーバーライドして、そこにコードを配置する必要があります。その後、ビューファイル内の新しいメソッドを呼び出すことができます。
たとえば、Mage_Catalog_Block_Product_Listをコピーできます
差出人:app / code / core / Catalog / Block / Product / List.php
宛先:app / code / local / Catalog / Block / Product / List.php
次に、上記の投稿に記載されているコードの一部を使用して、新しいメソッドを追加できます。これで、新しいメソッドがビューファイル(list.phtmlまたはこのブロックを使用する任意のビュー)内で使用できるようになります。
すべての製品をそのカテゴリとともに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>