it-swarm.com.de

countModules im Modul chrome function

Ich verwende das Rasterlayout und muss die Spaltenbreite abhängig von der Anzahl der aktiven Module in einer Position berechnen. Ich ordne die CSS-Klasse in meinem Modul Chrome zu.

Was ich bis jetzt gemacht habe, war ungefähr so:

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

Und als in modules.php Ich würde so etwas machen:

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

Dieser Weg erscheint mir schmutzig, weil ich die Spaltenbreite in meinem Index-PHP berechnen muss und unnötigen Code hinzufüge, wenn ich eine neue Position hinzufügen möchte.

Gibt es eine Möglichkeit, auf die countModules-Funktion für die Position zuzugreifen, die derzeit aus dem Modul chrome) gerendert wird, um die Logik so weit wie möglich von der Vorlage zu trennen?

2
Reygoch

Eine chrome Funktion wie diese könnte funktionieren:

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

Es zählt die Gesamtzahl der Module der angegebenen Position, teilt dann 100/Anzahl der Module und weist diese einem Klassennamen zu.

Sie können dann Stile für diese erwarteten Klassennamen erstellen:

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

und so weiter.

1
FFrewin