it-swarm.com.de

Wie funktioniert das benutzerdefinierte Modul chrome?

Ich habe Probleme mit meinem Chrommodul.

Wenn ich den PHP modules.php In template/protostar/html In XXXmodules.php umbenenne (oder irgendetwas anderes, nur um den Link zu unterbrechen), funktionieren alle Seiten auf meiner Website. Aber wenn ich modules.php So lasse, wie es ist, sind einige Seiten * nicht zugänglich und ich erhalte eine This webpage is not available - Seite. Auf der Seite, die funktioniert, funktioniert mein benutzerdefiniertes chrome megarounded wie es sollte.

Der Fehler tritt auch auf, wenn ich den Inhalt des modules.php Lösche oder wenn ich nur verlasse:

defined('_JEXEC') or die('Restricted access');

Da ich möchte, dass alle Seiten meiner Website + das benutzerdefinierte Modul zugänglich sind, beschäftige ich mich mit der Funktionsweise von custom chrome, mit Ausnahme der Frage, ob neue custom chrome erstellt werden sollen. (was ich schon weiß), ich kann keine Hilfe finden.

Ich versuche zu verstehen, wie protostar/index.php Den Link zu modules.php Erhält, also habe ich versucht, in allen Dateien des Ordners modules.php Nach template/protostar Zu suchen, konnte dies aber nicht keine Verbindung. Ich frage mich, wie diese modules.php abgerufen werden! Irgendeine Idee?

Vielen dank für Deine Hilfe!

  • Seltsamerweise sind die Seiten, die nicht funktionieren, diejenigen, die kein Modul in HTML enthalten, das über loadposition oder module irgendwo von NoNumber geladen wurde. Kurz gesagt, eine Seite muss im Hauptartikel ein Modul laden, um zu arbeiten.

BEARBEITEN: hier ist der Inhalt meiner modules.php (aber ich bezweifle, dass der Fehler von dort kommt, da ich beim leeren des Inhalts immer noch den Fehler habe, nur das Umbenennen von modules.php behebt den Fehler)

<?php
// no direct access
defined('_JEXEC') or die('Restricted access');

?>
<?php
function modChrome_megarounded($module, &$params, &$attribs)
{ ?>
        <div class="megamod module<?php echo $params->get('moduleclass_sfx'); ?>">
            <div class="megabox">
                <div class="megaboxouter">
                    <div class="megaboxinner">
                        <?php if ($module->showtitle != 0) : ?>
                            <h6><?php echo $module->title; ?></h6>
                        <?php endif; ?>
                    <?php echo $module->content; ?>
                    </div>
                </div>
            </div>
        </div>
    <?php
}
?>
5
MagTun

Mit modules.php Können Vorlagen also chrome Stile definieren (überschreiben?), Wenn Sie möchten. Sie haben wahrscheinlich darüber gelesen im Artikel zum Verständnis von Überschreibungen auf Joomla Docs

Ohne Code tritt wahrscheinlich ein Fehler in Ihrem PHP auf. Sie können dies nur überprüfen, indem Sie den Debug-Modus von Joomla aktivieren und die Fehlerberichterstattung auf "Entwickler" setzen. Der Grund, warum es nur auf einigen Seiten nicht funktioniert, ist wahrscheinlich, dass diese Seiten Module enthalten, die bestimmte chrome -Stile verwenden, die in Ihrem template/protostar/html/modules.php Definiert sind.

Wenn Sie der Frage Ihren modules.php - Code hinzufügen, können wir Ihnen wahrscheinlich helfen. Angenommen, Sie sagen, Ihr chrome funktioniert, aber andere Seiten brechen, kann dies ein einfaches Problem sein, das den PHP -Interpreter bei der Verarbeitung anderer Stile bricht.

Wenn Sie diese Datei deaktivieren (durch Umbenennen usw.), wird der Fehler vermieden und das Standardsystem chrome übernimmt wahrscheinlich.

In einer vorrätigen, sofort einsatzbereiten Joomla 3.x-Installation finden Sie modules.php - Dateien an 6 Speicherorten. Diese sind zwischen dem/administrator und dem Frontend aufgeteilt:

  1. /administrator/templates/system/html/modules.php
  2. /administrator/templates/isis/html/modules.php
  3. /administrator/templates/hathor/html/modules.php
  4. /templates/system/html/modules.php
  5. /templates/beez3/html/modules.php
  6. /templates/protostar/html/modules.php

Wenn Sie sich # 1 und # 4 ansehen, werden Sie sie sehen befinden sich in templates/system/html und enthalten das Standardchrom. Für das Frontend sind dies html5, table, horz, xhtml, rounded und outline.

Wenn Joomla! Beim Versuch, eine Seite zu rendern und eine Modulposition in einer Vorlage zu verarbeiten, wird die Methode renderModule($module, $attribs) in der Klasse JModuleHelper aufgerufen. ZB wie diese Modulposition in Protostar:

<div id="aside" class="span3">
    <!-- Begin Right Sidebar -->
    <jdoc:include type="modules" name="position-7" style="well" />
    <!-- End Right Sidebar -->
</div>

Diese Methode verwendet das Attribut style des Tokens jdoc und erstellt daraus den Namen der Methode/Funktion modChrome_????, Die für den angegebenen Stil verantwortlich ist. Verwenden dieses Codebits:

$chromeMethod = 'modChrome_' . $style;

// Apply chrome and render module
if (function_exists($chromeMethod))
{
    $module->style = $attribs['style'];

    ob_start();
    $chromeMethod($module, $params, $attribs);
    $module->content = ob_get_contents();
    ob_end_clean();
}

Wie Sie sehen können, ist die Funktion in der Datei modules.php Der aktuellen Vorlage vorhanden. Anschließend wird diese Methode aufgerufen und die Ausgabe erfasst, bevor sie zum Hauptrendervorgang zurückkehrt.

5
Craig