MODx革命。 結果。 パート1

MODx Revolutionのリリースから3か月半が経過しました。 バージョン2.0が非常に粗雑であり、実際のプロジェクトで使用する準備ができていなかったと主張する人はいないと思います。 MODxに関するロシア語のサイトでは、多くの批判と懐疑的な見方がありました。 何かに値するものもあれば、詳細なドキュメントがないこともあります。 現時点では、バージョン2.0.4-pl2が利用可能です 。これによると、私の意見では、すでに要約することができます。開発者は正しい方向と開発ツールを選択しましたか? この記事では、新しいシステムの主な機能について詳しく説明しようと思いますが、それは私自身が発見したものです。







MODx Revolutionとは





開発者が言うように 、まずMODx RevolutionはCMFです。 Webアプリケーションを作成するためのツールであり、キットに付属しているCMSは単なる重量です。 RevoはPHPで書かれており、以下を使用します。





制御システム









上記にもかかわらず、開発者はCMSにかなりの注意を払いました。 制御システムの利便性は非常に慎重に考えられていると感じられます。





左側のリソース(ドキュメント)ツリーのセクションを右クリックして[クイック作成]-> [ドキュメント]を選択すると、ページをリロードせずにドキュメントを作成するためのウィンドウが開きます。これは非常に便利です。 クイック編集もあります(「リソースをすばやく更新する」)。 同様に、「追加フィールド」などをすばやく作成または編集できます。 ツリー内でドラッグアンドドロップするだけで、ドキュメントをソートおよび再配置できます。



しかし、すべてがそれほどバラ色ではありません。 「JavaScript-prettiness」のヒープのため、管理者はEvolutionよりも動作がはるかに遅く、一部のアクションでハングすることがあります。 時間が経つにつれて良くなると思いますが(重大な不具合に気付きませんでした)。



MODx Revolutionの開発





ユーザー権利の分離。 Evoでは、権限は修正され、管理パネル(「マネージャー」用)でのみ修正されました。 Revoでは、権限を作成して個々のユーザーグループに割り当てることができます。 これは非常に簡単に行われます:

[セキュリティ]-> [ユーザーグループ]-> [アクセスポリシー]に移動します。 アクセスポリシーの名前(「管理者」など)を選択し、編集中に「test_action」などの「新しい許可」を追加します。

保存して「終了」をクリックします。 権限を更新するには、システムを再入力する(セッションを更新する)必要があります。 現在、コンポーネントコード(スニペット、プラグイン)のどこでも、現在のユーザーがアクション "test_action"を実行する権利を持っているかどうかを確認できます。



