1

Joomlaコントローラーからビューにデータを渡す多くの例を見てきました(例here)。しかし、特定のビュー ファイル (view.html.php) に Joomla サブ コントローラーを渡す必要があります。私はそれについて一日中検索しましたが、解決策は見つかりませんでした。誰もこれを行う方法を知っていますか?

4

1 に答える 1

4

Joomla MVC は非常に緩く、いくつかの方法でこの動作を実装できます。これは、Joomla で MVC を実装するための最も標準的なシーケンスだと思います。

  1. コントローラーは入力を読み取り、関連するパラメーターをセッション変数に設定します
  2. コントローラーはビューにリダイレクトします
  3. ビューはモデルをロードします
  4. モデルはセッションからパラメーターを読み取ります。

しかし、3. でパラメータを処理してモデルに渡すことができます。これは本当にスタイル/好みの問題です。Joomla では、たとえば $this->get('Data') を使用してビューからモデルを呼び出すことができるため、パラメーターを渡す余地はありません。ただし、$model->getData2($param1,$param2) を呼び出すことを選択できます。

基本的な呼び出しは次のとおりです。

JApplication::getUserStateFromRequest()

1回の呼び出しで入力を読み取り、以前に保存されたセッションデータにフォールバックします。

setUserStateを使用してセッションでこの情報を 保持し、 getUserStateをモデルで使用してデータを取得します。

ただし、URL にパラメーターを渡すだけでリダイレクトできます。次に、view.html.php を使用して入力を解析し、メソッドを呼び出す前にモデルの内部状態を設定します ($model->setState)。または、リダイレクトを完全に回避してコントローラーからモデルとビューをロードします (これはより標準的な方法のようです)。 MVC への簡単なアプローチですが、Joomla ではめったに見られません)。

コントローラーからビューを直接呼び出す

    $vName      = 'yourview';
    $vFormat    = 'html'; // raw

    if ($view = $this->getView($vName, $vFormat)) {
        $model = $this->getModel($vName);
        $model->setState('filter.type', $type);
        $view->setModel($model, true);

        // Push document object into the view.
        $view->assignRef('document', $document);

        $view->display();
    }
于 2013-08-10T07:33:19.250 に答える