web-dev-qa-db-fra.com

Réutiliser les positions du module Joomla sans définir Bootstrap Largeur de colonne correctement

Je souhaite utiliser 1 position de module (vitrine) mais que les modules en double définissent la largeur de la colonne bootstrap) en fonction du nombre de modules affectés à cette position.

J'ai écrit le code suivant:

<div class="row">
    <?php if($this->countModules('showcase')) : ?>
        <div class="col-md-<?php echo (12/$this->countModules('showcase'));?>">
            <jdoc:include type="modules" name="showcase" />
        </div>
    <?php endif; ?>
</div>

mais ceci produit le code HTML suivant:

<div class="row">
    <div class="col-md-6">
        <div class="block">
            <h2 class="header">Show Case 1</h1>
            <div class="custom">
                <p>This is a test</p>
            </div>
        </div>
        <div class="custom">
            <h2 class="header">Show Case 2</h1>
            <p>This is a test</p>
        </div>
    </div>
</div>

plutôt que (comme je le veux):

<div class="row">
    <div class="col-md-6">
        <div class="block">
            <h2 class="header">Show Case 1</h1>
            <div class="custom">
                <p>This is a test</p>
            </div>
        </div>
    </div>
    <div class="col-md-6">
        <div class="block">
            <h2 class="header">Show Case 2</h1>
            <div class="custom">
                <p>This is a test</p>
            </div>
        </div>
    </div>
</div>
1
RustyJoomla

La raison en est que vous avez votre jdoc:include à l'intérieur du wrapper suivant:

<div class="col-md-<?php echo (12/$this->countModules('showcase'));?>">

Tous les modules assignés à cette position seront donc affichés dans cette enveloppe.


Regardez le fichier suivant:

templates/YOUR_TEMPLATE/html/modules.php

Ici, vous verrez les variables et les balises HTML qui seront enroulées autour de votre module. Votre meilleur pari sera de faire ce qui suit:

index.php:

<?php if ($this->countModules('showcase')) : ?>
    <div class="row">
        <jdoc:include type="modules" name="showcase" style="mystyle" />
    </div>
<?php endif; ?>

Ajoutez ensuite un nouveau mocChrome au fichier mentionné ci-dessus:

function modChrome_mystyle($module, &$params, &$attribs)
{
    $moduleTag     = $params->get('module_tag', 'div');
    $bootstrapSize = (int) $params->get('bootstrap_size', 0);
    $moduleClass   = $bootstrapSize != 0 ? ' col-md-' . $bootstrapSize : ' col-md-12';
    $headerTag     = htmlspecialchars($params->get('header_tag', 'h3'), ENT_COMPAT, 'UTF-8');
    $headerClass   = htmlspecialchars($params->get('header_class', 'page-header'), ENT_COMPAT, 'UTF-8');

    if ($module->content)
    {
        echo '<' . $moduleTag . ' class="' . htmlspecialchars($params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8') . $moduleClass . '">';

            if ($module->showtitle)
            {
                echo '<' . $headerTag . ' class="' . $headerClass . '">' . $module->title . '</' . $headerTag . '>';
            }

            echo $module->content;
        echo '</' . $moduleTag . '>';
    }
}

Remarque j'ai utilisé style="mystyle" (valeur par défaut) dans index.php et le nom de la fonction modChrome est modChrome_mystyle.

Vous verrez également que la taille bootstrap sera par défaut à 12 n'est pas spécifié.

Une fois que tout cela est fait, assurez-vous d’affecter ce style aux modules de ce poste.

J'espère que cela t'aides

2
Lodder