2011-09-13 68 views
0

我正在嘗試覆蓋Magento平臺上的核心模塊。從特定位置加載模塊(magento)

這絕對沒有問題。 我爲它製作了一個簡單的模塊,它默認通過etc/modules/... xml文件加載。但我想要的是:

僅在類別頁面上調用模塊。

有沒有人知道是否可以從模板文件中調用(定義,設置)模塊?

我怎樣才能讓它只加載在特定的模板文件上,或者只在類別頁面上加載?


我目前正在東西出來,但仍然無法環繞正確的代碼我的手指。 我認爲if/else語句對於核心模塊currency.php是正確的,但是可能你們可以幫助我。

* 這是我在想什麼,看到訂單不是代碼;)*

<?php 
class MyCompany_ConstPrice_Model_Currency extends Mage_Directory_Model_Currency 
{ 
public function __A_NAME_() 
if(Mage::app()->getFrontController()->getRequest()->getRouteName() == 'catalog') : 
elseif: 
$this->_redirectReferer(Mage::getBase()); 

Rest of code.... 
?> 
+0

我非常懷疑這是可能的,所有的模塊都被加載在一起之前,其中的任何一個被用來計算出哪些模板要加載甚至推斷哪個頁面被請求。當然,有些塊只能在類別頁面上加載的方法很多。 – clockworkgeek

+0

嗯,這太糟糕了,所以它不可能覆蓋例如法師/目錄/模型/ Currency.php只爲類別頁面和顯示不同的價格佈局? – Ruud

+1

您的貨幣覆蓋類可以檢查'Mage :: app() - > getRequest() - > getRouteName()=='catalog'',然後纔會產生新的價格。否則,請致電父母/原始方法以顯示舊價格。我對根據頁面使用不同格式感到不舒服,客戶不會知道哪個頁面很重要,而且不一致就是不好的UI。 – clockworkgeek

回答

2

爲了提供一個覆蓋首先需要重寫類的別名。

<config> 
    <global> 
     <models> 
      <directory> 
       <rewrite> 
        <currency>MyCompany_ConstPrice_Model_Currency</currency> 
       </rewrite> 
      </directory> 
     </models> 
    </global> 
</config> 

現在你可以做實際的覆蓋。

<?php 

class MyCompany_ConstPrice_Model_Currency extends Mage_Directory_Model_Currency 
{ 

    public function getCode() 
    { 
     if ((Mage::app()->getRequest()->getRouteName() == 'catalog') 
     && (Mage::app()->getRequest()->getControllerName() == 'category')) { 
      // return something here... 
     } 
     // else not a category page 
     return parent::getCode(); 
    } 
} 

注:我用getCode()作爲例子,因爲它是聲明的第一個功能。