magento,帮助理解默认产品模板代码

时间:2011-09-23 11:47:58

标签: magento

我是magento的新手,但我想在最短的时间内学习它。我正在经历:http://alanstorm.com/layouts_blocks_and_templates说:

文件:app / design / frontend / base / default / template / catalog / product / list.phtml包含:

<?php $_productCollection=$this->getLoadedProductCollection() ?>    <?php if(!$_productCollection->count()): ?> <div class="note-msg">
    <?php echo $this->__("There are no products matching the selection.") ?>    </div>
<?php else: ?>  

getLoadedProductCollection方法可以在Template的Block,Mage_Catalog_Block_Product_List中找到......并从那里:

文件:app / code / core / Mage / Catalog / Block / Product / List.php

...
public function getLoadedProductCollection()
{
    return $this->_getProductCollection();
}   
...

之后,前面提到的页面写道:块的_getProductCollection然后实例化模型并读取它们的数据,并将结果返回给模板。

我在这里不知所措。 _getProductCollection()有这一行:

 if (is_null($this->_productCollection))

1)_productCollection是否意味着受保护的变量$ _productCollection?

 if (is_null($this->_productCollection)) {
            $layer = $this->getLayer();

2)$ layer = $ this-&gt; getLayer()PLZ的解释是什么?

之后我得到:

 if ($this->getShowRootCategory()) {
                $this->setCategoryId(Mage::app()->getStore()->getRootCategoryId());
            }

3)getShowRootCategory()方法在哪里?

4)什么方法可以帮助我理解这条线的优点和缺点:

$this->setCategoryId(Mage::app()->getStore()->getRootCategoryId());

5)对许多人来说,我的问题听起来很容易。但你可以参考任何在线资源来学习所有这些东西和其他人作为magento的初学者吗?

祝你好运

2 个答案:

答案 0 :(得分:1)

这个if (is_null($this->_productCollection))是OOP代码常用的缓存技术,因为方法在对象上下文中缓存它们的变量,如果对同一个对象或在同一个对象中多次调用这些方法,那么它会传递缓存的变量从数据库再次询问它。

您可以通过浏览代码库或从源代码中找到您感兴趣的方法来回答您的其他问题。有时候一个方法是一个神奇的方法(set,get),你不会在那个

后面找到一个方法定义
grep ' getRootCategoryId' app/code/ -rsn
app/code/core/Mage/Core/Model/Store/Group.php:275:    public function getRootCategoryId()
app/code/core/Mage/Core/Model/Store.php:850:    public function getRootCategoryId()

使用的非常基本的grep模式是:

  • 使用[space]methodname(查找方法及其在代码库中的定义位置
  • 使用>methodname(查找在codebase中调用此方法的位置
  • 如果您想知道为什么代码库中没有getSomeVariable()的定义
  • ,请使用>setMethodName(查找设置魔术方法的位置

答案 1 :(得分:0)

1)是的。

2)Mage_Catalog_Block_Product_List::getLayer()返回目录层模型(Mage_Catalog_Model_Layer)。它在下面的代码中使用。

3)这是一种神奇的方法,几乎​​所有的magento类都扩展了Varien_Object类。详细了解article中的Varien_Object

4)抱歉,不明白这个问题是什么。

5)为避免出现此类问题,您应先阅读official development guide,并在了解之后阅读Alan Storm's articles(稍微过时,顺便说一下)。