2011-09-23 76 views
0

我是magento的新手,但我正努力在最短的時間內學習它。我正經歷:http://alanstorm.com/layouts_blocks_and_templates它說:magento,有助於瞭解默認產品模板代碼

文件:應用程序/設計/前端/基/默認/模板/目錄/產品/ 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方法可以發現這個模板的塊,Mage_Catalog_Block_Product_List ...並從那裏:

文件:應用程序/代碼/核心/法師/目錄/座/產品/ 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-> getLayer()的解釋?

之後,我得到:

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

3)在哪裏方法getShowRootCategory()?

4)有什麼辦法可以幫我不懂行的利弊:

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

5)我的問題可能聽起來那麼容易了許多。但是,你可以參考任何在線資源來學習所有這些東西和其他人作爲magento的初學者嗎?

好運

回答

1

if (is_null($this->_productCollection))是一種高速緩存技術,該技術是常見的OOP代碼作爲方法緩存其變量在對象上下文,並且如果方法被稱爲針對同一對象或相同的對象內多次然後傳遞緩存變量,而不是從數據庫中再次提出。

您可以通過查看代碼庫或從源代碼中找到您感興趣的方法來回答您的其他問題。有時,一個方法是一個神奇的方法(一組,得到),你不會找到背後

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(定義的方法,並找到其中這些方法被調用的代碼庫
  • 使用>setMethodName(找到這裏,如果你想知道魔術方法設置爲什麼沒有定義代碼庫中的getSomeVariable()
+0

#安頓,「或從源代碼中找到您感興趣的方法。」我問我的問題沒有。 3出於這個原因。 – coder

+1

@coder和我的grep示例向您顯示了文件,行,方法或您在此未了解的部分? –

0

1)是的。

2)Mage_Catalog_Block_Product_List::getLayer()返回目錄圖層模型(Mage_Catalog_Model_Layer)。它用在下面的代碼中。

3)它是魔法,幾乎所有的品牌類延伸Varien_Object類。在這article閱讀更多關於Varien_Object

4)抱歉,不明白這個問題。

5)爲避免出現這樣的問題,您應該首先閱讀official development guide,並且只有在瞭解之後,您才應該閱讀Alan Storm's articles(略有過時,順便說一下)。