if (!$modx->hasPermission('test_action')){ //     ,   " " return $modx->error->failure($modx->lexicon('access_denied')); }
      
      







これは非常に短く、 アクセス権をより細かく設定することができます 。 Revoでは、Evoのように「マネージャー」と「Webユーザー」の間に分離はありません。 管理部分のアクセス制御はmgr コンテキストによって決定され、サイトの外部部分はWebコンテキストによって決定されます。



特別な変更なしスニペットプラグインの作成 。 Evoのほとんどの関数名と引数が保存されます。 「パッケージ」(パッケージ)を作成するには、非常に便利で使いやすいPackManモジュールがあります。



スニペット、プラグイン、チャンクを選択し、「トランスポートパッケージのエクスポート」ボタンをクリックして、パッケージアーカイブをインストールする準備をします。 これで、コア/パッケージ/フォルダーに配置し、「パッケージ管理」からインストールできるようになります。



「マネージャー」でページを作成します。 現在、「モジュール」の概念はありません。 「コンポーネント」という共通名があります。 管理システムで 、コンポーネントのユーザー管理インターフェイスを作成できます。 主な手順を簡単に説明します。

1.コンポーネントのネームスペースを作成します(「システム」->「ネームスペース」)。



指定されたパスで、「マネージャー」はコンポーネントの「コントローラー」を検索します。 MVCパターンに精通している場合、「コントローラー」の概念はよく知られています。

2. [システム]-> [アクション]に移動します。 「myextra」名前空間をクリックして、「ここにアクションを作成」を選択します。 「コントローラー」の行に、コントローラーのPHPファイルの名前を記述します。これは、前に指定したフォルダーにあります。 たとえば、「index」(index.php)。

3.ここで、メインメニューにアイテムを作成します。 「トップメニュー」ブロックの「コンポーネント」項目を右クリックし、「ここにメニュー項目を作成」を選択します。



4.より複雑なアプリケーションでは、すべてのコントローラーを個別のフォルダー「コントローラー」に入れる必要があります。 index.phpコントローラーの内容は次のとおりです。



 <?php $corePath = MODX_CORE_PATH.'components/myextra/'; $assetsUrl = MODX_BASE_URL.'assets/components/myextra/'; $controllersPath = $corePath.'controllers/'; $connectorUrl = $assetsUrl.'connector.php'; $cssUrl = $assetsUrl.'css/'; $jsUrl = $assetsUrl.'js/'; $output .= '<div><h2> </h2></div>'; $output .= '<div id="myextra-main-div"></div>'; return $output;
      
      







実際には、これは推奨されません。 モデルなどを作成する必要があります。 (これについては次のパートで詳しく説明します)。 Smartyテンプレートエンジンを使用できます。



 $title = ' '; //    $modx->smarty->assign('title', $title); //  return $modx->smarty->fetch($corePath.'templates/main.tpl');
      
      







PHPをテンプレートエンジンとして使用できます(テンプレートは別のファイルに移動する必要があります)。 または、ExtJSをフルに活用できます。 値のテーブル(Ext.grid.GridPanel)を出力する例を次に示します。



コア/コンポーネント/ myextra / index.php:



 <?php $corePath = MODX_CORE_PATH.'components/myextra/'; $assetsUrl = MODX_BASE_URL.'assets/components/myextra/'; $controllersPath = $corePath.'controllers/'; $connectorUrl = $assetsUrl.'connector.php'; $cssUrl = $assetsUrl.'css/'; $jsUrl = $assetsUrl.'js/'; //   HEAD $modx->regClientStartupHTMLBlock('<script type="text/javascript"> var myextra = {}; myextra.connector_url = "'.$connectorUrl.'"; </script>'); $modx->regClientStartupScript($jsUrl.'datagrid.js'); //  grid` $output .= '<h2> </h2>'; $output .= '<div id="myextra-main-div"></div>'; return $output;
      
      







アセット/コンポーネント/ myextra / js / datagrid.js:



 Ext.onReady(function(){ //   var store = new Ext.data.JsonStore({ url: myextra.connector_url, //   root: 'object.data', //JSON     totalProperty: 'object.total', //    idProperty: 'orderid', remoteSort: false, prettyUrls: false, fields: [ {name: 0}, {name: 1, type: 'int'}, {name: 2, type: 'float'}, {name: 3, type: 'int'} ] }); store.setDefaultSort(3, 'desc'); //   var grid = new Ext.grid.GridPanel({ store: store, columns: [ {header: " 1", width: 100, sortable: true, dataIndex: 0}, {header: " 2", width: 100, sortable: true, dataIndex: 1}, {header: " 3", width: 100, sortable: true, dataIndex: 2}, {header: " 4", width: 100, sortable: true, dataIndex: 3} ], renderTo:'myextra-main-div', //DIV     width:400, autoHeight: true, loadMask: true, bbar: new Ext.PagingToolbar({ pageSize: 5, //   store: store, //  displayInfo: true, displayMsg: ' {0} - {1}  {2}', emptyMsg: "  " }) }); //  store.load({params:{ action: 'mgr/datalist', // ("") start:0, limit:5 } }); });
      
      







資産/コンポーネント/ myextra / connector.php:



 <?php /** * Myextra Connector * * @package myextra */ require_once dirname(dirname(dirname(dirname(__FILE__)))).'/config.core.php'; require_once MODX_CORE_PATH.'config/'.MODX_CONFIG_KEY.'.inc.php'; require_once MODX_CONNECTORS_PATH.'index.php'; /* handle request */ $modx->request->handleRequest(array( 'processors_path' => $modx->getOption( 'core_path' ) . 'components/myextra/processors/', 'location' => '' ));
      
      







コア/コンポーネント/ myextra /プロセッサー/ mgr / datalist.php:



 <?php $start = $scriptProperties['start']; //   $limit = $scriptProperties['limit']; //   $total = 50; $page = $start+1; //  ""  mysql- $limit_on_page = $total-($total-($page*$limit)); $outputArray = array(); for($i=$start*$limit;$i<$limit_on_page;$i++){ $outputArray[] = array(' '.($i+1),2,3,4); } $outputArray = array( 'total'=>$total, 'limit_on_page'=>$limit_on_page, 'data'=>$outputArray ); return $modx->error->success('',$outputArray);
      
      







その結果、次のようなタブレットが得られます。





ExtJSを学ぶのはまったく難しいことではありませんでした。 主な欲求。 それは本当に多くの時間を節約します。



MODx Revolutionのドキュメントはまだ非常に貧弱です。 情報のかなりの部分をソースで検索する必要があります。 おそらくあなたの助けがあれば、この状況がすぐに変わることを願っています。



最初の部分の終わり。



この部分から、MODx Revolutionは開発の点でEvolutionよりもそれほど複雑ではなく、開発者にとっては桁違いに多くの機会があることを誰もが理解していると思います。



All Articles