PHPShop.CMS Free用のモジュールの作成-つまずき(パート1)

PHPShop.CMS Freeシステムのユーザーと通信し、同じ「レーキ」でそれらを取得することで、役に立つヒントを書くように促されました。

テンプレートエンジン


テンプレート関数を使用するための便利なヒント。

セットでのトリック()

set()メソッドは、テンプレートで使用するテンプレート変数をvar @として割り当てます。次に例を示します。
$var = "  "; $this->set('my_var',$var); 

そのタイプ@ my_var @をテンプレートtplファイルに挿入すると、サイトに「We love Habr」というフレーズを表示できます。 多くの場合、 formgeneratorcommentなどのモジュールでは、変数のインターセプトと変更が使用されます。 フック関数でモデル$ this-> set( 'my_var'、$ var)を使用する場合、変数の値を完全に書き換えます。この例では、ページのコンテンツを書き換えます。 すべては問題ありませんが、ページのコンテンツをインターセプトするモジュールを1つだけ有効にし、さらに多くのモジュールがある場合、新しいモジュールはそれぞれ他のモジュールの出力を上書きします。 そのような場合、trueに設定されている$ this-> setメソッドの3番目の引数が役立ちます。 この引数を使用すると、変数を書き換えるのではなく、補足することができ、モジュールの作業の結果(フォームとコメントの出力)を順番に表示できます。

解決策:
 $this->set('my_var',$var,true); 

モジュール内のParseTemplateReturn()

モジュールがconfig.iniモジュールで説明されているこのモジュールのテンプレートを使用する場合、次の形式のレコード:
 $comment=ParseTemplateReturn($GLOBALS['SysValue']['templates']['comment']['comment_content']); 

空の結果が表示されます。 モジュールでグローバルテンプレート関数ParseTemplateReturn()を使用するには、2番目の引数trueを指定する必要があります。これにより、一般的なphpshop / templates /からではなく、モジュールフォルダーからテンプレートファイルを読み取るモードになります。

解決策:
 ParseTemplateReturn($GLOBALS['SysValue']['templates']['comment']['comment_content'],true); 

テンプレートでのPHPの使用

テンプレートエンジンを使用すると、php関数を使用できます。 挿入フォーマット:
 @php ... php@ 

エラーを回避するために、phpコンパイラは「シングル」の代わりに二重引用符を使用します。次に例を示します。
 @php echo "  !"; php@ 


DBを使用する


データベースアクセス関数の使用に関する有用なヒント。
モジュール設定のクイック選択

modulename_systemsデータベースに保存されているモジュール設定を取得するには、非常に優れた短い方法があります。
 //   PHPShopObj::loadClass("array"); class PHPShopCommentArray extends PHPShopArray { function PHPShopCommentArray() { $this->objType=3; $this->objBase=$GLOBALS['SysValue']['base']['comment']['comment_system']; parent::PHPShopArray("enabled","flag","other"); } } 

このレコードでは、データを取得するデータベースの名前を指定する必要があります。たとえば、
 $this->objBase=$GLOBALS['SysValue']['base']['comment']['comment_system']; 

必要なフィールド名をコンマでリストします
 parent::PHPShopArray("enabled","flag","other"); 

このデータにアクセスするには、次を使用します。
 $PHPShopCommentArray = new PHPShopCommentArray(); $enabled = $PHPShopCommentArray->getParam('enabled'); 


ORMの複雑なクエリ

MySQLでの作業には、 PHPShopOrmが使用されます。 典型的なサンプルの例は次のとおりです。
 $data=$PHPShopOrm->select(array('id','name'),array('id'=>'=10'),array('order'=>'id DESC'),array('limit'=>1000)); if(is_array($data)) foreach($data as $row){ .... } 

これにより、クエリが簡素化および標準化されますが、テーブルを結合して複雑な選択を実行する必要がある場合はどうでしょうか? このような場合、$ PHPShopOrm-> query()メソッドが使用されます。次に例を示します。
 $result = $PHPShopOrm->query('SELECT a.*, b.login FROM '.$GLOBALS['SysValue']['base']['comment']['comment_log'].' AS a JOIN '.$GLOBALS['SysValue']['base']['users']['users_base'].' AS b ON a.user_id = b.id WHERE a.page="'.$page.'" order by a.id desc'); while($row = mysql_fetch_array($result)) { ..... } 

多次元select()の結果を伴うハッシュ

頻繁な「サイド」は、$ PHPShopOrm-> select()をフェッチするとき、DB 1でレコードが1次元配列を表示する条件、さらに多ければ多次元配列を表示するときに、開発者の邪魔になります。 このような不確実性を回避するために、引数配列( 'limit' => 1)が使用されます。この配列では、常に1次元であり、次の形式のレコードを処理します。
 $data=$PHPShopOrm->select(array('id','name'),array('id'=>'=10'),array('order'=>'id DESC'),array('limit'=>1000)); if(is_array($data)) { .... } 

複数のフィールドへの結果の明示的な素因の場合、明示的な制限指示配列( 'limit' => 1000)の記録形式が使用されます。
 $data=$PHPShopOrm->select(array('id','name'),array('id'=>'=10'),array('order'=>'id DESC'),array('limit'=>1000)); if(is_array($data)) foreach($data as $row){ .... } 


ソースwiki.phpshopcms.ru

UPD: パート2

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


All Articles