Как я могу сделать продукты Magento в каталоге по дате их добавления? Это не вариант в админе, поэтому догадываться, что это нужно сделать в коде где-то.
Спасибо.
Как я могу сделать продукты Magento в каталоге по дате их добавления? Это не вариант в админе, поэтому догадываться, что это нужно сделать в коде где-то.
Спасибо.
Довольно легко добавить параметр сортировки по дате, если вы в порядке (не должны) с изменением файлов ядра. Просто измените файл 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;
}
Это не так просто, если вы не вносите изменения в файлы ядра. В этом случае вы должны создать эту группу файлов:
приложения/и т.д./модули/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>
Приложение/код/локальные/Stackoverflow/Каталог/и т.д. /config.xml
<?xml version="1.0"?>
<config>
<global>
<models>
<catalog>
<rewrite>
<config>Stackoverflow_Catalog_Model_Config</config>
</rewrite>
</catalog>
</models>
</global>
</config>
Приложение/код/локальные/Stackoverflow/Каталог/Модель/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;
}
}
СОВЕТ: Идите по чистому пути, он будет платить в долгосрочной перспективе.
Я решил это, скопировав 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'
.
Поместите этот код в свой файл 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>
Подобно этому
$_newest_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', $visibility)
->setOrder('created_at', 'desc')
$_newest_productCollection->load();
Yust для обновления (работает с Mage 1.7.0.2): в установочном файле собственного модуля:
$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 как сортировку по умолчанию в конфигурации системы или на дисплее catagory Параметры
Я не уверен, что есть простой способ сделать это, не врываясь в основной код. Однако я не пробовал это, но кажется, что он должен работать:
Создайте новый атрибут Date. Вы увидите, что в нижней части параметров атрибута есть опция "Используется для сортировки в списке продуктов". Выберите "Да" для этого. Затем добавьте его в свою группу атрибутов. Затем, когда вы добавляете продукт, просто выберите текущую дату, и вы сможете использовать его для сортировки. Чтобы установить значение по умолчанию, перейдите в раздел "Система → Конфигурация → Каталог → " Внешний вид ", и вы увидите свой атрибут в опции" Сортировка списка товаров ".
Надеюсь, что это сработает для вас.
Вы можете попробовать ниже
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");
Я сделал это, переписав класс:
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;
}
Я разработал бесплатное расширение, которое делает трюк, и его довольно легко установить и использовать. Попадите в бесплатные ребята, чтобы скачать его.
https://magento.mdnsolutions.com/extensions/mdn-sort-by-date.html
Приветствия,