HOME >  xoops技術報告書トップカテゴリー別記事一覧]  >  Smarty・php  >  SmartyPlugin  >  xugj_blockプラグインの使い方

xugj_blockプラグインの使い方 xugj_blockプラグインの使い方

choromo
2008-5-16 10:22 [5354]
SmartyPlugin
コメント表示部へ コメント  友達に教える 友達に教える  プリンタ用画面 印刷ページ
他のモジュールのブロックを利用して,コンテンツを充実させよう

xugj_blockプラグインの活用法

「xugj_blockプラグイン」とは,他のモジュールのブロックを利用できるようにするプラグインです。テンプレートやコンテンツに書くことができるので,自由なカスタマイズができます。

「xugj_blockプラグイン」の入手法やインストールなど詳しいことは,「GIJOEさんのxugj_blockに関する記事」をご覧ください。

基本構文

<{xugj_block file="☆" func="○" opt="□" item="△"}>
  • ☆:モジュールのブロックphpファイルまでのパスを,modulesから書く。
  • ○:ブロックの表示関数名(末尾が「_show」となっている)
  • □:オプションの指定(ブロックのオプション設定画面と対応している)
  • △:アサインする名前。「block」とすると,テンプレートのコードをそのまま利用できる。

必要な情報の集め方

情報収集のためのキーワードを調べる

  1. 利用したいブロックの設定画面を開く
  2. 一部のモジュールをのぞき,ブロック設定画面に,「このブロックのテンプレートを編集する」があるので,これをクリックすると,テンプレート名が分かる。
  3. xoops_version.phpを開き,先ほどのテンプレート名から先頭の「モジュールディレクトリ名部分+アンダーバー(_)」を除いて検索する。

テンプレート名での検索の例

bulletinの「最新ニュース」ブロック。テンプレート名は「bulletin_block_new.html」。この場合は,「block_new.html」や「_new.html」を検索語とする。

検索結果

$modversion['blocks'][$i]['file']        = "blocks.php";
$modversion['blocks'][$i]['name']        = constant($constpref.'_BNAME4');
$modversion['blocks'][$i]['description'] = constant($constpref.'_BDESC4');
$modversion['blocks'][$i]['show_func']   = "b_bulletin_new_show";
$modversion['blocks'][$i]['edit_func']   = "b_bulletin_new_edit";
$modversion['blocks'][$i]['options']     = "$mydirname|published DESC|10|255|0";
$modversion['blocks'][$i]['template']    = "{$mydirname}_block_new.html";
$modversion['blocks'][$i]['can_clone']   = true ;

この結果から,分かること。

  • file:"modules/モジュールディレクトリ名/blocks/blocks.php"
  • func:"b_bulletin_new_show"
  • opt:"$mydirname|published DESC|10|255|0"
    「opt」の部分は,「$mydirname」部分を公開側のモジュールディレクトリ名に,「|(縦棒)」を「,(カンマ)」に置き換える。下記のようになる。
    opt:"モジュールディレクトリ名,published DESC,10,255,0"
  • item(またはassign):好きな名前を指定できる。「block」を指定すると,テンプレートコードをそのまま使えるので便利かもしれない。

d3モジュールの場合,xoops_version.phpにテンプレート名が書かれていない場合がある。しかし,ブロックテンプレート名とfunc名に共通点があるので,それを手がかりに探せる。たとえば,
テンプレート名:d3blog_block_latest_entries.html
func名:func名:b_d3blog_latest_entries_show
いまの場合,「latest_entries」が検索語になる。この方法は,テンプレート名が分かっている場合でも使える。

実際の使い方例

使用例を示した方が分かると思うので,いくつか紹介。

picoの最新のコンテンツリストを表示する

公開側のモジュール名を「manual」としてインストールした場合。

  • ブロック名:コンテンツ一覧
  • モジュールディレクトリ名:manual
  • テンプレート名:manual_block_list.html
  • 検索語:_list
  • 検索ファイル:trust/modules/pico/xoops_version.php

