Joomla 1.5のサーバーで非同期検証を使用してフォームを作成する

この記事では、Joomla 1.5のサーバーで非同期検証を使用してフォームを作成する方法の1つを示します。 これを行うには、Joomla 1.5で実装されたMVCコンセプトに従って構築されたコンポーネントを作成し、mootools 1.2はJSフレームワークとして使用されます。



はじめに


この記事では、MVCの概念の理論とJoomla 1.5での実装については詳しく説明しません。 また、読者がこのCMSのコンポーネントを作成する一般的な原則に精通していると仮定します。そうでない場合は、たとえばthisを見ることができます。 おそらくいつかこれについての記事を書くでしょうが、とりあえずこのテーマをカバーしたいと思います:)

問題の声明


フォームに入力されたデータのサーバーで非同期検証を実装するフロントエンドコンポーネントを作成する必要があります。 サーバーへの非同期アクセスを実装するには、 mootools 1.2.xを使用しますMootools 1.1はすでにJoomla 1.5に統合されていますが、ファイルをコードに置き換えるだけでは機能しません-Joomlaは動作しません。 しかし、いつものように、最新のソリューションを使用したいので、Joomlaで利用可能なmootoolsは使用しませんが、最新バージョンを接続します。 もちろん、競合のリスクがありますが、フロントエンドでは組み込みのmootoolsを使用するコンポーネントがないと想定しています:)さらに、このメソッドは他のJSフレームワークを使用したい人にとって有用です。

実装


コンポーネントのスキームは次のようになります。 フォームの送信ボタンをクリックすると、フィールドからのデータがサーバーに非同期的に送信され、コントローラーはそれを「受信」し、データを確認し、入力されたデータの有効性に関する情報を含むJSON形式で応答を返します。 この情報は、CSSを使用して検証結果を表示するためにクライアントで使用されます。

コードに直接進む前に、いくつかの明確化を行う必要があります。 MVCの概念によれば、コンポーネントに対するすべてのユーザー要求は、コントローラーによって処理される必要があります。 コマンドを受け取ったコントローラーは、このコマンドへの対応方法を「決定」します。 従来のスキームでは、コントローラーはデータを受信/保存/更新するためのModelコマンドを提供し、このコマンドの結果はビューによって表示され、データの表示方法を「認識」します。

最も単純なコンポーネントにはModelがないため、対応するクラスは空になります。この例では、コンポーネントコードの一般的な構成を示す目的でのみ存在します。 ビューのタスクは、必要なスタイルとスクリプトを含め、フォームを表示することです。 コントローラーでは、サーバー上のフォーム検証機能が個別のタスク(タスク)として実装され、これを非同期的に呼び出します。

