私はjoomla MVCを使用していますが、入力があるフォームの異なるセクションである異なるタブを持つフォームを作成したいと思います。私が含める必要がある他のフォームに共通のタブがいくつかあります。joomla別のビューにビューを追加する
この共通のコンテンツを別のファイルやビューからロードして、重複したコードを持たないようにしたいと思います。フォームに変更を加える必要があるときは簡単です。フォーム。それは別のビューの中にビューを表示するようなものです。
これを行う方法はありますか?
私はjoomla MVCを使用していますが、入力があるフォームの異なるセクションである異なるタブを持つフォームを作成したいと思います。私が含める必要がある他のフォームに共通のタブがいくつかあります。joomla別のビューにビューを追加する
この共通のコンテンツを別のファイルやビューからロードして、重複したコードを持たないようにしたいと思います。フォームに変更を加える必要があるときは簡単です。フォーム。それは別のビューの中にビューを表示するようなものです。
これを行う方法はありますか?
Joomla!ビューにloadTemplate
メソッドを提供します。あなたはレイアウトedit
(すなわち。tmpl/edit.php
)のためにロードされtmpl
ファイルに現在なら
だから、$this->loadTemplate('tab1');
とJoomlaのを呼び出すことができます! tmpl/edit_tab1.php
ファイルをedit.php
と同じビューで読み込みます。
tmpl/other_tab1.php
を含める場合は、レイアウトをその他のに一時的に設定する必要があります。我々は編集テンプレートからタブを必要とするので、私たちが使う実行テンプレート中の当社の構成要素の一つで:
<?php $this->setLayout('edit'); // This is ugly
echo $this->loadTemplate('plan');
$this->setLayout('run'); ?>
alltogether別のビューからテンプレートをロードするには、私はあなたが一時的にオーバーしなければならないと思います値をview
に設定し、テンプレートをロードしてからビューを復元します。例えば。
$jinput = JFactory::getApplication()->input;
$jinput->set('view', 'other');
$this->loadTemplate('tab2');
$jinput->set('view', 'original');
NB:私はテストする時間がなかったが、それは動作するはずです。この最後のビット。
異なるビューのテンプレートファイルを手動で読み込むことができます。以下はレイアウト "layoutname"を持つ "nameofotherview"と呼ばれるビューです。これが管理者ビューの場合は、代わりにJPATH_COMPONENT_ADMINSTRATOR
を使用してください。
require(JPATH_COMPONENT_SITE . '/views/nameofotherview/tmpl/layoutname.php');
ビュークラスで設定されたデータは、メインレイアウトと他の場所からロードしているレイアウトと互換性がある必要があります。
これを実行する副作用は、テンプレートの上書きが機能しないことです。 loadTemplate関数はrequireを実行していますが、まずテンプレートパスのオーバーライドをチェックします。
ありがとうcppl、これは私が探していたaswerでした! – arlievanos
tmplで兄弟ビューと一緒に動作しますが、異なるビュー間では動作しません – themis
ECHO $ this-> loadTemplateを忘れないでください – max4ever