it-swarm.dev

Come funziona il modulo personalizzato chrome funziona?

Ho dei problemi con il mio modulo Chrome.

Se rinominare PHP modules.php In template/protostar/html In XXXmodules.php (o qualsiasi altra cosa, solo per interrompere il collegamento), allora tutte le pagine sul mio sito web stanno funzionando. Ma se lascio modules.php così com'è, alcune pagine * non sono accessibili e ottengo una pagina This webpage is not available. Sulla pagina che funziona, la mia abitudine chrome megarounded funziona come dovrebbe.

Il bug appare anche se elimino il contenuto di modules.php O se lascio solo:

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

Poiché vorrei avere tutte le pagine del mio sito Web accessibili + il modulo personalizzato, sto scavando nel modo in cui custom chrome funziona, ma ad eccezione della questione della creazione di nuove custom chrome (che già conosco), non riesco a trovare alcun aiuto.

Sto cercando di capire come protostar/index.php Ottenga il collegamento a modules.php, Quindi ho cercato di cercare modules.php In tutti i file della cartella template/protostar Ma non sono riuscito nessun link. Mi chiedo come questo modulo.php venga recuperato! Qualche idea?

Grazie mille per il vostro aiuto!

  • Stranamente le pagine che non funzionano sono quelle in cui non è presente un modulo HTML caricato tramite loadposition o modulo ovunque da NoNumber. In breve, nell'articolo principale è necessaria una pagina per caricare un modulo per funzionare.

EDIT: ecco il contenuto del mio module.php (ma dubito che l'errore provenga da lì, poiché quando svuoto il contenuto ho ancora l'errore, solo rinominando modules.php risolve l'errore)

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

Quindi, modules.php È il modo in cui i modelli riescono a definire (sovrascrivere?) chrome se vuoi. Probabilmente ne hai già letto nell'articolo Comprensione delle sostituzioni su Joomla Doc

Senza alcun codice, suppongo che probabilmente stai riscontrando un bug nel tuo PHP, l'unico modo per verificare che sarà attivare la modalità di debug di Joomla e impostare la segnalazione degli errori su qualcosa come "Sviluppatore". Il motivo per cui si rompe solo su alcune pagine è probabilmente perché quelle pagine hanno moduli che usano specifici chrome definiti nel tuo template/protostar/html/modules.php.

Se aggiungi il tuo codice modules.php Alla domanda, possiamo probabilmente aiutarti. Dato che dici che il tuo chrome funziona ma altre pagine si rompono, potrebbe essere un semplice problema che rompe l'interprete PHP mentre elabora altri stili.

Quando disabiliti quel file (rinominando ecc.) Il bug viene evitato e il sistema predefinito chrome probabilmente prende il sopravvento.

In uno stock, dall'installazione Joomla 3.x pronta per l'uso troverai file modules.php In 6 posizioni. Questi sono divisi tra/administrator e front-end:

  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

Se guardi # 1 e # 4 li vedrai sono in templates/system/html e contengono il chrome predefinito. Per il front-end, questi sono html5, table, horz, xhtml, rounded e outline.

Quando Joomla! tenta di eseguire il rendering di una pagina ed elabora una posizione del modulo in un modello, chiama il metodo renderModule($module, $attribs) nella classe JModuleHelper. ad esempio come questa posizione del modulo in Protostar:

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

Tale metodo accetta l'attributo style del token jdoc e lo utilizza per creare il nome del metodo/funzione modChrome_???? Responsabile dello stile specificato. Utilizzando questo bit di codice:

$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();
}

Come puoi vedere se la funzione esiste nel file modules.php Del modello corrente, chiamerà quel metodo e ne catturerà l'output prima di restituirlo al processo di rendering principale.

5
Craig