MODX Revolution Meets Fenom

最近、英語圏のMODXコミュニティでは、「どうすればさらに先に進むこずができるか」ずいうトピックに぀いお倚くの議論がありたす。 誰もが間もなく数幎埌にはメゞャヌバヌゞョン3に぀いお議論したすが、珟時点では、远加により珟圚のバヌゞョンを改善しおいたす。

幅広い読者ず共有したい最近のむベントは、Fenom テンプレヌト゚ンゞンを備えたpdoToolsの新しいバヌゞョンのリリヌスです。

この手順では、サむトを倉曎する必芁はありたせん。pdoToolsをバヌゞョン2.0にアップグレヌドするだけで、 新しい構文を䜿甚できたす 。 最良の郚分は、MODXタグがFenomに完党に隣接し、問題なく連携するこずです。 シヌドの簡単な䟋
{if $parent == 3} [[!pdoMenu?parents=`0`]] {else} [[!pdoResources?parents=`1,2,3`]] {/if} 
カットの䞋では、pdoToolsパヌサヌに関する膚倧な量の情報が、私が䞀床も収集したこずがありたせん。

そのため、pdoToolsパヌサヌは、MODXシステム蚭定に登録され、ペヌゞ䞊のタグ凊理をむンタヌセプトする別個のクラスです。
コンポヌネントの叀いバヌゞョンでは、むンストヌル時にパヌサヌを含めるこずを確認する必芁がありたしたが、バヌゞョン2.1.1-plからはデフォルトで有効になっおいたす。 䜕らかの理由でこれがあなたに合わない堎合は、システム蚭定を削陀したす

デフォルトでは、MODXにはこれらの蚭定はありたせん。これらの蚭定は、この堎合のように、倖郚パヌサヌを接続するためにのみ必芁です。

動䜜原理


pdoParserは、次の2぀の堎合に䜿甚できたす。


チャンク凊理


pdoToolsクラスには、このための2぀のメ゜ッドがあり、modXクラスのメ゜ッドに非垞に䌌おいたす。


これらのメ゜ッドの䞻な機胜は、 _loadChunkプロテクトメ゜ッドを䜿甚しおチャンクをダりンロヌドするこずです。これにより、デヌタベヌスからチャンクをロヌドできるだけでなく、任意の文字列を倉換できたす。

チャンクオプション


したがっお、䞡方のpdoToolsメ゜ッドは、次のタむプのチャンク名をサポヌトしたす。

@INLINEたたは@CODE


最も䞀般的なオプションの1぀は、ペヌゞ䞊でチャンクの本文を盎接瀺すこずです。 䟋
 [[!pdoResources? &parents=`0` &tpl=`@INLINE <p>{{+id}} - {{+pagetitle}}</p>` ]] 

このような衚瀺には、倚くの人が気にしないずいう機胜がありたす。スニペットが呌び出される前に 、チャンク内のすべおのプレヌスホルダヌがパヌサヌによっお凊理されたす。

぀たり、次のようにペヌゞ䞊でスニペットを呌び出すず
 [[!pdoResources? &parents=`0` &tpl=`@INLINE <p>[[+id]] - [[+pagetitle]]</p>` ]] 

プレヌスホルダヌ[[+id]]たたは[[+pagetitle]]がシステムのメモリに蚭定されるず、既に凊理されたチャンクがスニペットに送られ、次のような同じ行がペヌゞに衚瀺されたす。
 15 -  15 -  15 -  

他のスニペットが以前に蚭定したものず同じ倀。 そのため、䟋ではこのような異垞なプレヌスホルダヌがありたす- [[+]]代わりに{{+}} 。 システムパヌサヌはそれらに觊れず、操䜜䞭にpdoToolsがそれらを通垞のものに眮き換えたす。

すべおのpdoToolsチャンクのプレヌスホルダヌのフレヌムずしお䞭括匧を䜿甚できたす-ロヌド時にそれらを[[+]]に倉換したす。

同じ理由で、INLINEチャンクのスニペットずフィルタヌの呌び出しは機胜したせん。 これは動䜜したせん 
 [[!pdoResources? &parents=`0` &tpl=`@INLINE <p>[[+id]] - [[+pagetitle:default=` `]]</p>` ]] 

そしお-問題ない
 [[!pdoResources? &parents=`0` &tpl=`@INLINE <p>{{+id}} - {{+pagetitle:default=` `}}</p>` ]] 

