Подтвердить что ты не робот

Magento - Сортировка по дате добавления

Как я могу сделать продукты Magento в каталоге по дате их добавления? Это не вариант в админе, поэтому догадываться, что это нужно сделать в коде где-то.

Спасибо.

4b9b3361

Ответ 1

Довольно легко добавить параметр сортировки по дате, если вы в порядке (не должны) с изменением файлов ядра. Просто измените файл 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;
    }
}

СОВЕТ: Идите по чистому пути, он будет платить в долгосрочной перспективе.

Ответ 2

Я решил это, скопировав 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

Поместите этот код в свой файл 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>

Ответ 4

Подобно этому

$_newest_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', $visibility)
->setOrder('created_at', 'desc')
$_newest_productCollection->load();

Ответ 5

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 Параметры

Ответ 6

Я не уверен, что есть простой способ сделать это, не врываясь в основной код. Однако я не пробовал это, но кажется, что он должен работать:

Создайте новый атрибут Date. Вы увидите, что в нижней части параметров атрибута есть опция "Используется для сортировки в списке продуктов". Выберите "Да" для этого. Затем добавьте его в свою группу атрибутов. Затем, когда вы добавляете продукт, просто выберите текущую дату, и вы сможете использовать его для сортировки. Чтобы установить значение по умолчанию, перейдите в раздел "Система → Конфигурация → Каталог → " Внешний вид ", и вы увидите свой атрибут в опции" Сортировка списка товаров ".

Надеюсь, что это сработает для вас.

Ответ 7

Вы можете попробовать ниже

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

Ответ 8

Я сделал это, переписав класс:

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

Ответ 9

Я разработал бесплатное расширение, которое делает трюк, и его довольно легко установить и использовать. Попадите в бесплатные ребята, чтобы скачать его.

https://magento.mdnsolutions.com/extensions/mdn-sort-by-date.html

Приветствия,