質問: ajaxコンポーネントを呼び出す適切な方法は何ですか? joomlaのカスタムコンポーネントを開発しています! 3.xでajaxを呼び出してデータを取得する場合。適切な方法は何ですか?
回答: これは非常によく回答された質問に対する遅い回答ですが、ajax呼び出しでコンポーネントのデータにアクセスする簡単な方法が必要な場合のために、この簡単な解決策を追加したいと思いました。joomlaのすべてのバージョン、サードパーティの可能性、グーグルで数日かけて見つけたハッキングで、これは私が思いつくことができる最も簡単なアプローチでした-フィードバックは間違いなく高く評価されています。 既存のメインコントローラに関数executeを追加しました ajaxで呼び出したいタスクのパブリック関数を持つサブコントローラーを作成しました 組み込みのjoomla jresponsejsonクラスを使用して出力を処理しました(それは本当にいいです!) タスクを呼び出す/実行するurl:www.mysite.com/index.php?option=com_example&task=forajax.mytaskname変更されたメインコントローラ\ com_example\controller.phpclass examplecontroller extends jcontrollerlegacy { public function display($cachable = false, $urlparams = false) { $app = jfactory::getapplication(); $view = $app->input->getcmd('view', 'default'); $app->input->set('view', $view); parent::display($cachable, $urlparams); return $this; } public function execute() { // not technically needed, but a damn good idea. see http://docs.joomla.org/how_to_add_csrf_anti-spoofing_to_forms // jsession::checktoken(); $task = jfactory::getapplication()->input->get('task'); try { parent::execute($task); } catch(exception $e) { echo new jresponsejson($e); } } } 新しいサブコントローラー\ com_example\controllers\forajax.phprequire_once jpath_component.'/controller.php'; class examplecontrollerforajax extends examplecontroller { public function mytaskname() { $app = jfactory::getapplication(); $data['myrequest'] =$_request; $data['myfile'] =__file__; $data['myline'] ='line '.__line__; $app->enqueuemessage('this part was reached at line ' . __line__); $app->enqueuemessage('then this part was reached at line ' . __line__); $app->enqueuemessage('here was a small warning at line ' . __line__, 'warning'); $app->enqueuemessage('here was a big warning at line ' . __line__, 'error'); $task_failed = false; echo new jresponsejson($data, 'my main response message',$task_failed); $app->close(); } } レンダリングされたjson出力{ success: true, message: "my main response message", messages: { message: [ "this part was reached at line 26", "then this part was reached at line 27" ], warning: [ "here was a small warning at line 28" ], error: [ "here was a big warning at line 29" ] }, data: { myrequest: { option: "com_example", task: "mytaskname", itemid: null }, myfile: "c:\mysite\components\com_example\controllers\forajax.php", myline: "line 24" } }