コンポーネントのフロントエンドパーツフォルダー( AsyncFormを呼び出します )、つまり / components / com_asyncformフォルダーには、次のフォルダーとファイル構造があります。

 + com_asyncform
    +資産
       + css
          -common.css
       + js
          -common.js
          -mootools-1.2.1-core.js
    +コントローラー
       -default.php
    +モデル
       -asyncform.php
    +ビュー
       + tmpl
          -default.php
       -view.html.php
    -asyncform.php


  asyncform.php 

  1. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  2. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  3. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  4. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  5. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  6. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  7. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  8. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  9. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  10. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  11. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  12. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  13. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  14. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  15. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  16. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  17. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  18. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  19. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  20. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>
  21. <?php
    defined ( '_JEXEC' ) or die ( 'Restricted access' ) ;

    if ( $controller = JRequest :: getVar ( 'controller' ) ) {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . $controller . '.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . $controller . DS . 'view.html.php' ) ;
    }
    else {
    require_once ( JPATH_COMPONENT . DS . 'controllers' . DS . 'default.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'models' . DS . 'asyncform.php' ) ;
    require_once ( JPATH_COMPONENT . DS . 'views' . DS . 'default' . DS . 'view.html.php' ) ;
    }

    // Create the controller
    $classname = 'AsyncformController' . $controller ;

    $controller = new $classname ;
    $controller -> execute ( JRequest :: getVar ( 'task' ) ) ;
    $controller -> redirect ( ) ;
    ?>



 コントローラー/ default.php 

  1. <?php
  2. jimport 'joomla.application.component.controller' ;

  3. クラス AsyncformController JControllerを拡張します{
  4. function __construct $ default = array {
  5. :: __construct $ default ;
  6. $ this- > registerDefaultTask 'display' ;
  7. $ this- > registerTask 'check' 'check' ;
  8. }

  9. 関数キャンセル {
  10. $ this- > setRedirect 'index.php' ;
  11. }

  12. 関数表示 {
  13. $ view = new AsyncformView ;
  14. $ view- > display ;
  15. }

  16. 機能チェック {
  17. $ isValid = false ;
  18. $ res [ 'type' ] = '' ;
  19. $ res [ 'msg' ] = '' ;
  20. $ res [ 'items' ] = array ;

  21. $ name = substr JRequest :: getVar 'name' 0、50 ;
  22. if ereg '[a-aaA-aa-zA-Z \-] + $' $ name {
  23. $ res [ 'items' ] [ ] = array 'name' => 'name' 'status' => 1 ;
  24. $ isValid = true ;
  25. }
  26. その他 {
  27. $ res [ 'items' ] [ ] = array 'name' => 'name' 'status' => 0 ;
  28. $ isValid = false ;
  29. }

  30. $ email = strtolower substr JRequest :: getVar 'email' 0、50 ;
  31. if ereg '^ [^ 0-9] [a-z0-9 _ \-\。] + @ [^ 0-9] [az \-\。] + \。[az] {2,4} $ ' $ email {
  32. $ res [ 'items' ] [ ] = array 'name' => 'email' 'status' => 1 ;
  33. $ isValid = true ;
  34. }
  35. その他 {
  36. $ res [ 'items' ] [ ] = array 'name' => 'email' 'status' => 0 ;
  37. $ isValid = false ;
  38. }
  39. if $ isValid {
  40. $ res [ 'type' ] = 'valid' ;
  41. $ res [ 'msg' ] = 'フォームに正しく記入されています' ;
  42. }
  43. その他 {
  44. $ res [ 'type' ] = 'error' ;
  45. $ res [ 'msg' ] = 'エラー!' ;
  46. }

  47. echo json_encode $ res ;
  48. }
  49. }
  50. ?>


check()メソッドでは、応答はJSON形式で生成されます。


 モデル/ asyncform.php 

  1. <?php
  2. jimport 'joomla.application.component.model' ;

  3. クラス AsyncformModel JModelを拡張します{
  4. }
  5. ?>



 ビュー/デフォルト/ view.html.php 

  1. <?php
  2. jimport 'joomla.application.component.view' ;

  3. クラス AsyncformView JViewを拡張します {
  4. パブリック $メッセージ ;

  5. 関数 __construct {
  6. $ this- > addTemplatePath JPATH_COMPONENT。DS ' views'。DS ' default'。DS ' tmpl ' ;
  7. }

  8. 関数表示 $ tpl = null {
  9. // JHTML :: _( 'behavior.mootools');

  10. $ document = JFactory :: getDocument ;
  11. $ document- > addStyleSheet 'components / com_asyncform / asset / css / common.css' ;
  12. $ document- > addScript 'components / com_asyncform /assets/js/mootools-1.2.1-core.js' ;
  13. $ document- > addScript 'components / com_asyncform /assets/js/common.js' ;

  14. :: 表示 $ tpl ;
  15. }
  16. }
  17. ?>


それでも組み込みのmootoolsを使用する場合は、16行目ではなく12行目で演算子を使用します。

 ビュー/ default / tmpl / default.php 

  1. <?php defined '_JEXEC' またはdie 'Access denied' ; ?>

  2. <div id = "log"> </ div>

  3. <form id = "frm_asyncform" action = "index.php?option = com_asyncform&task = check&format = raw" method = "post">
  4. <表>
  5. <tr>
  6. <td>名前</ td>
  7. <td> <input type = "text" name = "name" id = "name" /> </ td>
  8. </ tr>
  9. <tr>
  10. <td>メール</ td>
  11. <td> <input type = "text" name = "email" id = "email" /> </ td>
  12. </ tr>
  13. </ table>
  14. <input type = "submit" name = "btn_submit" id = "btn_submit" value = "Submit" />
  15. </ form>


フォームハンドラーに注意してください。 この種のハンドラは、追加のhtmlマークアップなどを使用せずに、サーバーから応答文字列を取得するだけでよいという事実によるものです。 Joomla 1.0.xでは、コンポーネントの出力のみを返すためにindex2.phpを使用する必要がありましたが、Joomla 1.5ではこれは機能しません。 これらの目的のために、コンポーネントの出力のみを返すために、rawと等しくなければならないformatパラメーターを提供します。

 アセット/ css / common.css 

  1. .error {
  2. border 2px solid #ff0000 ;
  3. }

  4. #log {
  5. パディング 5px ;
  6. オーバーフロー 自動 ;
  7. margin-bottom 5px ;
  8. 452px ;
  9. }

  10. #log .loaded {
  11. 背景色 #ffc0c0 ;
  12. }

  13. #log .loaded-success {
  14. 背景色 #c0ffc0 ;
  15. }



 アセット/ js / common.js 

  1. ウィンドウ。 addEvent 'domready' function {
  2. $ 'frm_asyncform' addEvent 'submit' function e {
  3. e。 停止 ;
  4. var log = $ 'log' ;
  5. これセット '送信' {
  6. メソッド 'post'
  7. onComplete function response {
  8. var res = JSON。 デコード 応答 ;
  9. 解像度 アイテム 関数 フィールド {
  10. if フィールド。 ステータス
  11. $ フィールド removeClass 'error' ;
  12. 他に
  13. $ フィールド addClass 'error' ;
  14. } ;
  15. if res。type == 'valid'
  16. ログ。 addClass 'loaded-success' ;
  17. 他に
  18. ログ。 addClass 'loaded' ;
  19. ログ。 set 'html' res。msg ;
  20. }
  21. } ;
  22. これ送信 ;
  23. } ;
  24. } ;


ここでは、文字列としてサーバーから受信した応答がjs-objectに変換された後、その内容が分析され、必要なパラメーターがコンポーネント本体のhtml要素に設定されます。

実際、それがすべてです。 この投稿が誰かに役立つことを願っています。 コメント、ヒント、提案はもちろん歓迎です!

Source: https://habr.com/ru/post/J55788/


All Articles