web-dev-qa-db-ja.com

特定のメニュー項目のコンポーネントビューをオーバーライドする

特定のメニュー項目のコンポーネントビューをオーバーライドするにはどうすればよいですか?

グローバル上書きの場合、template/html/com_xxx/
しかし、特定のメニュー項目に対してのみどうすればよいですか?

例:

Joomla!記事のブログビューがあります。
特定のメニューアイテムのこのビューのマークアップを変更し、同じブログビューにリンクしている他のメニューアイテムのデフォルトのマークアップを保持するにはどうすればよいですか?

6
Fedik

方法1:

CSSクラスを使用して、説明したとおりに機能させる。

  1. クラスをメニュー項目に追加します(ページ表示タブで、[ページクラス]フィールドに書き込みます)。例:「スペシャルページ」(ページクラスの前のスペースに注意してください。スペースがないと、コンポーネントのレンダリング出力に追加されます)。複数の状況で使用できるクラスを使用することをお勧めします。
  2. オーバーライドでは、「フィルター」をスクリプト化する必要があります。

    if(strpos($this->pageclass_sfx, ' special-page') !== false) {
        $templateA = true;
    }
    
    if($templateA){
    (put your customized override here)
    }
    

方法2:

ビューにテンプレートオーバーライドを使用してください!

  1. オーバーライド用のHTMLフォルダーで、目的のビュー(例:アーティクルビュー)を複製し、名前を変更して、パラメーターを含む.xmlファイルを作成する必要があります(コンポーネントのビューからコピーし、.xmlオーバーライドされたビューと同じ名前です!)。

    例:記事のオーバーライドビューを作成し、それを「特別」と呼びましょう。default.phpをテンプレートのHTMLフォルダーにコピーする必要があります(次のフォルダー構造に入れます:com_content/article/名前をspecial.php)に変更します。オーバーライドと同じフォルダーに.xml(必要に応じてコピーし、さらには変更する必要がある)を忘れずに、名前をspecial.xmlに変更します。

    オーバーライドされたコード/スタイルなどでビューを更新します。

  2. 次に、メニュー項目に移動し、新しいメニュータイプに変更します(記事の下でspecialを選択)、テストします!
4
jackJoe

一般的なソリューション:

メニュー項目ごとに、リンクされたページに適用するテンプレートを選択できるため、テンプレートを複製し、複製したテンプレートにビューのオーバーライドを作成できます。

その後、メニュー項目パラメーターで複製されたテンプレートを選択できます。オーバーライドは、そのメニュー項目に対してのみ有効です。

K2付き:

たとえば、K2を使用できます。これを使用すると、異なる名前で複数のビューオーバーライドを作成できます。

オーバーライドは次のようになります。

template_name/html/com_k2/override_1
                         /override_2
                         /...

次に、メニューパラメータでK2アイテムを選択するときに、その特定のページに適用するオーバーライドを選択できます。これにより、複数のテンプレートを作成する必要がなくなります。

3
web-tiki