MODx Revolutionのユーザーテーブル

画像 この記事では、次の問題を分析します。

  1. MODx Revolution用のカスタムテーブルを作成します。
  2. xPDO用のXMLスキーマおよびphpクラスファイルの生成。
  3. ユーザーテーブルを操作します。




EvolutionからRevolutionへの移行における最大の課題の1つは、xPDO IMHOです。 結局のところ、以前のように簡単でした。phpMyAdminを介して筋肉に登り、プレートを作成し、$ modx-> dbを介して純粋なSQLクエリを送信することで作業します。

現在、データベースへの変更は、テーブルの完全な削除などを除いて、$ modxを気にしません。 xPDOとMODxはどのように関連しているのですか(正確には$ modxです)。

MODx Revolutionでユーザーテーブルを操作することの難しさは、多くのプログラマにとって大きな障害です。

しかし、実際には、すべてがそれほど複雑ではありません。

アルゴリズム全体は、以下の3つの単語で考慮されます。

  1. また、phpMyAdmin(または別の便利なツール)を使用して、必要なテーブルを作成します
  2. 以下のコードを使用して、必要なxPDOファイルを生成します
  3. $ modx-> addPackage()メソッドを使用して、新しいクラスを適切な場所にロードし、メソッド$ modx-> getObject()、$ modx-> getCollection()などですでにテーブルを操作しています。




そのため、ファイルを生成するために必要なコード( ここのソース):



<?php











/*******************************************************/







/* */







/*******************************************************/









// . $modx->addPackage()

<br>





$obj = 'program' ;









/*

. , .

, xPDO ,

, .

*/

<br>





$tablePrefix= 'modx_program_' ;









// , XML-







// $modx->addPackage();

<br>





$Path = dirname(__FILE__). '/model/' ;









// -

<br>

$Schema = $Path. '/' .$obj. '.mysql.schema.xml' ;









/*******************************************************/





<br>

// -

<br>

require_once dirname(dirname(dirname(__FILE__))). '/core/config/config.inc.php' ;









// MODx

<br>

include_once MODX_CORE_PATH . 'model/modx/modx.class.php' ;









// MODx

<br>

$modx= new modX();









// ,

<br>

// $modx->initialize('mgr');









//







//

<br>

$modx->setLogLevel(modX::LOG_LEVEL_INFO);

<br>

$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML' );









// !!! !

<br>

// -

<br>

$modx->addPackage( 'transport.modPackageBuilder' , '' , false , true );









// (MySQL / MsSQL ..)

<br>

$manager = $modx->getManager();









// -

<br>

$generator = $manager->getGenerator();











// -XML

<br>

// /xpdo/om/mysql/xpdogenerator.class.php


<br>

// public function writeSchema($schemaFile, $package= '', $baseClass= '', $tablePrefix= '', $restrictPrefix= false)

<br>

// $tablePrefix - , , .


<br>

// $restrictPrefix - true,


<br>

$xml= $generator->writeSchema($Schema, $obj, 'xPDOObject' , $tablePrefix ,$restrictPrefix= true );









// (php) xml

<br>

$generator->parseSchema($Schema, $Path);



<br>

<br>

print "<br /><br />" ;












このファイルをサーバーにアップロードし、MODx configへのパスを正しく設定し、生成されたファイルが作成されるディレクトリを設定します。 ブラウザからファイルにアクセスします。 その結果、指定されたフォルダーにxmlファイルを作成する必要があります。このフォルダーには、テーブルとphpファイルが記述されます。

これらのファイルは、本当に必要な場合は、新しいクラスを保存することにした別のフォルダーに移動できます。 将来、これらのファイルはテーブルを操作するために常に必要になります。



これで、テーブルを操作できます。 xPDOとXMLスキーマとの相互作用のメカニズムをよりよく理解し、ジェネレーターファイルに記述されているものと出力に含まれるオブジェクトを理解するために、この問題についてメモします。 正直なところ、最初は、それなしでは、単に方法がありませんでした...



1.パッケージを接続し、回路にクエリを実行する





1.1テーブルからレコードを取得する



最初に行うことは、回路を参照するために一般的に必要なものを把握することです。 これを行うには、XMLファイルを調べます。

作成した回路のメインブロックは次のとおりです。



< model package ="testtbl" baseClass ="xPDOObject" platform ="mysql" defaultEngine ="MyISAM" version ="1.1" >

< object class ="Tbl" table ="tbl" extends ="xPDOObject" >










ここで必要な最も基本的なことは次のとおりです。

1。
< model package="testtbl"



一般にどのパッケージをロードする必要があるかを知るには、package属性の値が必要です。 この場合、testtblです。 パッケージは次のように呼び出します。



$modx->addPackage( $package, $path, $prefix);

// !!! addPackage , , .








パラメータを慎重に検討してください。

$パッケージ 。 パッケージの名前。 私たちのケースでは、単にtesttbl

$パス 。 パッケージディレクトリへのパス(XMLファイルと、すべてのPHPファイルが存在するオブジェクトの名前のフォルダーが含まれる)

$プレフィックス 。 スキームの作成時にデフォルト以外のプレフィックスが指定された場合、指定する必要があります。



必要なプレフィックスを正確に決定する方法には、もう1つの小さなトリックがあります。

式: $ prefix = $ fullTableName-$ tableName;

ここで、 $ fullTableNameは、アクセスしているデータベーステーブルのフルネームです。

$ tableName -XMLファイルの<objectタグのtable属性の値



私たちは要求を満たします:



$result = $modx->getCollection( 'Tbl' );

foreach ($result as $row){

print “<br />Next:”. $row-> get ('columnName');

}








1.2テーブルに新しいレコードを作成する





private static function testCreateRows(){



$pkg = 'testtbl' ;





$modx->addPackage( 'testtbl' , $Path , 'modx_kl_test' )) ;



$row = $modx->newObject( 'Tbl' );

$row->fromArray(array(

'id' => 5

));

$row->save();



return ;

}










すべてのようです。 それが明確でない場合は、お尋ねください。



All Articles