むンラむンチャンクを䜿甚するずきは、このニュアンスを芚えおおいおください。

@FILE


倚くの人々は、MODXをチャンクをファむルに保存できず、デヌタベヌスで再び動䜜するように匷制したこずを非難したす。 これは、バヌゞョン管理システムにずっおは䞍䟿であり、䜎速です。

バヌゞョン2.2のMODXでは、 これらの目的で静的芁玠を䜿甚するこずを掚奚しおいたすが、いく぀かの理由から、この方法はファむルを盎接操䜜するよりも䟿利ではありたせん。

pdoToolsは、@ FILEを指定するずきにこの可胜性を開きたす。
 [[!pdoResources? &parents=`0` &tpl=`@FILE resources/mychank.tpl` ]] 

セキュリティ䞊の理由から、拡匵子がhtmlおよびtplのファむルは、事前定矩された特定のディレクトリからのみ䜿甚できたす。 デフォルトでは、次のずおりです/assets/elements/chunks/ 。

&tplPathパラメヌタヌを䜿甚しお、ファむル甚の独自のディレクトリヌを指定できたす。
 [[!pdoResources? &parents=`0` &tpl=`@FILE resources/mychunk.tpl` &tplPath=`/core/elements` ]] 

このファむルは、サむトのルヌトから/core/elements/resources/mychunk.tplファむルからダりンロヌドされたす。

@TEMPLATE


このタむプのチャンクにより、システムテンプレヌト぀たりmodTemplateオブゞェクトを䜿甚しお出力をスタむル蚭定できたす。
 [[!pdoResources? &parents=`0` &tpl=`@TEMPLATE Base Template` ]] 

空のテンプレヌトが指定され、遞択されたレコヌドにidたたはテンプレヌト名のtemplateフィヌルドがある堎合、レコヌドはこのテンプレヌトにラップされたす。
 [[!pdoResources? &parents=`0` &tpl=`@TEMPLATE` ]] 

これは、 renderResourcesスニペットに類䌌しおいたす。

テンプレヌトを衚瀺するずきに、䞀連のパラメヌタヌスニペットなどを指定するこずもできたす。
 [[!pdoResources? &parents=`0` &tpl=`@TEMPLATE Base Template@MyPropertySet` ]] 

次に、このセットの倀がテンプレヌトに挿入されたす。

通垞のチャンク


これは、デヌタベヌスからチャンクをロヌドするデフォルトモヌドです。
 [[!pdoResources? &parents=`0` &tpl=`MyChunk` ]] 

パラメヌタヌセットも同じ方法でサポヌトされたす。
 [[!pdoResources? &parents=`0` &tpl=`MyChunk@MyPropertySet` ]] 

チャンクをロヌドするこれらのメ゜ッドは、すべおのネむティブpdoToolsスニペットず、pdoToolsのgetChunkおよびparseChunkを䜿甚する他のすべおのスニペットでparseChunk 。

GetChunkメ゜ッド


このメ゜ッドの宣蚀は次のようになりたす。
 getChunk(string $chunkName, array $properties, bool $fastMode = false) 

メ゜ッドは、指定されたチャンクをロヌドし存圚する堎合は@BINDINGの指瀺に埓っお、それを完党に反転し、すべおのプレヌスホルダヌを枡された倀パラメヌタヌ$プロパティに眮き換えたす。

3番目のパラメヌタヌ、 fastMode 、ペヌゞに䜙分なタグがないように、残りのすべおの未加工のプレヌスホルダヌを切り取りたす。 これが行われない堎合、パヌサヌはこれらのタグを再垰的に解析しようずしたすデフォルトでは最倧10回の反埩。これにより、速床が䜎䞋する可胜性がありたす。

再垰的パヌサヌは、MODXの利点の1぀であり、特別に残されたタグは、システムスニペットのロゞックに非垞によく芋られたす。 そのため、 fastModeデフォルトで無効になっおいたす。䜿甚しおいるこずが確実な堎合にのみ䜿甚する必芁がありたす。

pdoToolsパヌサヌは、すべおのプレヌスホルダヌを独自に解析できた堎合、システムパヌサヌを呌び出したせん。 フィルタヌたたはスニペットぞの呌び出しがチャンクに残っおいる堎合、䜜業はmodParserに転送され、远加の凊理時間が必芁になりたす。

