Joomla 2.5のAJAX

この記事では、Joomlaのコンポーネント、モジュール、プラグインでAJAXを使用する際の問題について説明します。

正直なところ、それほど熱くはないネイティブJoomlaのドキュメントで、Joomla 2.5モジュールとプラグインにAjaxを追加するようにというリクエストで11回目になってから、その方法について小さなトピックを書くことにしました。

まず、CMS自体の構造について少し説明します。ビジュアルレイヤーはコンポーネントとモジュールで構成されます。コンポーネントはほとんどの場合ページのメインコンテンツであり、モジュールは情報の小さなブロックです。たとえば、右側のHabréブロック(ライブ、Q&A)はモジュール、ページのメインコンテンツ、たとえば、コメント付きのトピックのテキストまたは投稿のフィード-コンポーネント。



図では、モジュールは赤で強調表示され、コンポーネントは青で強調表示されています

プラグインはページの出力全体に適用されます。 これらは、電子メールアドレスを画像またはjavascript(<code>タグ内のすべてを置換するコードハイライト)で置換する電子メールハイジャッカーです。

コンポーネント(サイトのメインコンテンツ)で非同期リクエストを使用する必要がある場合、CMSはそのような機会を提供します。 コンポーネントがある場合は、いくつかのパラメーターによる高速非同期フィルタリングを実装するホテルを検索し、アドレスバーに「tmpl = component」コンポーネントの出力のみを追加します。



最初の図と同じページですが、モジュールはなく、コンポーネントの出力のみです

tmpl = componentが何らかの魔法やハックであると考える必要はありません。各コンポーネントまたはモジュールに対して、無制限の数のテンプレートを作成し、条件に応じてそれらを適用できます。

したがって、AJAXをコンポーネントに追加する必要がある場合は、特定のパラメーターを使用してコンポーネントページを呼び出し、特定のフィルターによってホテルのリストを返すだけで、ユーザーが画面に表示するリストでそれらを置き換えます。

ただし、同様の機能をモジュールに追加する必要がある場合は、耳を使っていくつかのフェイントを行う必要があります。 コンポーネントとモジュールの主な違いは、コンポーネントはコンテンツの独立したユニットであるのに対して、モジュールはページ上の追加情報にすぎないことです。

たとえば、あるコンポーネントから別のコンポーネントのコンテンツを含むライトボックスを呼び出すなど、コンポーネントのコンテンツを個別に取得できますが、これはモジュールでは機能しないため、たとえば、ホテルのリストとAJAX-のURIを含む小さなモジュールがある場合は、ファイルパスに直接移動する必要があります呼び出しはおよそ/modules/mod_test/ajax.php?action=getHotelList&city=Moscowになります。

ただし、このファイル内のJoomla Frameworkにアクセスするには、特定のファイルを接続し、いくつかの定数を定義する必要があります。

define('_JEXEC', 1);
      
      





_JEXECは、ファイルがフレームワーク内で呼び出されていることを最小限に確認するために、他のほとんどのCMSファイルでチェックされます。

 define('JPATH_BASE', dirname(__FILE__) . '/../../..' );
      
      





JPATH_BASE-サイトのメインディレクトリへのパスが格納される定数。 サイトのルートではなく、プラグインまたはモジュールのあるフォルダーにいるため、現在のファイルへのパスにいくつかのレベルを追加する必要があります。

 define('DS', DIRECTORY_SEPARATOR); require_once(JPATH_BASE.DS.'includes'.DS.'defines.php'); require_once(JPATH_BASE.DS.'includes'.DS.'framework.php');
      
      





パスを決定したら、index.php CMSファイルと同様の方法でメインフレームワークファイルを含める必要があります。

 JFactory::getApplication('site')->initialise();
      
      





アプリケーションを初期化した後、フレームワークAPIにアクセスし、必要なことを実行できます。たとえば、現在のユーザーがホテルのリストを表示するためのアクセス権を持っているかどうかを確認し、データベースからリストを取得して、HTMLコードまたはJSONの形式で返します。



All Articles