2016-05-14 8 views
2

JoomlaコンポーネントはMVCモデルを使用します。 Component Creatorは、有料のレベルでSQLインポートによるマルチ・タブル・ビューの作成をサポートする、広く使用されているツールです。また、開発者は、Joomlaのドキュメントに従って最初からコンポーネントをビルドします。コンポーネントクリエーターで構築されたJoomla 3.xコンポーネントの複数のモデルを1つのビューに含めるには

Joomlaのすべての管理者バックエンドと訪問者のフロントエンドCRUD(CREATE、READ、UPDATE、DELETE)機能を備えた複数のデータベーステーブルからのデータを表示する「ダッシュボード」として機能する高度なコンポーネントを構築したいと考えています。これは、画面上に表示された複数のデータベーステーブルから複数のモデル(MVC哲学から)を引き出す必要があることを意味します。同時に。後で次いで

$view = $this->getView('model-a', 'html'); 
$view->setModel($this->getModel('model-a'), true); 
$view->setModel($this->getModel('model-b')); 
$view->display(); 

とビューで表示方法を用いてそれらのモデルを呼び:

Documentation

Joomlaのは、次のコードは、利用可能な情報を作るために「コントローラタスク法」に挿入することを示唆しています

$item1 = $this->get('data1'); 
$item2 = $this->get('data2', 'model-b'); 

しかし、Joomlaのマニュアルに記載されているこれらの指示は、提供されているJoomla Hello World Tutorialチュートリアルまたはwidelから構築されたコンポーネントに従うときに構築されたコンポーネントとは不十分または互換性がありません使用され、一般的なComponent Creatorツールです。コンポーネントが呼び出されたときにページを読み込まないか、単純なコピーでビューにデータを渡してコンポーネントクリエーターまたはJoomla hello worldチュートリアルで作成した複数のコントローラーのいずれかにペーストしません。

Joomla 3.Xコンポーネントの複数のモデルを同じビューで呼び出すにはどうすればよいですか?

+0

この$ model = JModel :: getInstance( 'MODEL_NAME'、 'C​​OMPONENT_NAME')を使用して、ビュー内の任意のモデルを呼び出すことができます。 $ items = $ model-> getItems(); –

+0

@Amit Ray 'JModel'は動作しませんが、' JModelLegacy'はJoomla 3.5.1で動作します( 'JModelLegacy'はJoomla!3.5.1で動作します) 。 'JModel'を使用すると、サーバログに次のエラーが発生します。PHP致命的なエラー:/ var/www/html/components/com_componentname/views/multiviewname/viewの未定義のメソッドJModel :: getInstance()を呼び出します。 html.php'。 JModelLegacyはエラーをスローせず、ページは正常にロードされます。 –

+0

私の間違い申し訳ありませんが、私は遺産の部分を忘れました。しかし、それは問題を解決しましたか? –

答えて

2

ファイルを適切に形成されたモデルに直接呼び出すことで、複数のモデルを同じビューから正常に使用することができました。可能なコントローラ(1つはコンポーネント全体のコントローラ、もう1つはビュー固有のコントローラ)を変更しなかったので、私はJoomlaのドキュメントに従っていませんでした。また、Joomlaのドキュメントで提供されている関数を使用していませんでした。合格

  • /サイト/ビュー/ multiviewname /view.html.php(:適切なJoomlaのMVCの規約によると、ビューは、関連するビューディレクトリおよびサブフォルダ内の2つのファイルで作成されてい

    HTMLテンプレートを持つビューにモデル)

  • /サイト/ビュー/ multiviewname /tmpl/default.php()

これらはDATを表示するように変更する必要がありどちらもaを同時に複数のモデルから取得します。これは、 'Component Creator'ツールの使用時に自動的に行われるように、他のすべてのビュー、コントローラ、モデルが正しく構築されていることを前提としています。私のコンポーネントには、CSS、バックエンド管理、インストール、言語など、数百ものファイルがありました。これらはすべて、コンポーネント作成ツールを使用して作成されました。次のように

要約が、まだ完全に機能コードは次のとおりです。

/サイト/ビュー/ multiviewname /view.html。PHP

<?php 

jimport('joomla.application.component.view'); 

class ComponentnameViewMultiviewname extends JViewLegacy 
{ 
// $items is for the default model 
    protected $items; 
// $ItemsOtherModel is for second model. Notice the '$' used here but not elsewhere 
    protected $ItemsOtherModel; 

    public function display($tpl = null) 
    { 
     $app = JFactory::getApplication(); 
     $this->state = $this->get('State'); 
     $this->items = $this->get('Items'); 
     $this->pagination = $this->get('Pagination'); 
     $this->params  = $app->getParams('com_componentname'); 

// sets default model 
     $this->setModel($this->getModel('model-a'), true); 
// sets second model & uses 'JModelLegacy,' contrary to documentation 
     $this->setModel(JModelLegacy::getInstance('model-b', 'componentnameModel')); 
// assigns array from the second model to 'ItemsOtherModel.' there is no '$' sign used. 
     $this->ItemsOtherModel = $this->get('Items','model-b'); 

     parent::display($tpl); 
    } 

} 

/サイト/ビュー/ multiviewname /tmpl/default.php

<?php 

echo "<h3>Items from default model</h3> "; 
echo var_dump($this->items); 

echo "<h3>items from secondary model</h3> "; 
// notice that the '$' is absent from 'ItemsOtherModel' 
echo var_dump($this->ItemsOtherModel); 

この画期的な研究の日後にのみ可能でした。有料のComponent Creatorツールは、Joomla MVCコンポーネント標準に準拠した整形式コードで私を始めることは非常に貴重でした。すべてのファイルを調べて数日後に私がthis google groups threadに必要なプロンプトを見つけ、JModelLegacyクラスに注目しました。PHPエラーメッセージPHP Notice: Undefined index:を使用して、正式に文書化された方法。

このページはブラウザでレンダリングされると、データベーステーブルのすべての情報がページにダンプされますが、さらに開発することで、最終的に必要となるフォーマットされた機能的なダッシュボードを作成できます。

このコードは、複数の単一項目ではなく、情報の一覧を表示するためのコードです。 1つのビューに複数のモデルを追加するためのJoomlaのドキュメントは、ここに示す項目の配列ではなく、複数の単一の項目に対して設定されています。

関連する問題