Magento新产品小部件

时间:2012-01-28 16:24:38

标签: magento

首先,我想说我对Magento来说是全新的,所以在回答时请不要对Magento有任何了解 - 但是对于能指出我正确方向的人来说,我会非常感激。

我们遇到的问题是放在主页上的新产品小部件 - 我没有安装它,我没有设置Magento,我只是试图为一个等待的朋友解决这个问题她的开发人员每年制作一个报价为六周的网站,现在只是工作。

Magento版本为1.5.1

问题是新产品小部件中的产品正在按news_from_date进行排序 - 现在我不知道magento从哪里提取这个产品并且它似乎不对应于产品的添加顺序,因此计划是排序通过entity_id desc,我已经设法将其编码到下拉排序列表中,但我很难在新产品小部件中实现这一点。

我不完全理解magentos文件结构,虽然我希望这个代码在widget文件夹中我找不到它并且拖网google已经建议我应该看的文件在这里:

应用程序/代码/核心/法师/目录/砌块/产品/ 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 个答案:

答案 0 :(得分:2)

知道news_from_date字段在管理员中称为“将产品设置为新日期”应该会有所帮助。它通常位于产品编辑页面的“常规”选项卡上(如果以前的开发人员没有更改过),因此在创建产品时是一个早期的字段。

它是手动字段的原因是它可以被赋予未来日期或故意留空以将其从任何新产品列表中排除。还有一个“将产品设置为新的日期”字段,以限制它在列表上的时间。

网站的缓存确保列表不会经常更改,如果我记得,每24小时只会更改一次,这也意味着如果您更改“将产品设置为新日期”,它似乎没有任何更改影响。您可以通过刷新缓存来强制解决问题。由于同样的原因,您的代码更改无效,您可能会发现它明天会发生变化。


如果您要更改正常行为而不是按设计使用日期字段,请将修改后的New.php复制到app/code/local/Mage/Catalog/Block/Product/,以免被自动更新覆盖。您的编辑乍一看似乎有效,只需在试验时关闭缓存,并在完成后重新打开。