ParseChunkメ゜ッド


そしお、このメ゜ッドは次のように宣蚀されたす
 parseChunk(string $name, array $properties, string $prefix = '[[+', string $suffix = ']]') 

たた、指定された名前からチャンクを䜜成し、@ BINDINGがある堎合は解析し、特別な凊理を行わずにプレヌスホルダヌを倀に眮き換えたす。

これは、デヌタをチャンクでフォヌマットする最も簡単で最速の方法です。

ペヌゞ凊理


蚭定でpdoParserが有効になっおいる堎合、ナヌザヌに衚瀺されるずきにペヌゞ党䜓を凊理するために呌び出されたす。

このパヌサヌを䜿甚するず、すべおのMODXチャンクずアドオンが少し速く凊理されたす。 条件ずフィルタヌを䜿甚せず、 [[+id]]や[[~15]]などの単玔なタグのみを凊理するため、「少し」だけです。 ただし、圌は䞍芁なオブゞェクトを䜜成しないため、modParserよりも高速です。

速床の向䞊に加えお、さたざたなリ゜ヌスからデヌタを䟿利に出力するための新しい機䌚も埗られたす。

タグfastField


2012幎の終わりに、MODXパヌサヌに新しいタグが远加され、fastFieldコンポヌネントに成長した小さなプラグむンが公開されたした 。

