2.0.10JP および 2.2.0 以降、ブロックにweightがアサインされるようになりました。
その結果、極めて自由なブロックレイアウトが可能となります。
私の長年のリクエストであったweightアサインを行ってくれたonokazuさん、Mithrandirさんへの感謝の意味も込めて、ブロック管理などで、「並び順」の数値を指定するだけで、中央左・中央・中央右、さらにはメインコンテンツ部分も、自由に並び替えることの出来るテーマを作ってみました。
ダウンロードはこちら
http://www.peak.ne.jp/xoops/md/mydownloads/singlefile.php?cid=3&lid=57
メインコンテンツ部分の重みを「100」としていますので、100以下の数値に指定されたブロックならメイン部よりも上に、100を超える数値で指定されたブロックは、メイン部の下に表示されます。
このテーマの元となったのは、matchanさんがCustomizing XOOPS用に作った kihon1 テーマです。
このセンターブロック部分を、以下のように記述します。
かなりの力技で、自分でも美しくないとは思いますが、あまり良い方法が他に思い浮かびませんでした。
この機能を搭載したテーマが増えるとよいですね! 中央部分をコピペして微調整するだけで、あなたのテーマもいきなり強力になりますよ。
なお、本家版2.2でもweightがアサインされているので、このテーマも利用可能でしょう。
(本家版では、さらに id, typeid もアサインされています)
ただし、2.0.13などではアサインされいないため、この機能は使えませんのでご注意を。
<td id="centercolumn">
<!-- Display center blocks if any -->
<{if $xoops_showcblock == 1}>
<{php}>
$prev_htmls = array(
'bdbd' => '' ,
'bdcc' => '<table cellspacing="0"><tr><td class="centerCcolumn" colspan="2">' ,
'bdcl' => '<table cellspacing="0"><tr><td class="centerLcolumn">' ,
'bdcr' => '<table cellspacing="0"><tr><td class="centerLcolumn"></td><td class="centerRcolumn">' ,
'ccbd' => '</td></tr></table>' ,
'cccc' => '' ,
'cccl' => '</td></tr><tr><td class="centerLcolumn">' ,
'cccr' => '</td></tr><tr><td class="centerLcolumn"></td><td class="centerRcolumn">' ,
'clbd' => '</td><td class="centerRcolumn"></td></tr></table>' ,
'clcc' => '</td><td class="centerRcolumn"></td></tr><tr><td class="centerCcolumn" colspan="2">' ,
'clcl' => '' ,
'clcr' => '</td><td class="centerRcolumn">' ,
'crbd' => '</td></tr></table>' ,
'crcc' => '</td></tr><tr><td class="centerCcolumn" colspan="2">' ,
'crcl' => '</td></tr><tr><td class="centerLcolumn">' ,
'crcr' => '' ,
) ;
$i = 0 ;
$xoops_cblocks = array() ;
foreach( $this->_tpl_vars['xoops_ccblocks'] as $i => $block ) {
$weight = $block['weight'] * 65536 + $i ;
$block['align'] = 'cc' ;
$xoops_cblocks[ $weight ] = $block ;
}
foreach( $this->_tpl_vars['xoops_clblocks'] as $i => $block ) {
$weight = $block['weight'] * 65536 + $i + 16384 ;
$block['align'] = 'cl' ;
$xoops_cblocks[ $weight ] = $block ;
}
foreach( $this->_tpl_vars['xoops_crblocks'] as $i => $block ) {
$weight = $block['weight'] * 65536 + $i + 32768 ;
$block['align'] = 'cr' ;
$xoops_cblocks[ $weight ] = $block ;
}
// body's weight = 100
$xoops_cblocks[ 100 * 65536 + 49152 ] = array( 'align' => 'bd' ) ;
ksort( $xoops_cblocks ) ;
array_push( $xoops_cblocks , array( 'align' => 'bd' ) ) ;
$prev_align = 'bd' ;
foreach( $xoops_cblocks as $key => $block ) {
$xoops_cblocks[$key]['prev_html'] = $prev_htmls[ $prev_align . $block['align'] ] ;
$prev_align = $block['align'] ;
}
/* foreach( $xoops_cblocks as $key => $block ) {
echo htmlspecialchars("$key:{$block['align']}:{$block['prev_html']}")."<br />" ;
}
exit ; */
$last = array_pop( $xoops_cblocks ) ;
$this->_tpl_vars['xoops_cblocks'] = $xoops_cblocks ;
$this->_tpl_vars['xoops_cblocks_terminator'] = $last['prev_html'] ;
<{/php}>
<{foreach item=block from=$xoops_cblocks}>
<{$block.prev_html}>
<{if $block.align == "bd"}>
<div id="content">
<{$xoops_contents}>
</div>
<{else}>
<div style="padding: 5px;">
<{if $block.title|regex_replace:"/.*none/":"none" ne "none"}>
<div class="blockTitle"><{$block.title}></div>
<{/if}>
<div class="blockContent"><{$block.content}></div>
</div>
<{/if}>
<{/foreach}>
<{$xoops_cblocks_terminator}>
<{else}>
<div id="content">
<{$xoops_contents}>
</div>
<{/if}>
<!-- End display center blocks -->
</td>