Joomla のタスクとビューの詳細な研究
[この記事は、Mengxi Notes からの転載です]
Joomla Web サイトの構築を迅速に完了できる優れた CMS システムで、Web サイトのニーズのほとんどを満たすコンポーネント、モジュール、テンプレートが提供されます。これにはコンポーネントが重要な役割を果たします。
コンポーネント(コンポーネント)は、ページの本体データを表示するために使用されます。 Joomla のコンポーネントは、MVC アーキテクチャを使用して設計されています。 ページ要求が生成されると、その URL にはタスク、ビュー、レイアウト、その他の情報が含まれる場合があります。ここでは、このタスクとビューについて説明します。一般に、URL にタスクが含まれている場合、ビューは含まれません。これは、Joomla がデータベース操作、有効性検証などの特定のタスクを完了すると考えているためです。データの表示を担当します。通常の設計では、タスク内でのタスク処理が完了した後、setRedirect メソッドが呼び出され、データを表示するビューに誘導されます。実際、Joomla では、URL でタスクが指定されていない場合、デフォルトのタスクは表示になります。
2. 問題
プロジェクトでは、ページのメタデータにオープングラフィックプロトコルのデータを含める必要があります。オープン グラフィック プロトコルは、共有するデータの説明をソーシャル ネットワークに提供するために使用されます。 ページがタスクを通じて完了し、タスク内で setRedirect を使用して認可検証のデータに基づいて別のビューにジャンプし、検証に合格した後にデータ ページを表示すると、次の問題が発生する可能性があります。このページでは、このページのメタデータにオープン グラフィック プロトコル データを追加しました。これを Facebook や Google などのソーシャル ネットワーキング サイトに共有したい場合、データや写真がそのページに表示されることがわかります。共有ページは、ページに表示したいデータではありません。
3. 解決策
上記の問題は、Open グラフィック プロトコルのデータ取得がジャンプをサポートしていないためです。ジャンプが発生した場合は、通常、Web サイトのホームページにアクセスして取得することになります。データですが、これは私たちが望んでいることではありません。問題はsetRedirectです。 setRedirect の原理は、ブラウザに送信される HTML ヘッダーにジャンプ命令が含まれるということです。上記の問題を解決する方法は、setRedirect を使用するのではなく、display メソッドを使用することです。必要なのは、入力に渡すビュー、レイアウト、その他のデータを設定してから、表示方法ができます。
以下はサンプル コードです:
/** * 内部跳转,用于代替setRedirect. 为什么要这样子做呢? * 因为 setRedirect他会发送一个http头到浏览器,让浏览 * 进行跳转,这样一来就多了一个网络请问, 这是其一。最 * 为主要的是setRedirect在某些不支持浏览器redirect的情况 * 下达不到效果,例如:open graphic protocal * * @param type $view 要显示的view * @param type $layout 要显示的layout, 默认为NULL */ protected function internalRedirect($view, $layout=null){ $this->input->set("view", $view); $this->input->set("layout", $layout); return $this->display(); } public function checkAvailable(){ //其他的业务代码 $this->input->set('tmpl', 'doexam'); return $this->internalRedirect("doexam", $layout); }
上記のコードはコントローラーに記述されています。 InternalRedirect 関数は、$input でビューとレイアウトを設定し (この入力は URL の入力パラメーターを参照します)、JControllerLegecy の表示メソッドを直接呼び出してページを表示します。
checkAvailable メソッドでは、internalRedirect を呼び出す前に、ビューに必要な他のパラメーターも設定されます。
Mengxi の友人は、彼の Web サイトの 1 つを構築しているときにそのような問題に遭遇したと言いました。私たちは Joomla の実装コードについて話し合い、分析したところ、Joomla に精通している限り、解決策は実際には非常に簡単であることがわかりました。コンポーネント開発。ご質問がございましたら、私に相談してください
この記事があなたが遭遇した問題を解決できることを願っています。