如何在产品目录中添加Magento产品?这不是管理员的选项,因此猜测它需要在代码中完成。
感谢。
答案 0 :(得分:42)
如果您可以(不应该)修改核心文件,则可以很容易地添加按日期排序选项。只需修改 app / code / core / Mage / Catalog / Model / Config.php 文件,如下例所示:
public function getAttributeUsedForSortByArray()
{
$options = array(
'position' => Mage::helper('catalog')->__('Position'),
// HERE IS OUR NEW OPTION
'created_at' => Mage::helper('catalog')->__('Date')
);
foreach ($this->getAttributesUsedForSortBy() as $attribute) {
/* @var $attribute Mage_Eav_Model_Entity_Attribute_Abstract */
$options[$attribute->getAttributeCode()] = $attribute->getStoreLabel();
}
return $options;
}
如果您不修改核心文件,那就不那么容易了。在这种情况下,您必须创建这一堆文件:
应用的/ etc /模块/ Stackoverflow_Catalog.xml 强>
<?xml version="1.0"?>
<config>
<modules>
<Stackoverflow_Catalog>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Catalog />
</depends>
</Stackoverflow_Catalog>
</modules>
</config>
应用/代码/本地/#1 /目录的/ etc / config.xml中强>
<?xml version="1.0"?>
<config>
<global>
<models>
<catalog>
<rewrite>
<config>Stackoverflow_Catalog_Model_Config</config>
</rewrite>
</catalog>
</models>
</global>
</config>
应用/代码/本地/#1 /目录/型号/ CONFIG.PHP 强>
<?php
class Stackoverflow_Catalog_Model_Config extends Mage_Catalog_Model_Config {
public function getAttributeUsedForSortByArray() {
$options = parent::getAttributeUsedForSortByArray();
if (!isset($options['created_at'])) {
$options['created_at'] = Mage::helper('catalog')->__('Date');
}
return $options;
}
}
提示:采取干净的方式,从长远来看会付出代价。
答案 1 :(得分:13)
将此代码放入local.xml,无需覆盖任何Magento核心文件。
如果您将来覆盖任何Magento核心文件,将会出现升级问题
<layout>
<catalog_category_default>
<reference name="product_list">
<action method="setAvailableOrders" json="value">
<value><![CDATA[
{"created_at" : "Latest","price":"Price"}
]]>
</value>
</action>
</reference>
<reference name="product_list_toolbar">
<action method="setDefaultDirection">
<dir>desc</dir>
</action>
</reference>
</catalog_category_default>
</layout>
答案 2 :(得分:12)
我通过将app / code / core / Mage / Catalog / Block / Product / List.php复制到app / code / local并在其_getProductCollection()
方法的末尾添加一些排序代码来解决这个问题:
// sort by created_at date or entity_id
if(!isset($_GET['order'])) {
$this->_productCollection->getSelect()->reset( Zend_Db_Select::ORDER );
$this->_productCollection->getSelect()->order('e.entity_id desc');
}
return $this->_productCollection;
您可以使用'e.entity_id desc'
或'e.created_at desc'
进行排序。
答案 3 :(得分:11)
喜欢这个
$_newest_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', $visibility)
->setOrder('created_at', 'desc')
$_newest_productCollection->load();
答案 4 :(得分:2)
Yust for update(适用于Mage 1.7.0.2): 在自己模块的setupscript中:
$installer = $this;
$installer->startSetup();
$productEntityTypeId = Mage::getModel('catalog/product')->getResource()->getEntityType()->getId();
//lets change created_at properties
//////////////////////////////////////////////////
$installer->updateAttribute($productEntityTypeId, 'created_at', array(
'visible_on_front' => true,
'used_in_product_listing' => true
'used_for_sort_by' => 1,
'frontend_label' => 'Created at'
));
$installer->endSetup();
// mark index as "reindex required"
$indexerCodes = array(
'catalog_product_flat'
);
$indexer = Mage::getModel('index/process');
foreach ($indexerCodes as $code) {
$indexer->load($code, 'indexer_code')
->changeStatus(Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX);
}
并在catalog.xml布局句柄中:
<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
...
<action method="setDefaultDirection"><dir>desc</dir></action>
</block>
在此之后,您可以在系统配置或类别显示中选择created_at作为默认排序 设置
答案 5 :(得分:1)
我不确定是否有一种简单的方法可以做到这一点,而无需深入研究核心代码。但是,我没有试过这个,但它似乎应该有效:
创建一个新的Date属性。您将看到属性选项底部有一个名为“用于在产品列表中排序”的选项。选择是。然后将其添加到属性组。然后,当您添加产品时,只需选择当前日期,您就可以使用它进行排序。要设置默认值,请进入系统&gt;&gt;配置&gt;&gt;目录&gt;&gt;前端,您将在“产品列表排序依据”选项中看到您的属性。
希望能帮到你。
答案 6 :(得分:0)
您可以尝试以下
app/code/core/mage/catalog/model/resource/eav/mysql4/product/collection.php
在“public function addAttributeToSort($attribute, $dir='asc')
”
之后
$this->getSelect()->order("cat_index_position {$dir}");
添加此
$this->getSelect()->order("e.entity_id desc");
答案 7 :(得分:0)
我是通过改写课程来完成的:
Mage_Catalog_Model_Category_Attribute_Source_Sortby
和功能:
public function getAllOptions()
{
if (is_null($this->_options)) {
$this->_options = array(array(
'label' => Mage::helper('catalog')->__('Best Value'),
'value' => 'position'
));
$this->_options = array(array(
'label' => Mage::helper('catalog')->__('Created At'),
'value' => 'created_at'
));
foreach ($this->_getCatalogConfig()->getAttributesUsedForSortBy() as $attribute) {
$this->_options[] = array(
'label' => Mage::helper('catalog')->__($attribute['frontend_label']),
'value' => $attribute['attribute_code']
);
}
}
return $this->_options;
}