QuadBraces III

すべおの人に健康



QuadBracesパヌサヌに関する最初の公開からほが2幎が経過したした。これは、暙準化が必芁な最も単玔なプロゞェクト向けのMODX Evolutionの代替です。 これは、通垞の出版物、ポヌトフォリオ、名刺サむト、ほが静的なペヌゞなどで構成される1ペヌゞにするこずができたす。 それ以来、私は自分の開発を曎新し、コミュニティに気付かれずに、3番目のバヌゞョンにクロヌルしたした。 QuadBracesパヌサヌの珟圚のバヌゞョンには非垞に倚くの倉曎が含たれおいるため、詳现なチュヌトリアルを公開する必芁がありたす。 だから...



タグ



タグハンドラから始めたしょう。 QuadBraces 3では、タグハンドラヌは個別のクラスに配眮されたす。 これで、開発者はパヌサヌ自䜓のコヌドを倉曎せずに、タグタむプを自由に定矩できたす。 これを行うには、QuadBracesTagPrototypeクラスの子孫を䜜成したす。このクラスでは、以䞋を決定する必芁がありたす。





䟋ずしお定数タグハンドラを䜿甚する



class QuadBracesTagConstant extends QuadBracesTagPrototype { protected $_name = 'constant'; protected $_start = '\{\*'; protected $_rstart = '\/'; protected $_finish = '\*\}'; protected $_order = 5; public function main(array $m,$key='') { $v = ''; if (empty($key) || !defined($key)) { $this->_error = 'not found'; } else { $v = constant($key); } return $v; } }
      
      





ええ、確かに-すべおがずおもシンプルです。 私は、昔ながらのプログラマヌずしお、顕埮鏡サむズのファむルを保存する必芁性にひどく怒っおいたす。 しかし、圌らが蚀うように、これは個人的な問題です。



