web-dev-qa-db-fra.com

countModules dans le module chrome fonction

J'utilise une disposition de grille et je dois calculer la largeur de colonne en fonction du nombre de modules actifs dans une position. J'assigne la classe css dans mon module chrome.

Ce que je faisais jusqu'à maintenant ressemblait à ceci:

$position1ColumnWidth = functionThatCalculatesWidth('position1');
...
<jdoc:include type="modules" name="menu" style="customChrome" colWidth="<?php echo $position1ColumnWidth?>"/>

Et que dans modules.php Je ferais quelque chose comme ça:

function modChrome_customChrome ($module, &$params, &$attribs) {
    echo "<div class=\"" . $attribs["colWidth"] . ">";
    echo $module->content;
    echo "</div>";
}

Cela me semble compliqué, car je dois calculer la largeur de la colonne dans mon index php, ce qui ajoute du code inutile si je souhaite ajouter une nouvelle position.

Existe-t-il un moyen d’accéder à la fonction countModules pour une position qui est actuellement affichée dans le module chrome afin de séparer autant que possible la logique du modèle)?

2
Reygoch

Une fonction chrome comme celle-ci pourrait fonctionner:

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

Il compte le nombre total de modules de la position donnée, puis divise 100/nombre de modules et l’assigne à un nom de classe.

Vous pouvez ensuite créer des styles pour ces noms de classes attendus comme:

.width-100 {width:100%;}  
.width-50 {width:50%;}  
.width-33 {width:33%;}  
.width-25 {width:25%;}  

etc.

1
FFrewin