7

既存の prestashop モジュールをコピーして新しいモジュールを作成せずに変更したいと考えています。prestashop で .tpl ファイルをオーバーライドできることは知っていますが、php クラスで同じことを行うことは可能ですか? たとえば、ブロックカートを上に引っ掛けられるように変更したいと思います。元のバージョンにはそのフックがないため、install() 関数を変更する必要があります。元のソースを変更することはできません (それは悪い考えですよね...) file blockcart モジュールを継承して install() 関数をオーバーライドする必要があります。そうすることは可能ですか、どこで例を見つけることができますか?

4

5 に答える 5

11

FrontController クラスに独自のオーバーライドを使用して、tpl ファイル内の任意のポイントでモジュール出力を表示できるようにします。これは、モジュールが特定のフックをサポートする必要がないことを意味します。これは smarty プラグインを介して実装されるため、たとえば次のように使用できます。

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

上記は、上記が挿入されたタグが挿入されている右側の列にフックされた場合に表示されるものをモジュールに強制的に出力させます (これは任意の tpl ファイルのどこにでもあります)。この手法を使用して、モジュールを右側の列から「フック解除」して、必要な場所にのみ表示することができます。私はそれを本番サイトで使用して大きな成功を収めました。

それがどのように機能するか (必要なコードを含む) を説明する一連の記事が次の場所にあります。

Prestashop 1.4 プラグイン

于 2011-09-02T22:54:33.330 に答える
2

Prestashop 1.4 では、コア クラスとモジュール テンプレートをオーバーライドできます。現在、モジュールの php ファイルをオーバーライドすることはできませんが、現在取り組んでいます。

于 2011-08-31T09:20:09.243 に答える
0

PrestaShop のバージョン 1.6.0.11 以降、開発者がモジュールのインスタンス クラスをオーバーライドできるようにする新しい機能があります。

モジュールのインスタンス クラスを拡張して オーバーライドする モジュールのインスタンス クラスをオーバーライドするには、拡張クラスに同じ名前を付け、Override 接尾辞を追加して拡張する必要があります。

<?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/

于 2016-05-30T22:10:31.060 に答える