前の出版物を読んでいない人のために。 QuadBracesタグの構文は、すべおのタグタむプで同じです。



  1. 最初の文字シヌケンス。 たずえば、「{{」。
  2. ゚ンティティの識別子。 ラテン文字、数字、「ログ」、ダッシュ、および/たたはドットで構成する必芁がありたす。 たずえば、「my-chunk」。 泚意しおください 識別子のドットは、ネストレベルのセパレヌタヌの圹割を果たしたす。 ぀たり、たずえば、倉数「my.var」は実際にはここに配眮されたす-$ parser-> data ['my'] ['var']。 チャンク、スニペット、テンプレヌトに぀いお-以䞋。
  3. 倚数の拡匵ハンドラヌオプション。 それぞれ、「some_identifier」たたは「some_identifier = `some_data_」ずいう圢匏の構造を衚したすコロンず識別子の間にスペヌスを入れないでください。 ハンドラヌ拡匵機胜は、タグ凊理の最終結果で機胜したす。 ぀たり、たずえば、電話番号を含む倉数を受け取り、人間が読みやすいようにフォヌマットしたした。
  4. MODX構文ずの互換性のために、疑問笊が埌に続く堎合がありたす。
  5. 特定の数の匕数オプション。 各匕数は、 "some_name =` some_value` "ずいう圢匏の構造です。 はい、倉数にも匕数を蚭定できたす。 はい、動䜜したす。 ほずんどの堎合、枡された匕数はロヌカルプレヌスホルダヌで䜿甚されたす。
  6. 文字の最終シヌケンス。 たずえば、「}}」。


おそらく既に理解しおいるように、パヌサヌの3番目のバヌゞョンには、MODX Revolution構文モヌドがありたす。 このモヌドでは、タグは2぀の開き角括匧で始たり、その埌にタグのタむプを決定する特定の文字が続きたす。 タグは垞に2぀の閉じ角括匧で閉じられたす。



特定のチャンクのタグの䟋



 {{news-item? &title=`   ` &date=`15-09-17` &url=`/news/150917.html`}}
      
      





チャンクが次の堎合

 <article> <h3>[+title+]</h3> <span class="date">[+date+]</span> <a href="[+url+]"> </a> </article>
      
      





そしお、最埌に、チャンクの堎所で、それが衚瀺されたす

 <article> <h3>   </h3> <span class="date">15-09-17</span> <a href="/news/150917.html"> </a> </article>
      
      





パずいえば。 Uyutnenkyの゚ディタヌの「゜ヌスコヌド」メニュヌからHTMLアむテムを食べたしたか



すぐに䜿甚できるQuadBracesは、次のタむプのタグをサポヌトしおいたす2぀のモヌドの開始シヌケンスず終了シヌケンスが瀺されおいたす。





パヌサヌの珟圚のバヌゞョンでは、いわゆるパヌサヌオブゞェクトのセットを突き出すこずが可胜です。 リ゜ヌス。 基本的に、これはMODXのリ゜ヌスずほが同じです。 倧たかに蚀うず、デヌタベヌスは最終プロゞェクトのデヌタベヌスに栌玍され、そこにはブログ投皿のある゚ントリが栌玍されたす。 䞻なこずは、URLを䜜成するには、各゚ントリに数倀ID、芪ID、たたはNULLず゚むリアスが含たれおいる必芁があるこずを芚えおおくこずです。 パヌサヌオブゞェクトのリ゜ヌスプロパティを蚭定するず、パヌサヌオブゞェクトのidxプロパティが蚭定されたす。 リ゜ヌスツリヌのブランチのむンデックスを衚したす。 これにより、リ゜ヌスの有限セットの構造を操䜜できたす。 実際、これらすべおのガヌベッゞ機胜を䜿甚するず、リンクタグが機胜したす。



カスタム倉数ハンドラヌは、パヌサヌ倉数をランダムに凊理する䞀皮のマむクロパヌサヌです。 たずえば、パヌサヌ倉数トップメニュヌなどに、次の圢匏のURLを含む配列が含たれおいる堎合



 array( array('url' => '/','title' => ''), array('url' => '/about.html','title' => ' '), array( 'url' => '/news/','title' => '','children' => array( array('url' => '/news/10-09-17.html','title' => '   '), array('url' => '/news/15-09-17.html','title' => '   ') ) ), array('url' => '/contacts.html','title' => ''), );
      
      





それからメニュヌを䜜成できたす。 これを行うには、構造を適切な堎所に配眮するだけです。



 [:menu@top-menu:]
      
      





その代わりに、箇条曞きリストを䜿甚しおメニュヌが衚瀺されたす。 Wayfinderの最高の䌝統では、いわばいわば。



䞀般的に、カスタムハンドラヌに぀いおは、別の蚘事を曞く必芁があるず思いたす。



それずは別に、テンプレヌトの1぀の重芁な機胜、぀たりメタフィヌルドに぀いお。 ほが最初のバヌゞョンから、テンプレヌトコヌドにメタフィヌルドを蚭定する機䌚がありたす。 これらは基本的に、この構造を䜿甚しおテンプレヌト自䜓で定矩された倉数です。



<!-- FIELD:_? [] -->







匕数はパヌサヌタグずほが同じです。 フィヌルドで指定されおいる匕数に関係なく、最終フィヌルドには3぀の属性が含たれたす。





すべおのメタフィヌルドは、パヌサヌのfieldsプロパティを介しおアクセスできたす。



同様に重芁な機胜は、メタ倀です。 somevar倉数がパヌサヌで定矩されおいるず想像しおください。 むンストヌルされたテンプレヌトのメタ倀は、倉数の珟圚の倀をオヌバヌラむドできたす。 メタ倀は蚭蚈によっお決定されたす。



<!-- DATA:_ ` ` -->







テンプレヌトをむンストヌルするず、䞡方ずもテンプレヌトの最終コヌドから削陀されたす。



クラスAPI



クラスプロパティ最も重芁





方法





どこを芋たすか



QuadBracesパヌサヌの最も重芁なプロパティの1぀は、pathsプロパティです。 パヌサヌがチャンク、スニペット、拡匵機胜、テンプレヌトを探す堎所を決定したす。 蚀語システムは少し離れお動䜜したす。 芁玠を怜玢するプロセスでは、パヌサヌは登録されたすべおのパスを順番に怜玢したす。 毎回、怜玢機胜は、芁玠のタむプに応じお、遞択したパスにフォルダヌを远加したす。 チャンク-チャンク、テンプレヌト-テンプレヌト、スニペット-スニペット。 そしお、すでに必芁な芁玠が求められおいたす。 チャンク、スニペット、およびテンプレヌトのキヌのドットが、実際にはディレクトリセパレヌタヌを眮き換えるこずを思い出させおください。



䟋



 $parser->paths = 'D:/projects/mysite/content,D:/repo/templates/default'; $fn = $parser->search('snippet','basis.snipcon');
      
      





実際、この堎合のパヌサヌは次のファむルの存圚を確認したす。



D:/projects/mysite/content/snippets/basis/snipcon.php

D:/repo/templates/default/snippets/basis/snipcon.php








最埌に芋぀かったファむルが返されたす。 蚀語システムがオンになっおいる堎合、蚀語眲名付きのパスが実際に怜玢に远加されたす。 むンストヌルされおいる蚀語がロシア語、぀たり、眲名が「ru」であるずしたす。 したがっお、ファむルのリストは次のずおりです。



D:/projects/mysite/content/snippets/basis/snipcon.php

D:/projects/mysite/content/snippets/basis/ru/snipcon.php

D:/repo/templates/default/snippets/basis/snipcon.php

D:/repo/templates/default/snippets/basis/ru/snipcon.php








他のすべおは、プロパティずメ゜ッドを通じお取埗されたす。



蚀語䜓系



たず、蚀語システムを明瀺的に含める必芁があるこずをすぐに予玄したす。 これは、QuadBracesLangクラスを接続するこずにより行われたす。 これは、メむンクラスを含める前の最も単玔なコヌドで実行されたす。



 define("QUADBRACES_LOCALIZED",true);
      
      





loadLanguageフラグを有効にするこずをお勧めしたす。 その埌、蟞曞が自動的にロヌドされたす。 原則ずしお、デフォルトでは、パヌサヌのパスを蚭定するず、蚀語システムのパスが蚭定されたす。 実際、蚀語システムは、芁玠怜玢゚ンゞンず同じ原理でファむルを怜玢したす。 蚀語システムフォルダのみがlangです。



䟋



 $parser->paths = 'D:/projects/mysite/content,D:/repo/templates/default'; $parser->language = 'ru';
      
      





フォルダヌがスキャンされたす



D:/projects/mysite/content/lang/ru/

D:/repo/templates/default/lang/ru/








これらでは、拡匵子「lng」を持぀すべおのファむルが怜玢されたす。 各ファむルは1行ず぀読み取られたす。 各行には、蚀語キヌ、タむトル、説明、プレヌスホルダヌの4぀の芁玠がありたす。 蚀語キヌは、蚀語タグで䜿甚されるものです。 キャプション-デフォルトの蚀語タグを眮き換えたす。 説明-通垞、ツヌルチップたたはフィヌルドの説明に䜿甚されたす。 プレヌスホルダヌ-ほずんどの堎合、入力芁玠の察応する属性に䜿甚されたす。



むベント



パヌサヌオブゞェクトはむベントをサポヌトしたす。 䞊で曞いたように、ハンドラヌはregisterEventメ゜ッドによっお蚭定されたす。



サポヌトされるむベントどこでも$ pはパヌサヌオブゞェクトです







私は告癜したすが、知らないうちにPHPの1぀の機胜にぶ぀かりたした。 たずえば、templateNotFoundむベントハンドラヌに関数を割り圓お、その䞭にテンプレヌトプロパティを蚭定しようずしおも、䜕も起こりたせん。 これは、PHPオブゞェクトのプロパティのアクセサヌを呌び出すずきの再垰制限によるものです。 ぀たり、同じプロパティのアクセサヌずアクセサヌを介しおプロパティを蚭定するこずはできたせん。 たさか。 「完党に」ずいう蚀葉から。 したがっお、templateNotFoundむベントハンドラヌで404番目を䜜成する堎合は、その内郚でsetTemplateメ゜ッドを呌び出したす。



ハンドラヌ拡匵



すべおのタグは最終倀ハンドラヌをサポヌトしたす。 たずえば、倉数を取埗したしたが、空です。 notemptyハンドラヌを䜿甚するず、このケヌスの出力テキストを蚭定できたす。 䞀郚の拡匵機胜には、远加の「拡匵機胜」がありたす。 たずえば、基瀎ずなるロゞックには「then」および「else」ずいう拡匵子がありたす。



サポヌトされるハンドラヌ





ul / ol拡匵には、2぀の内郚プレヌスホルダヌがありたす。[+クラス+]-芁玠クラス最初、最埌、[+アむテム+]-実際の文字列。 拡匵の堎合、珟圚の反埩番号を含む内郚プレヌスホルダヌ[+むテレヌタヌ+]が䜿甚可胜です。 foreach拡匵の内郚プレヌスホルダヌが利甚可胜です[+ iterator.index +]-珟圚の反埩の䜍眮番号、[+ iterator +]-珟圚のむンデックス。



ワヌクショップ



実際、パヌサヌクラスの操䜜は非垞に簡単です。 基本的な䟋



 <?php require 'quadbraces/parser.php'; $parser = new QuadBracesParser('//__'); $parser->template = 'my-template'; echo $parser->parse(); ?>
      
      





その䞭で、パヌサヌクラスを接続し、テンプレヌトデヌタぞのパスでオブゞェクトを初期化し、テンプレヌトずparsimを蚭定したす。 もちろん、凊理する前に、「蚭定」をパヌサヌ倉数に枡すこずができたす。 そしお、パヌサヌクラスをオンにする前に、䞊蚘のように蚀語システムをオンにしたす。 より実甚的な䟋



 <?php define("QUADBRACES_LOCALIZED",true); require 'quadbraces/parser.php'; $parser = new QuadBracesParser('D:/projects/foo/content/template'); $parser->language = 'ru'; $parser->data = array( 'pagetitle' => '  ', 'date' => '20-09-17', 'image' => 'content/images/flies.jpg' ); $parser->template = 'news.single'; echo $parser->parse(); ?>
      
      





テンプレヌトは、次のファむルで怜玢されたす。



D:/projects/foo/content/template/templates/news/single.html

D:/projects/foo/content/template/templates/news/ru/single.html








総免責事項



チュヌトリアルやドキュメントを曞くこずができないこずをおizeびしたす コミュニティが本圓に興味を持っおいるなら、最も興味深い点はその埌の出版物で明らかにされるでしょう。 質問する-喜んでお答えしたす。 間違いに気づいたら、 ここでgithubに問題を曞いおください 。



All Articles