it-swarm.com.de

Chrome Problem: So entfernen Sie die div class = "custom" aus einem Joomla-Modul

Diese Frage ist möglicherweise auch relevant, wenn Sie versuchen, "So verhindern Sie, dass Joomla-Module in divs eingeschlossen werden" zu lösen.

Was ist das PROBLEM?

Wenn Sie ein Modul in Joomla einbinden, wird es wie unten gezeigt in ein div-Tag eingebunden.

<div class="custom">
 Module content
</div>

Ich möchte nicht, dass das Modul in irgendetwas eingekapselt ist. Da es Probleme mit dem Seitenlayout verursacht. In einigen Situationen konnte ich es mit CSS-Stil beheben, aber das gilt nicht für alle Situationen.

Mein Setup und was ich erfolglos ausprobiert habe

Das Modul, das ich zu gestalten versuchte, wurde über einen Artikel aufgenommen.

  1. Festlegen des Stils auf none im article- {loadmodule module, title, style} Mein aktueller Code war {loadmodule mod_custom, mymodule, none}
  2. Setzen Sie den Style auf none, indem Sie zu Extensions -> Module Manager gehen und dann auf das Modul klicken, das nicht in divs eingeschlossen werden soll. Wählen Sie dann Erweitert -> Modulstil = Keine . configure module chrome style via settings

Ich war mir sicher, dass das oben genannte hätte funktionieren sollen. Der Code, der für das obige Styling verantwortlich ist, war in templates/system/html/modules.php und es zeigte

/*
 * none (output raw module content)
 */
function modChrome_none($module, &$params, &$attribs)
{
    echo $module->content;
}
  1. Beim nächsten Fehler ging ich zu Erweiterungen -> Plugin Manager -> Inhaltslademodule - änderte den Wert in no wrapping (Rohausgabe) . Plugin- Content Load set to raw

Das hat auch nicht funktioniert! WoopDeeDoo! Ich konnte immer noch sehen, wie das Modul mit class=”custom”

Wie kann ich dieses Problem beheben?

4
TryHarder

Die Lösung bestand darin, eine Modulüberschreibung von \modules\mod_custom\tmpl\default.php Zu erstellen.

Der fehlerhafte Code in dieser Datei war

<div class="custom<?php echo $moduleclass_sfx ?>" <?php if ($params->get('backgroundimage')) : ?> style="background-image:url(<?php echo $params->get('backgroundimage');?>)"<?php endif;?> >
    <?php echo $module->content;?>
</div>

Ich habe den obigen Code genommen, ihn bearbeitet und unter templates/current-site-template/mod_custom/default.php Überschrieben. Der neue Code lautete

<?php echo $module->content;?>

Das hat das Problem behoben.


Zusatzinfo

Nach meinem Verständnis würde das Überschreiben die divs von allen Modulen entfernen, die auf meiner Site veröffentlicht werden. Zuerst dachte ich, dass dies unerwünscht ist, weil ich in einigen Situationen immer noch das Styling auf bestimmte Module anwenden möchte, aber dann habe ich den HTML-Code erneut überprüft. So sah der HTML-Code aus vor dem Überschreiben des Moduls und es wurde ein kein Chromstil verwendet

<div class="custom"  >
    Module content
</div>    

So sah das HTML aus vor dem Überschreiben des Moduls und es wurde ein Chrome-Stil von html5 verwendet

<div class="moduletable">
    <div class="custom"  >
        Module content
    </div>
</div>

Dies bedeutet, dass ich bei Bedarf immer noch ein benutzerdefiniertes Div und eine benutzerdefinierte Klasse auf bestimmte Module anwenden kann während die Modulüberschreibung verwendet wird. Wenn ich den Chromstil als html5 wählen würde, würde ich bekommen

<div class="moduletable">   
    Module content  
</div>

und wenn ich den override mit einem chrome styling von keins benutzen würde ich nur bekommen

Module Content
6
TryHarder

Wir hatten das gleiche Problem mit diesem Modul. Es könnte etwas mit der neueren Joomla-Version sein, die wir verwenden, aber wir konnten nicht oooooos Antwort auf die Arbeit bekommen. Es gibt eine leicht neue Verzeichnisstruktur, der Sie folgen müssen (wir verwenden Joomla 3.6.2). Sie müssen Ihre Überschreibungen in ein " html " - Verzeichnis in Ihrer Vorlage einfügen.

https://docs.joomla.org/How_to_override_the_output_from_the_Joomla!_core

PATH_TO_JOOMLA/components/com_content/views/article/tmpl/default.php
to
TEMPLATE_NAME/html/com_content/article/default.php

Hier ist ein weiteres Beispiel mit einem Modul

PATH_TO_JOOMLA/modules/mod_login/tmpl/default.php
to
TEMPLATE_NAME/html/mod_login/default.php

Ich musste eine leere default.php-Vorlage für mod_custom erstellen, die nur enthielt

<?php echo $module->content;?>

und legen Sie es in

/templates/my-templates/html/mod_custom/default.php

Erst dann konnte ich alle zusätzlichen Flusen entfernen, die Joomla um meine Module gewickelt hatte. Es sollte eine Option geben, die nur das HTML-Modul anzeigt, und nicht mehr.

2
Eko3alpha

m den "moduletable" Wrapper loszuwerden, erstellen Sie einfach einen Modulstil:

Erstellen Sie im Ordner templates/your_template/html eine Datei mit dem Namen "modules.php":

<?php    
    function modChrome_BoHivex($module, &$params, &$attribs) { 
        $module_class_sfx = htmlspecialchars($params->get('moduleclass_sfx'));
        ?>
        <div class="custom<?php echo $moduleclass_sfx; ?>" <?php if ($params->get('backgroundimage')) : ?> style="background-image:url(<?php echo $params->get('backgroundimage'); ?>)"<?php endif; ?> >
           <?php echo $module->content; ?>
        </div>
        <?php
    }

Sie können weitere Stile hinzufügen, indem Sie einfach neue Funktionen hinzufügen. Sie können die Ausgabe vollständig anpassen und den Wrapper "moduletable" entfernen.

Sie finden Ihre Stile im Backend Ihres Moduls -> Erweitert -> Modulstil.

Besonderer Hinweis: Sie können die Paginierung von com_content auf ähnliche Weise überschreiben, indem Sie eine pagination.php zum Ordner/html hinzufügen.

m den "benutzerdefinierten" Wrapper zu entfernen, fügen Sie eine Überschreibung zu templates/your_template/html/mod_custom/your_override.php hinzu:

<?php
   defined('_JEXEC') or die;

   echo $module->content;

Es ist möglich, in der Style-Funktion einfach eine Echo-Ausgabe ohne HTML zu machen und die HTML auch in der Override-Funktion auszugeben.

1
Dennis Heiden