web-dev-qa-db-ja.com

AJAXを使用して部分ビューを通常のビューにロードする方法は?

AJAXを呼び出してJControllerを呼び出しており、既存のページ内に表示するために、一部のデータが入力された「部分」ビューを送り返したいと思います。

<view>/tmpl/からファイルを読み込み、データをそのファイルに挿入して、結果のスニペットを保存することはできますか?

私は次のようなことをする必要があると思っています:

controller.php(アクションメソッド内)

$view = $this->getView('MyView', 'results'); // loads view.results.php
$view->assignRef('data', $response); // assign data
$storedView = $view->display(); // store the view

view.results.php

function display($tpl = null){
    return $this->loadTemplate('results'); // loads '/<view>/tmpl/default_results.php'
}

[〜#〜]編集[〜#〜]

上記の正しくないコードを、動作しているように編集しました。

これは、この特定のユースケースのベストプラクティスですか?ロードされたテンプレートを返す既存のview.html.phpに新しいメソッドを単純に追加することは、不適切なフォームと見なされますか?

5
codinghands

部分ビュー/タスクのURLは次のようにする必要があります。

_index.php?option=com_example&view=partial&format=raw
_

必要に応じて、コントローラに新しいメソッドを作成することもできます。別のビューの設定を妨げるような方法でデフォルトのdisplay()メソッドがオーバーライドされていないことを確認してください。

次のファイルを作成します。

JROOT/components/com_example/views/partial/view.raw.php

_<?php
defined('_JEXEC') or die;

class ExampleViewPartial extends JViewLegacy
{
    function display($tpl = null)
    {
        // Get the data needed for the view ...

        // Call parent
        parent::display($tpl);
    }

}
_

JROOT/components/com_example/views/partial/tmpl/default.php

_<?php
echo 'Hello partial world!';
_
3
Valentin Despa