CMS LiveStreetのブロックシステム


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_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 }


それだけです! ご覧のとおり、回路はシンプルで柔軟です。

ご清聴ありがとうございました!

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


All Articles