結果

$modversion['blocks'][3] = array(
  'file'      => 'blocks.php' ,
  'name'      => constant($constpref.'_BNAME_LIST') ,
  'description' => '' ,
  'show_func'   => 'b_pico_list_show' ,
  'edit_func'   => 'b_pico_list_edit' ,
  'options'   => "$mydirname||o.created_time DESC|10||0" ,
  'template'    => '' , // use "module" template instead
  'can_clone'   => true ,
) ;

検索結果より以下が分かる。

  • file="modules/manual/blocks/blocks.php"
  • func="b_pico_list_show"
  • opt="$mydirname||o.created_time DESC|10||0" → "manual,,o.created_time DESC,10,,0"
  • item="block"……好きな名前を付けていい

xugj_blockのコード

<{xugj_block file="modules/manual/blocks/blocks.php" func="b_pico_list_show" opt="manual,,o.created_time DESC,10,,0"  item="block"}>

表示のためのコード

該当するテンプレートのコードをそのまま流用

<ul class="pico_block_menu">
 <{foreach from=$block.contents item=content}>
  <li style="line-height:1.2; margin:4px 0px;">
   <a href="<{$block.mod_url}>/<{$content.link}>" title="<{$content.cat_title}>(<{$content.created_time_formatted}>)">
    <{$content.subject|strip_tags|truncate:"128"}>
    &nbsp;
    (<{$content.cat_title}>)
    &nbsp;
    <{$content.created_time_formatted}>
   </a>
   <{if $content.body}>
    <br />
    <{$content.body|strip_tags|truncate:"100"}>
   <{/if}>
  </li>
 <{/foreach}>
</ul>

d3blogの最新エントリを表示する

公開側のモジュール名を「leaf」としてインストールした場合

  • ブロック名:最新のエントリ
  • モジュールディレクトリ名:leaf(d3モジュールなので好きな名前を使える)
  • テンプレート名:leaf_block_latest_entries.html
  • 検索語:latest_entries
  • 検索ファイル:trust/modules/d3blog/xoops_version.php

検索結果

$modversion['blocks'][$m]['file'] = 'blocks.php';
$modversion['blocks'][$m]['name'] = constant($constpref.'_LATEST_ENTRIES');
$modversion['blocks'][$m]['description'] = constant($constpref.'_LATEST_ENTRIES_DESC');
$modversion['blocks'][$m]['show_func'] = 'b_d3blog_latest_entries_show';
$modversion['blocks'][$m]['edit_func'] = 'b_d3blog_latest_entries_edit';
$modversion['blocks'][$m]['template'] = '';
$modversion['blocks'][$m]['options'] = $mydirname.'|5|25|Y/m/d|1|0|0|0|';
$modversion['blocks'][$m]['can_clone'] = true ;

検索結果より以下が分かる

  • file="modules/leaf/blockx/blocks.php"
  • func="b_d3blog_latest_entries_show"
  • opt="$mydirname.'|5|25|Y/m/d|1|0|0|0|'" → "leaf,5,25,Y/m/d,1,0,0,0,"
  • item="block"……好きな名前を付けていい。

xugj_blockの書き方

<{xugj_block file="modules/leaf/blocks/blocks.php" func="b_d3blog_latest_entries_show" opt="leaf,5,25,Y/m/d,1,0,0,0," item="block"}>

表示のためのコード

リスト形式の部分だけを利用する場合

<ul class="<{$block.mydirname}>BlockLatestEntries">
<{foreach item=entry from=$block.entries}>
  <li>
  <a href="<{$block.mod_url}>/details.php?bid=<{$entry.bid}>">
  <{$entry.title}>
  </a>
  <span>(<{$entry.date}>)</span>
  <{if $block.show_contents and $entry.contents}>
    <div><{$entry.contents}></div>
    <{if $entry.readMore}>
    <span class="readMore">
    <a href="<{$block.mod_url}>/details.php?bid=<{$entry.bid}>" title="<{$block.lang_readmore}>">
    <{$block.lang_readmore}>
    </a>
    </span>
    <{/if}>
  <{/if}>
  </li>
