2012-01-30 9 views
3

私はjoomla MVCを使用していますが、入力があるフォームの異なるセクションである異なるタブを持つフォームを作成したいと思います。私が含める必要がある他のフォームに共通のタブがいくつかあります。joomla別のビューにビューを追加する

この共通のコンテンツを別のファイルやビューからロードして、重複したコードを持たないようにしたいと思います。フォームに変更を加える必要があるときは簡単です。フォーム。それは別のビューの中にビューを表示するようなものです。

これを行う方法はありますか?

答えて

9

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:私はテストする時間がなかったが、それは動作するはずです。この最後のビット。

+0

ありがとうcppl、これは私が探していたaswerでした! – arlievanos

+1

tmplで兄弟ビューと一緒に動作しますが、異なるビュー間では動作しません – themis

+1

ECHO $ this-> loadTemplateを忘れないでください – max4ever

0

異なるビューのテンプレートファイルを手動で読み込むことができます。以下はレイアウト "layoutname"を持つ "nameofotherview"と呼ばれるビューです。これが管理者ビューの場合は、代わりにJPATH_COMPONENT_ADMINSTRATORを使用してください。

require(JPATH_COMPONENT_SITE . '/views/nameofotherview/tmpl/layoutname.php'); 

ビュークラスで設定されたデータは、メインレイアウトと他の場所からロードしているレイアウトと互換性がある必要があります。

これを実行する副作用は、テンプレートの上書きが機能しないことです。 loadTemplate関数はrequireを実行していますが、まずテンプレートパスのオーバーライドをチェックします。

関連する問題