
LiveStreetはハブのすばらしいお気に入りのシステムです ただし、その助けを借りて作成されたサイトに目を通すと、それらのほとんどが標準テンプレートの2つの列を継承していることに気付くのは簡単です。
しかし、LSはシンプルでありながら機能的なブロックシステムを誇っています。 サイトの所有者が使用しないのはなぜですか? おそらく、これはドキュメントが欠落しているためです。
これはあなたの助けを借りて今日私であり、それを修正しようとします。
始めましょう
例を使用してブロックシステムについて説明しようとします。 次のような単純なテストパターンの概要を説明します。

など:
< div class = "container" >
< div class = "header" >
< / div >
< div class = "content" >
< div class = "leftside" >
< / div >
< div class = "maincontent" > < / / div >
< / div >
< div class = "サブコンテンツ" >
< / div >
< div class = "footer" > < / / div >
< / div >
ブロッククラス
まず、ブロックのクラスを作成します。これは、ブロックシステムクラスを継承し、Exec()メソッドを実装する必要があります。
Blockクラスを見てみると、コンストラクタを介してブロックパラメータのみを受け入れ、$ aParamsプロパティに書き込み、__ call()ラッパーを介してモジュールメソッドを呼び出すことができることがわかります。
ここで、中央ブロックの1つのコードを示します。 最新のトピックを表示します。
< ? php
Blocklastはブロックを拡張します
{
パブリック関数Exec ( )
{
$ oUser = $ this- > User_GetUserCurrent ( ) ;
if ( $ oUser ) {
$ aTopics = $ this- > Topics_GetLastTopicsByUserId ( $ oUser- > getId ( ) 、 60 * 60 * 24 ) ;
//競合を防ぐために、ローカルビューオブジェクトを作成します
$ oViewer = $ this- > Viewer_GetLocalViewer ( ) ;
$ sTopicsLast = $ oViewer- > Fetch ( 'block.topics_last.tpl' ) ;
//フォームのグローバルオブジェクトにデータを渡します
$ this- > Viewer_Assign ( 'sTopicsLast' 、$ sTopicsLast ) ;
}
}
}
構成
私の好きな部分。 標準のLiveStreet構成を使用して、ブロックの出力を柔軟に構成できます。 例を挙げます。
//前の段落で作成したブロック
$ config [ 'block' ] [ 'rule_topic' ] = array (
'path' =>配列(
'___ path.root.web ___ / blog / * $' 、
) 、
'アクション' =>配列(
'index' =>配列( 'blog' ) 、
「新しい」
) 、
'blocks' =>配列(
'central' =>配列(
'last' =>配列( 'priority' => 100 、 'params' => array ( ) )
)
) 、
'clear' => false 、
) ;
//後で説明する別のブロック
$ config [ 'block' ] [ 'rule_user' ] = array (
'path' =>配列(
'___ path.root.web ___ / profile / * $' 、
'___ path.root.web ___ / settings / * $'
) 、
'アクション' =>配列( ) 、
'blocks' =>配列(
'upper' =>配列(
'block.user.tpl'
)
)
) ;
ご覧のとおり、ブロックの構成はかなり簡単な作業です。 パラメータの名前はそれ自体を物語っているので、長い間それらを理解する必要はありません。
- path-キーにはテンプレートの配列が含まれます。 現在のページのアドレスがテンプレートと一致する場合、ブロックが表示されます。
いくつかのメモ:
- パスに記述されているルールは、構成アクションキーが渡されない場合、または現在のアクションが見つからない場合にのみチェックされます。
- テンプレートの準備中の記号「*」は、「[\ w \-] +」に置き換えられます。 スラッシュ文字「/」はエスケープされます。
「___ path.root.web ___」に置き換えられるものは、あなたが推測したと思います。 検証前にテンプレートでこれ以上のアクションは実行されません。
- パスに記述されているルールは、構成アクションキーが渡されない場合、または現在のアクションが見つからない場合にのみチェックされます。
- action-ブロックが追加されるアクションのリスト。
最初のブロックの例は、配列の要素自体が、選択したアクションのどのイベントがルールに適用されるかを指定する配列になることも示しています。
設定キーにアクションキーを渡さないと、PHPは通知ペアを生成します。
したがって、パスキーを使用してブロックの動作全体を定義した場合、空の配列を渡すだけで済みます。
- blocks-出力用のブロックを定義します。
ブロックのクラス名だけでなく、ブロックテンプレート* .tplもブロック配列で渡すことができることに注意してください。 これは便利です。 数行のテキストを配置するだけの場合(上記の構成では、 最後のブロックは中央ブロックグループに属し、 上部グループにはblock.user.tplテンプレートファイルで指定されたブロックが含まれると判断します)。
さらに、ブロック出力の優先度を設定し、パラメーターを呼び出すことができます(これらのパラメーターはブロックコンストラクターに渡され、$ aParamsプロパティに書き込まれます)。
- clear-キーがtrueに設定されると、現在のグループ(この場合はcentral )に既に追加されているすべてのブロックがそこから削除されます。
模様
最も簡単なステップ。 システムは、_path_to_pattern__ / block._ block_name_.tplでブロックのテンプレートを自動的に検索します
トピックブロックでは、$ sTopicsLast変数をテンプレートに渡しました。 持っていくだけ
< div class = "最後のトピックをブロック" >
< div class = "topics" >
{ $ sTopicsLast }
< / div >
< / div >
構成で定義された2番目のブロックについては、block.user.tplファイルに単純なテンプレートも作成します
< div class = "hello-user" >
こんにちは{ $ oUserCurrent- > getLogin ( ) }
< / div >
記事の冒頭で引用したテンプレートに、ブロックの出力を追加するだけです。 また、作成したブロックの例
< div class = "container" >
< div class = "header" >
< div class = "upper" >
{ファイルブロックを含めます。 tpl sGroup = 'upper' }
< / div >
< / div >
< div class = "content" >
< div class = "leftside" >
{ファイルサイドバーを含める。 tpl }
< / div >
< div class = "maincontent" > < / / div >
< / div >
< div class = "サブコンテンツ" >
{ファイルブロックを含めます。 tpl sGroup = 'central' }
< / div >
< div class = "footer" > < / / div >
< / div >
最後に、blocks.tplファイル
{ isset ( $ aBlocks。$ sGroup )の場合 }
{ foreach from = $ aBlocks。$ sGroup item = aBlock }
{ $ aBlockの場合 。 タイプ == 'ブロック' }
{ insert name = "block" block = $ aBlock。 name params = $ aBlock。 パラメータ }
{ / if }
{ $ aBlockの場合 。 タイプ == 'テンプレート' }
{ include file = $ aBlock。 name params = $ aBlock。 パラメータ }
{ / if }
{ / foreach }
{ / if }
それだけです! ご覧のとおり、回路はシンプルで柔軟です。
ご清聴ありがとうございました!