<{/foreach}>
</ul>

myalbumのブロック「最近の画像」を利用する例

  • ブロック名:最近の画像
  • モジュールディレクトリ名:myalbum
  • テンプレート名:myalbum_block_topnews.html
  • 検索語:topnews
  • 検索ファイル:html/modules/myalbum/xoops_version.php

検索結果

$modversion['blocks'][2]['file'] = "myalbum_topnews.php";
$modversion['blocks'][2]['name'] = _ALBM_BNAME_RECENT . $mydirnumber ;
$modversion['blocks'][2]['description'] = "Shows recently added photos";
$modversion['blocks'][2]['show_func'] = "b_myalbum_topnews_show";
$modversion['blocks'][2]['edit_func'] = "b_myalbum_topnews_edit";
$modversion['blocks'][2]['options'] = "$mydirname|5|20|0|1||1";
$modversion['blocks'][2]['template'] = "myalbum{$mydirnumber}_block_topnews.html" ;
$modversion['blocks'][2]['can_clone'] = true ;

上記コードより以下が分かる

  • file="modules/myalbum/blocks/myalbum_topnews.php"
  • func="b_myalbum_topnews_show"
  • opt="$mydirname|5|20|0|1||1" → "myalbum,5,20,0,1,,1"
  • item="oyoyo"(一般的なblockでなくoyoyoにしてみた)

xugj_blockの書き方

<{xugj_block file="modules/myalbum/blocks/myalbum_topnews.php" func="b_myalbum_topnews_show" opt="myalbum,5,20,0,1,,1" item="oyoyo"}>

表示のためのコード

元のテンプレートコードを参考にしている

<ul>
  <{foreach item=photo from=$oyoyo.photo}>
    <li>
    <a href="<{$oyoyo.mod_url}>/photo.php?lid=<{$photo.lid}>&amp;cid=<{$photo.cid}>">
    <{$photo.title}>
    </a>
    (<{$photo.date}>)
    </li>
  <{/foreach}>
</ul>

※元のコードの「$block」を「$oyoyo」に置き換えている。

コメント表示部へ コメント  友達に教える 友達に教える  プリンタ用画面 印刷ページ
ページナビ

コメント

題名
ゲスト名   :
投稿本文
より詳細なコメント入力フォームへ

コメント一覧

なーお   投稿日時 2008-7-1 23:38
参考になりました。
xugj_block、初めて使いましたが、とても便利で応用が効きますね!

当方の記事で、リンクしましたので、トラックバック的にコメント残しておきます。

http://www.naaon.com/modules/plactice/index.php?content_id=124
Smarty入門
Smarty入門
PHP+テンプレート・エンジンでつくるMVCアプリケーション
2940円・山田 祥寛 著・翔泳社
xoops活用に欠かせないsmartyの基礎から応用まで。このサイトの改造も90%はsmartyのお世話に。

特選・おすすめメニュー
技術報告書主要カテゴリー
その他のカテゴリー記事
おすすめサイト
ワンダーお〜ぱ 別窓で開く:ワンダーお〜ぱ
Excel,Word,知的生産,情報整理,作文技術を磨くために - ワンダー・オーパ
Excelオンライン教室  別窓で開く:Excelオンライン教室 - ワンダー・オーパ
Excel「関数・機能・グラフ・編集」のオンライン自習室
xBeans 別窓で開く:知的生産の技術・情報整理術・文章術 - xBeans
価値ある情報を選択・整理,組み合わせて,活用,発信する技術
PachinkoMedia  別窓で開く:PachinkoMedia
パチンコ業界人の為のプロフェッショナルサイト。新鮮・希少な情報満載
パチログ Pachilog  別窓で開く:みんなでつくる日本最大のパチンコ店口コミ評価サイト パチログ
みんなでつくる日本最大のパチンコ店口コミ評価サイト