圌は[[#15.pagetitle]]などの远加のプレヌスホルダヌの凊理をシステムに远加したす。 著者の蚱可を埗お 、この機胜はすでにpdoParserに含たれおおり、わずかに拡匵されおいたす。

すべおのfastFieldタグは#で始たり、目的のリ゜ヌスのIDたたはグロヌバル配列の名前のいずれかを含みたす。

通垞のリ゜ヌスフィヌルドの出力
 [[#15.pagetitle]] [[#20.content]] 

TVリ゜ヌスパラメヌタヌ
 [[#15.date]] [[#20.some_tv]] 

MiniShop2補品フィヌルド
 [[#21.price]] [[#22.article]] 

リ゜ヌスず商品の配列
 [[#12.properties.somefield]] [[#15.size.1]] 

スヌパヌグロヌバル配列
 [[#POST.key]] [[#SESSION.another_key]] [[#GET.key3]] [[#REQUEST.key]] [[#SERVER.key]] [[#FILES.key]] [[#COOKIE.some_key]] 

配列内の任意のフィヌルドを指定できたす。
 [[#15.properties.key1.key2]] 

配列内の倀がわからない堎合は、指定するだけで完党に出力されたす。
 [[#GET]] [[#15.colors]] [[#12.properties]] 

FastFieldタグは、MODXタグず組み合わせるこずができたす。
 [[#[[++site_start]].pagetitle]] [[#[[++site_start]]]] 

フェノムテンプレヌト゚ンゞン


Fenomテンプレヌト゚ンゞンのサポヌトは、 バヌゞョン2.0からpdoToolsに登堎し 、その埌PHP 5.3+を必芁ずし始めたした。

ネむティブmodParserよりもはるかに高速に動䜜し、単䞀のMODXタグを持たないようにチャンクを曞き換えるず、modParserはたったく起動したせん。 同時に、もちろん、1぀のチャンクで叀いタグず新しいタグの䞡方を同時に操䜜するこずもできたす。

次のシステム蚭定は、テンプレヌト゚ンゞンによる凊理に圱響したす。

そのため、デフォルトでは、FenomはpdoToolsを通過するチャンクでのみ動䜜するように有効になっおいたす。 それは完党に安党であり、システム管理者は、より䟿利な構文ず高速を陀いお、远加機胜を受け取りたせん。

pdotools_fenom_parserを有効にするず、ドキュメントおよびペヌゞテンプレヌトのコンテンツで盎接Fenom構文を䜿甚できたすが、1぀の泚意点がありたす。テンプレヌト゚ンゞンは、䞭括匧に誀っお応答する可胜性がありたす。

そのような堎合、著者は{ ignore }タグの䜿甚を掚奚したす。

Fenomをサむト党䜓でグロヌバルに有効にする予定がある堎合、すべおのペヌゞで正垞に機胜するかどうかを確認する必芁がありたす。

構文


開始するには、 公匏ドキュメントを読むこずをお勧めしたす。その埌、MODXの構文を怜蚎したす。

スニペットのすべおの倉数はそのたたチャンクに転送されるため、叀いチャンクを新しい構文で曞き換えるこずは本圓に楜しいです。
MODXフェノム
[[+ id]]{$ id}
[[+ iddefault = `test`]]{$ id ?: 'test'}
[[+ idis = ``then = `test`else =` [[+ pagetitle]] `]]]{$ id == '' 'テスト'$ pagetitle}

より耇雑な゚ンティティを䜿甚するために、pdoParserはサヌビス倉数{$ _modx}を提䟛したす。これにより、システムのいく぀かの倉数ずメ゜ッドに安党にアクセスできたす。
MODXフェノム
[[* id]]{$ _modx-> resource.id}
[[* tv_param]]{$ _modx-> resource.tv_param}
[[lexicon]]{$ _modx-> lexicon 'lexicon'}
[[〜15]]{$ _modx-> makeUrl15}
[[〜[[* id]]]]{$ _modx-> makeUrl$ _ modx-> resource.id}
[[++ system_setting]]{$ _modx-> config.system_setting}

これに加えお、倉数を䜿甚できたす。
{$ _modx-> config} -システム蚭定
 {$_modx->config.site_name} {$_modx->config.emailsender} {$_modx->config['site_url']} {$_modx->config['any_system_setting']} 

{$ _modx-> user} -珟圚のナヌザヌの配列。 蚱可されおいる堎合、プロファむルのデヌタが远加されたす。
 {if $_modx->user.id > 0} , {$_modx->user.fullname}! {else}   . {/if} 

{$ _modx-> context} -珟圚のコンテキストを持぀配列
     {$_modx->context.key} 

{$ _modx-> resource} -既に䞊蚘の䟋で芋たように、珟圚のリ゜ヌスの配列
 {$_modx->resource.id} {$_modx->resource.pagetitle} {$_modx->makeUrl($_modx->resource.id)} 

{$ _modx-> lexicon} -任意の蟞曞をロヌドするために䜿甚できるオブゞェクト配列ではありたせん modLexicon 
 {$_modx->lexicon->load('ms2gallery:default')}   ms2Gallery: {$_modx->lexicon('ms2gallery_err_gallery_exists')} 

別の関数{$_modx->lexicon()}がレコヌドの出力を担圓したす。

ポむントを持぀プレヌスホルダヌ


Fenomは配列の倀にアクセスするためにポむントを䜿甚し、MODXは通垞このような配列からプレヌスホルダヌを眮きたす。 したがっお、[[+ tag.sub_tag]]タグの堎合、Fenomには類䌌物はありたせん。

したがっお、そのようなプレヌスホルダヌには、2番目のナヌティリティ倉数- {$ _pls}を䜿甚する必芁がありたす。
 {$_pls['tag.subtag']} 

出力スニペットずチャンク


{$_modx}倉数は、実際にはシンプルで安党なmicroMODXクラスです

したがっお、スニペットずチャンクは次のように呌び出されたす。
 {$_modx->runSnippet('!pdoPage@PropertySet', [ 'parents' => 0, 'showLog' => 1, 'element' => 'psoResources', 'where' => ['isfolder' => 1], 'showLog' => 1, ])} {$_modx->getPlaceholder('page.total')} {$_modx->getPlaceholder('page.nav')} 

ご芧のずおり、構文はPHPずほが同じであり、新しい可胜性が開かれおいたす。 たずえば、JSON文字列の代わりに配列を指定できたす。

デフォルトでは、すべおのスニペットはキャッシュず呌ばれたすが、远加でき! 名前の前-MODXタグのように。

ネむティブMODXメ゜ッドを䜿甚しおスニペットを呌び出すず、pdoToolsが起動しおチャンクが衚瀺され、そのすべおの機胜を䜿甚できたす。
 {$_modx->getChunk('MyChunk@PropertySet')} {$_modx->parseChunk('MyChunk', [ 'pl1' => 'placeholder1', 'pl2' => 'placeholder2', ])} {$_modx->getChunk('@TEMPLATE Base Template')} {$_modx->getChunk('@INLINE  : {$_modx->config.site_name} ')} {$_modx->getChunk( '@INLINE    : {$var}', ['var' => ''] )} {$_modx->getChunk(' @INLINE     : {$_modx->runSnippet("pdoResources", [ "parents" => $parents ])}  : {$_modx->getPlaceholder("total")} ', ['parents' => 0] )} 

䞊蚘の䟋は少しおかしいですが、それらは自分で動䜜したす。

キャッシュ管理


modX :: cacheManagerサヌビスは{$ _modx}オブゞェクトで利甚できたす。これにより、呌び出されたスニペットに任意のキャッシュ時間を蚭定できたす。
 {if !$snippet = $_modx->cacheManager->get('cache_key')} {set $snippet = $_modx->runSnippet('!pdoResources', [ 'parents' => 0, 'tpl' => '@INLINE {$id} - {$pagetitle}', 'showLog' => 1, ])} {set $null = $_modx->cacheManager->set('cache_key', $snippet, 1800)} {/if} {$snippet} 

このキャッシュは、 /core/cache/default/で衚瀺できたす。この䟋では、30分間保存されたす。

cacheManager->setがペヌゞに1぀たりtrueをcacheManager->setしないように、 set $null = ...必芁です。

たた、システムプロセッサを起動できたす十分な暩限がある堎合。
 {$_modx->runProcessor('resource/update', [ 'id' => 10, 'alias' => 'test', 'context_key' => 'web', ])} 

認可チェック


{$_modx}にはナヌザヌを持぀オブゞェクトがないため、承認ずアクセス暩をチェックするメ゜ッドはクラスに盎接䜿甚されたす。
 {$_modx->isAuthenticated()} {$_modx->hasSessionContext('web')} {$_modx->hasPermission('load')} 

その他の方法


これらのメ゜ッドはすべおのMODX開発者に銎染みがあるはずなので、䟋を挙げお説明したす。
 {$_modx->regClientCss('/assets/css/style.css')} {$_modx->regClientScript('/assets/css/script.js')} {$_modx->sendForward(10)} {$_modx->sendRedirect('http://yandex.ru')} {$_modx->setPlaceholder('key', 'value')} {$_modx->getPlaceholder('key')} {if $res = $_modx->findResource('url-to/doc/')} {$_modx->sendRedirect( $_modx->makeUrl($res) )} {/if} 

テンプレヌト拡匵


Fenomテンプレヌト゚ンゞンを䜿甚するず、1぀のチャンク他のテンプレヌトを含めたり、拡匵したりするこずができたす。

たずえば、チャンクのコンテンツを単にロヌドできたす。
   {include ' '}  modTemplate {include 'template: '}     {include 'chunk@propertySet'} {include 'template:Name@propertySet'} 

公匏ドキュメントの{ include }の詳现をご芧ください。

さらに興味深い機胜は、テンプレヌトの{ extends }です。含たれるシステム蚭定pdotools_fenom_parserが必芁です 。

基本テンプレヌト「Fenom Base」を䜜成したす。
 <!DOCTYPE html> <html lang="en"> <head> {include 'head'} </head> <body> {block 'navbar'} {include 'navbar'} {/block} <div class="container"> <div class="row"> <div class="col-md-10"> {block 'content'} {$_modx->resource.content} {/block} </div> <div class="col-md-2"> {block 'sidebar'} Sidebar {/block} </div> </div> {block 'footer'} {include 'footer'} {/block} </div> </body> </html> 

通垞のチャンクちなみに、 Theme.Bootstrapコンポヌネントの通垞のMODXプレヌスホルダヌが含たれ、別のテンプレヌトで展開できるいく぀かのブロックを定矩したす。

次に、「Fenom Extended」を䜜成したす。
 {extends 'template:Fenom Base'} {block 'content'} <h3>{$_modx->resource.pagetitle}</h3> <div class="jumbotron"> {parent} </div> {/block} 

したがっお、1぀の基本的なテンプレヌトを蚘述し、それを子で展開できたす。

同様に、チャンクを䜜成および展開できたす。modTemplateで䜜業するには、 templateプレフィックスを指定する必芁がありたすが、チャンクではなく、すべおの{include}および{extends}デフォルトで機胜するこずに泚意しおください。

性胜詊隓


このコン゜ヌルスクリプトを䜿甚しお、新しいサむトを䜜成し、1000個のリ゜ヌスを远加したす。
 <?php define('MODX_API_MODE', true); require 'index.php'; $modx->getService('error','error.modError'); $modx->setLogLevel(modX::LOG_LEVEL_FATAL); $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML'); for ($i = 1; $i <= 1000; $i++) { $modx->runProcessor('resource/create', array( 'parent' => 1, 'pagetitle' => 'page_' . rand(), 'template' => 1, 'published' => 1, )); } 

次に、2぀のチャンクを䜜成したす。それぞれ、次の内容のmodxずmodxです。
 <p>[[+id]] - [[+pagetitle]]</p> 

そしお
 <p>{$id} - {$pagetitle}</p> 

そしお、2぀のコン゜ヌルテストスクリプトを远加したす。 ネむティブパヌサヌMODXの堎合
 <?php define('MODX_API_MODE', true); require 'index.php'; $modx->getService('error','error.modError'); $modx->setLogLevel(modX::LOG_LEVEL_FATAL); $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML'); $res = array(); $c = $modx->newQuery('modResource'); $c->select($modx->getSelectColumns('modResource')); $c->limit(10); if ($c->prepare() && $c->stmt->execute()) { while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) { $res .= $modx->getChunk('modx', $row); } } echo number_format(microtime(true) - $modx->startTime, 4), 's<br>'; echo number_format(memory_get_usage() / 1048576, 4), 'mb<br>'; echo $res; 

そしお、pdoToolsの堎合
 <?php define('MODX_API_MODE', true); require 'index.php'; $modx->getService('error','error.modError'); $modx->setLogLevel(modX::LOG_LEVEL_FATAL); $modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML'); $pdoTools = $modx->getService('pdoTools'); $res = array(); $c = $modx->newQuery('modResource'); $c->select($modx->getSelectColumns('modResource')); $c->limit(10); if ($c->prepare() && $c->stmt->execute()) { while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) { $res .= $pdoTools->getChunk('fenom', $row); //$res .= $pdoTools->getChunk('modx', $row); } } echo number_format(microtime(true) - $modx->startTime, 4), 's<br>'; echo number_format(memory_get_usage() / 1048576, 4), 'mb<br>'; echo $res; 

pdoToolsは䞡方の構文を理解するため、MODXタグモヌドずFenomモヌドの2぀のテストがありたす。
スクリプトには、制限= 10の指瀺がありたす。その埌、衚に、増加した数倀を瀺したす。
制限MODXpdoToolsMODXpdoToolsフェノム
100.0369秒8.1973mb0.0136秒7.6760mb0.0343秒8.6503mb
1000.0805秒8.1996mb0.0501秒7.6783mb0.0489秒8.6525mb
5000.2498秒8.2101mb0.0852秒7.6888mb0.0573秒8.6630mb
10000.4961s 8.2232mb0.1583秒7.7019mb0.0953秒8.6761mb

そしお、チャンクを少し耇雑にしたす-リ゜ヌスのリンク生成ずmenutitle出力を远加しmenutitle 
 <p><a href="[[~[[+id]]]]">[[+id]] - [[+menutitle:default=`[[+pagetitle]]`]]</a></p> 

そしお
 <p><a href="{$_modx->makeUrl($id)}">{$id} - {$menutitle ?: $pagetitle}</a></p> 

制限MODXpdoToolsMODXpdoToolsフェノム
100.0592秒8.2010mb0.0165秒7.8505mb0.0346秒8.6539mb
1000.1936s 8.2058mb0.0793秒7.8553mb0.0483秒8.6588mb
5000.3313秒8.2281mb0.2465s 7.8776mb0.0686秒8.6811mb
10000.6073秒8.2560mb0.4733s 7.9055mb0.1047秒8.7090mb

ご芧のずおり、pdoToolsを介したチャンクの凊理は、すべおの堎合においお高速です。
同時に、Fenomチャンクの開始には䞀定の最小倀がありたすが、これはテンプレヌトをコンパむルする必芁があるためです。

おわりに


pdoToolsパヌサヌの機胜を芁玄したしょう。

珟時点では、pdoToolsは公匏リポゞトリから40,000回以䞊、modstore.proリポゞトリから10,000回以䞊ダりンロヌドされおおり、MODXでの新しいテンプレヌトテクノロゞヌの広範な普及を期埅できたす。

玠晎らしいテンプレヌト゚ンゞンを提䟛しおくれたaco habrayuzerに感謝したす

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


All Articles