gpt4 book ai didi

magento - 在不破坏寻呼机的情况下获取第一个集合项

转载 作者:行者123 更新时间:2023-12-02 14:41:08 25 4
gpt4 key购买 nike

我之前发布了一个关于此问题的问题,但我现在有了更多信息,我认为最好发布一个新问题而不是修改(抱歉,如果这不是正确的协议(protocol))。你可以找到我原来的问题here .

无论如何,最初的问题是我想在设置集合后检查 List.php 类中集合中的第一个项目,以便我可以抓取类别并使用它来显示评论。这一切都是基于自定义模块,因此存在很多变量。此后,我在默认的 Magento 示例商店中尝试了它,并且只在 app/code/core/Mage/catalog/Block/Product/List.php 添加了 ONE 行来打破寻呼机。以下是详细信息。如果您有任何想法为什么会发生这种情况,请告诉我,因为我陷入困境

首先,打开app/code/core/Mage/catalog/Block/Product/List.php并找到_getProductCollection函数。在 if (is_null...) block 的末尾,添加 $_foo123 = $this->_productCollection->getFirstItem(); 这样你就有了一个看起来像的函数像这样:

protected function _getProductCollection()
{
if (is_null($this->_productCollection)) {
$layer = $this->getLayer();
/* @var $layer Mage_Catalog_Model_Layer */
if ($this->getShowRootCategory()) {
$this->setCategoryId(Mage::app()->getStore()->getRootCategoryId());
}

// if this is a product view page
if (Mage::registry('product')) {
// get collection of categories this product is associated with
$categories = Mage::registry('product')->getCategoryCollection()
->setPage(1, 1)
->load();
// if the product is associated with any category
if ($categories->count()) {
// show products from this category
$this->setCategoryId(current($categories->getIterator()));
}
}

$origCategory = null;
if ($this->getCategoryId()) {
$category = Mage::getModel('catalog/category')->load($this->getCategoryId());
if ($category->getId()) {
$origCategory = $layer->getCurrentCategory();
$layer->setCurrentCategory($category);
}
}
$this->_productCollection = $layer->getProductCollection();

$this->prepareSortableFieldsByCategory($layer->getCurrentCategory());

if ($origCategory) {
$layer->setCurrentCategory($origCategory);
}

//THIS LINE BREAKS THE PAGER
$_foo123 = $this->_productCollection->getFirstItem();
}

return $this->_productCollection;
}

现在,只需转到使用该类的任何产品列表(例如类别 View ),您就会明白我的意思。无论您在工具栏中的每页显示 XX 下选择什么,它都会始终显示列表中的所有项目。如果您注释掉 $_foo123... 行,它就可以正常工作。

什么给了??

P.S.我知道我不应该编辑核心文件...这只是一个例子:)

最佳答案

原因是当您在集合上调用 getFirstItem()(或任何其他检索方法)时,该集合会被加载。任何后续操作都会忽略数据库并仅使用加载的数据,过滤器不起作用,因为它们仅是 SQL,分页和选定列也是如此。解决方法是使用基于第一个集合的第二个集合。

$secondCollection = clone $firstCollection;
$secondCollection->clear();
$_foo123 = $secondCollection->getFirstItem();

clear()方法卸载该集合的数据,强制其下次再次访问数据库。

关于magento - 在不破坏寻呼机的情况下获取第一个集合项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com