私はグリッドレイアウトを使用しており、位置にあるアクティブモジュールの数に応じて列幅を計算する必要があります。モジュールchrome内にcssクラスを割り当てています。
私が今までやっていたことは次のようなものでした:
$position1ColumnWidth = functionThatCalculatesWidth('position1');
...
<jdoc:include type="modules" name="menu" style="customChrome" colWidth="<?php echo $position1ColumnWidth?>"/>
そしてmodules.php
私はこのようなことをします:
function modChrome_customChrome ($module, &$params, &$attribs) {
echo "<div class=\"" . $attribs["colWidth"] . ">";
echo $module->content;
echo "</div>";
}
この方法は、インデックスphpで列幅を計算する必要があり、新しい位置を追加する場合に不要なコードを追加するため、私には不自然に思えます。
現在モジュール内からレンダリングされている位置のcountModules関数にアクセスする方法はありますかchromeロジックをテンプレートから可能な限り分離するために?
chromeこのような関数は機能する可能性があります:
function modChrome_mymod($module, &$params, &$attribs)
{
jimport( 'joomla.application.module.helper' );
$class = "";
if(count(JModuleHelper::getModules('position'))) {
$total_modules = count(JModuleHelper::getModules('position'));
$width = round(100 / $total_modules);
$class = " width-".$width;
}
if (!empty ($module->content)) : ?>
<div class="gridmod<?php echo $class; ?> floatleft moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
// Rest of your chrome function goes here ...
}
これは、指定された位置のモジュールの総数をカウントし、100 /モジュール数を割り、これをクラス名に割り当てます。
次に、これらの予期されるクラス名のスタイルを次のように作成できます。
.width-100 {width:100%;}
.width-50 {width:50%;}
.width-33 {width:33%;}
.width-25 {width:25%;}
等々。