2011-05-26 101 views
8

我想更改現有的prestashop模塊而不復制它並創建新模塊。我知道可以重寫prestashop中的.tpl文件,但是可以用php類做同樣的事情嗎?例如,我想更改blockcart,以便它可以掛在上面。由於原始版本沒有那個鉤子,我需要更改install()函數!我不能改變原始的源代碼(這是不好的主意不是它...)文件我需要通過繼承blockcart模塊來重寫install()函數。有沒有可能這樣做,我可以找到例子?Prestashop - 現有prestashop模塊中的覆蓋功能

回答

11

我使用我自己的覆蓋到FrontController類,以允許在tpl文件中的任意點顯示模塊輸出 - 這意味着模塊不需要支持特定的鉤子。它通過一個智者插件實現的,所以你可以例如使用:

{plugin module='blockcart' hook='rightColumn'} 

以上將強制模塊輸出什麼,如果鉤到上面的標籤插在右列會顯示(可任何tpl文件中的任何地方)。您可以從右欄中「解除」模塊,以便它僅顯示您希望使用此技術的位置。我已經在生產網站上使用它,取得了巨大的成功。

有說明它是如何工作(與所需的代碼)提供了一系列的文章:

Prestashop 1.4 Plugins

+0

Wow偉大的解決方案保羅! – 2011-09-07 10:30:09

+0

我一直覺得雖然Modules和hooks系統在很多情況下都有效,但有些時候它太僵化了。很高興你發現它很有用。 – 2011-09-08 18:02:29

+0

優秀的保羅!順便說一下,我可以傳遞一些參數到模塊的鉤子?謝謝! – 2013-12-06 06:19:42

3

在Prestashop 1.4中,您可以覆蓋核心類和模塊模板 今天,這是不可能覆蓋模塊的php文件,但我們正在努力。

1

由於的PrestaShop 1.6.0.11版本中,有一個新的功能,允許開發人員重寫模塊的實例類。

通過 擴展它要覆蓋一個模塊的實例類重寫模塊的實例類,你必須把它擴大,從而擴展的類相同的名稱和增加覆蓋後綴:

<?php 
if (!defined('_PS_VERSION_')) 
    exit; 
class BlockUserInfoOverride extends BlockUserInfo 
{ 
    public function hookDisplayNav($params) 
    { 
     return '<div class="header_user_info"><a>Test</a></div>'; 
     // return $this->display(__FILE__, 'nav.tpl'); 
    } 
} 

來源:http://build.prestashop.com/howtos/module/how-to-override-modules/