it-swarm.com.de

Wiederverwenden von Joomla-Modulpositionen, bei denen Bootstrap Spaltenbreite korrekt eingestellt ist

Ich möchte 1 Modulposition (Schaufenster) verwenden, aber doppelte Module müssen die bootstrap Spaltenbreite basierend auf der Anzahl der dieser Position zugewiesenen Module festlegen.

Ich habe folgenden Code geschrieben:

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

dies gibt jedoch den folgenden HTML-Code aus:

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

anstatt (wie ich es sehen möchte):

<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

Der Grund dafür ist, dass Sie Ihren jdoc:include In folgendem Wrapper haben:

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

Alle dieser Position zugewiesenen Module werden in diesem Wrapper angezeigt.


Schauen Sie sich die folgende Datei an:

templates/YOUR_TEMPLATE/html/modules.php

Hier sehen Sie die Variablen und HTML-Markups, die um Ihr Modul gewickelt werden. Ihre beste Wette besteht darin, Folgendes zu tun:

index.php:

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

Fügen Sie dann der oben genannten Datei ein neues mocChrome hinzu:

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

Hinweis Ich habe style="mystyle" (Standard) in der index.php verwendet und der Name der modChrome-Funktion ist modChrome_mystyle.

Sie werden auch sehen, dass die bootstrap Größe standardmäßig auf 12 Festgelegt ist.

Stellen Sie anschließend sicher, dass Sie den Modulen an dieser Position diesen Stil zuweisen.

Hoffe das hilft

2
Lodder