Виджет новых продуктов Magento - PullRequest
2 голосов
/ 28 января 2012

Во-первых, я хотел бы сказать, что я совершенно новичок в Magento, поэтому, отвечая, пожалуйста, не принимайте никаких знаний о Magento - однако я был бы очень благодарен любому, кто может указать мне правильное направление.

Проблема, с которой мы сталкиваемся, связана с новым виджетом продукта, который размещен на главной странице - я не установил его, я не настроил Magento, я просто пытаюсь исправить это для друга, который ждал более год, в течение которого ее разработчик создает сайт, указанный как шесть недель, теперь почти работает.

версия Magento - 1.5.1

Проблема в том, что товары в виджете новых продуктов сортируются по news_from_date - теперь я не знаю, откуда magento извлекает это, и, похоже, он не соответствует порядку добавления продуктов, поэтому план сортировки by entity_id desc, мне удалось закодировать это в выпадающий список сортировки, но я изо всех сил пытаюсь достичь этого в виджете новых продуктов.

Я не полностью понимаю структуру файла magentos, и хотя я ожидаю, что этот код будет в папке виджетов, я не могу найти его там, и Google Trawling предложил, что файл, на который я должен смотреть, находится здесь:

Приложение / код / ​​ядро ​​/ Mage / Каталог / блока / продукта / New.php этот файл содержит следующий блок кода, который, я думаю, мне следует посмотреть:

protected function _beforeToHtml()
{
    $todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);

    $collection = Mage::getResourceModel('catalog/product_collection');
    $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

    $collection = $this->_addProductAttributesAndPrices($collection)
        ->addStoreFilter()
        ->addAttributeToFilter('news_from_date', array('or'=> array(
            0 => array('date' => true, 'to' => $todayDate),
            1 => array('is' => new Zend_Db_Expr('null')))
        ), 'left')
        ->addAttributeToFilter('news_to_date', array('or'=> array(
            0 => array('date' => true, 'from' => $todayDate),
            1 => array('is' => new Zend_Db_Expr('null')))
        ), 'left')
        ->addAttributeToFilter(
            array(
                array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
                array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
                )
          )
        ->addAttributeToSort('news_from_date', 'desc')
        ->setPageSize($this->getProductsCount())
        ->setCurPage(1)
    ;

    $this->setProductCollection($collection);

    return parent::_beforeToHtml();
}

Теперь я попытался поиграть с этим и изменить его различными способами, и, кажется, ничего не меняется, так что я думаю, что я не в том месте, поскольку мне даже не удалось сломать виджет.

Последнее, что я попробовал, было это:

protected function _beforeToHtml()
{
    $todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);

    $collection = Mage::getResourceModel('catalog/product_collection');
    $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

    $collection = $this->_addProductAttributesAndPrices($collection)
        ->addStoreFilter()
        ->addAttributeToSort('entity_id', 'desc')
        ->setPageSize($this->getProductsCount())
        ->setCurPage(1)
    ;

    $this->setProductCollection($collection);

    return parent::_beforeToHtml();
}

.... Ничего, без изменений, нада. Любые указатели очень ценятся - я думаю, что я погрузился в глубокий конец здесь, и я тону в сложной громоздкой системе, которую я не понимаю.

Заранее спасибо, ребята

1 Ответ

2 голосов
/ 29 января 2012

Полезно знать, что поле news_from_date называется «Задать продукт как новый с даты» у администратора.Обычно он находится на вкладке «Общие» на странице редактирования продукта (если предыдущий разработчик не изменил его) и поэтому является ранним полем для просмотра при создании продукта.

Причина, по которой это поле вручнуюЭто может быть дано в будущем или намеренно оставлено пустым, чтобы исключить его из любого нового списка продуктов.Существует также поле «Установить продукт как новый для даты», чтобы ограничить его время в списках.

Кэширование сайта гарантирует, что список не будет меняться слишком часто, только один раз в 24 часа, если я вспомню, чтотакже означает, что если вы измените «Установить продукт как новый с даты», он не будет иметь никакого эффекта.Вы можете вызвать проблему, очистив кэш.Изменения в вашем коде не эффективны по той же причине, вы можете обнаружить, что они изменятся завтра.


Если вы собираетесь изменить обычное поведение вместо использования полей даты, как было запланировано, скопируйте измененный New.php до app/code/local/Mage/Catalog/Block/Product/, чтобы оно не перезаписывалось автоматическими обновлениями.На первый взгляд, ваши изменения выглядят корректно, просто отключите кеш при экспериментировании и включите его снова, когда закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...