【发布时间】:2009-01-18 01:31:46
【问题描述】:
【问题讨论】:
标签: php magento e-commerce
【问题讨论】:
标签: php magento e-commerce
您基本上加载了类别,获取产品集合,然后进行适当的过滤。
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4)
->addAttributeToFilter('special_price', array('neq' => ""))
->setOrder('price', 'ASC')
;
【讨论】:
这是从任何特定类别获取产品的代码:-
$productCollection = Mage::getResourceModel('catalog/product_collection')
->addCategoryFilter($category);
【讨论】:
我最终做的是在 app/design/frontend/default/theme_name/template/catalog/product/list_random.phtml
做类似的事情:
<?php
$_categories=$this->getCurrentChildCategories();
$_category = $this->getCurrentCategory();
$subs = $_category->getAllChildren(true);
$result = array();
foreach($subs as $cat_id) {
$category = new Mage_Catalog_Model_Category();
$category->load($cat_id);
$collection = $category->getProductCollection();
foreach ($collection as $product) {
$result[] = $product->getId();
}
}
shuffle($result);
?>
这将为您提供一系列产品 ID。您可以循环使用它们并动态创建产品:
<?php
$i=0;
foreach ($result as $_product_id){
$i++;
$_product = new Mage_Catalog_Model_Product();
$_product->load($_product_id);
//do something with the product here
}?>
然后,在 cms 中创建一个包含以下内容的静态块
{{block type="catalog/navigation" template="catalog/product/list_random.phtml"}}
最后,在目录->管理类别部分,选择类别,然后选择显示设置选项卡。将显示模式切换为“静态块和产品”,然后从下拉列表中选择您的块。
应该这样做。
【讨论】:
Mage_Catalog_Model_Category::getProductCollection() 基本相同,但它也添加了STORE VIEW 过滤器。
$products = Mage::getModel('catalog/category')->load(category_id); //put your category id here
$productslist = $products->getProductCollection()->addAttributeToSelect('*');
foreach($productslist as $product)
{
echo 'price: ' . $product->getPrice() . '<br/>';
}
这是迄今为止获取特定类别产品详细信息的便捷代码。希望对您有所帮助。
【讨论】:
在这种情况下,您应该通过调用 Mage::getModel('catalog/product') 来实例化模型,因为这样您将获得一个配置的对象实例,并由任何配置的模块扩展。
如果你像new Mage_Catalog_Model_Product() 那样做,这将忽略模块并绕过 Magento API。
【讨论】:
此代码将帮助您从 category id 2 中获取 products。而且这里还使用了一个模板文件 list_home.phtml 用于产品列表。
echo $this->getLayout()->createBlock("catalog/product_list")
->setCategoryId(2)->setTemplate("catalog/product/list_home.phtml")->toHtml();
list_home.phtml
<?php
$this->getChild('toolbar')->setCurrentMode('list'); //uses list mode
$_productCollection = $this->getLoadedProductCollection();
$_helper = $this->helper('catalog/output');
?>
<?php if (!$_productCollection->count()): ?>
<p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p>
<?php else: ?>
--use code for listing---
【讨论】: