J'ai quelques problèmes avec mon module chrome.
Si je renomme le PHP modules.php
Dans template/protostar/html
] En XXXmodules.php (ou toute autre chose, simplement pour rompre le lien), toutes les pages de mon site Web Mais si je laisse modules.php
tel quel, alors certaines pages * ne sont pas accessibles et je reçois une page This webpage is not available
. Sur la page qui fonctionne, ma coutume chrome megarounded
fonctionne comme il se doit.
Le bogue apparaît également si je supprime le contenu du modules.php
Ou si je ne laisse que:
defined('_JEXEC') or die('Restricted access');
Parce que je voudrais avoir toutes les pages de mon site Web accessibles + le module personnalisé, je suis en train de creuser dans la façon dont custom chrome fonctionne, mais à l'exception de la question de la création d'un nouveau custom chrome (que je connais déjà), je ne trouve aucune aide.
J'essaie de comprendre comment protostar/index.php
Obtient le lien vers modules.php
Et j'ai donc essayé de rechercher modules.php
Dans tous les fichiers du dossier template/protostar
Sans pouvoir pas de lien. Je me demande comment ce module.php est récupéré! Une idée?
Merci beaucoup pour votre aide!
EDIT: voici le contenu de mon modules.php (mais je doute que l'erreur vienne de là car quand je vide le contenu, j'ai toujours l'erreur, seulement renommer modules.php résoudre l'erreur)
<?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
}
?>
Ainsi, modules.php
Est le moyen utilisé par les modèles pour définir (remplacer?) chrome styles si vous le souhaitez. Vous avez probablement déjà entendu parler de ces éléments dans l'article Comprendre les substitutions sur Joomla Doc)
Sans code, j'imagine que vous rencontrez probablement un bogue dans votre PHP. Le seul moyen de vérifier cela consiste à activer le mode de débogage de Joomla et à définir le rapport d'erreurs sur "Développeur". La raison pour laquelle certaines pages ne se cassent pas, c'est probablement parce que ces pages ont des modules qui utilisent des styles spécifiques chrome définis dans votre template/protostar/html/modules.php
.
Si vous ajoutez votre code modules.php
À la question, nous pouvons probablement vous aider. Étant donné que vous dites que votre chrome fonctionne mais que d'autres pages se cassent, il peut s'agir d'un simple problème qui rompt l'interprète PHP alors qu'il traite d'autres styles.
Lorsque vous désactivez ce fichier (en renommant etc), le bogue est évité et le système par défaut chrome prend probablement le relais.
En stock, une installation Joomla 3.x prête à l'emploi, vous trouverez des fichiers modules.php
Dans 6 emplacements. Ceux-ci sont répartis entre le/administrateur et le front-end:
/administrator/templates/system/html/modules.php
/administrator/templates/isis/html/modules.php
/administrator/templates/hathor/html/modules.php
/templates/system/html/modules.php
/templates/beez3/html/modules.php
/templates/protostar/html/modules.php
Si vous regardez # 1 et # 4 , vous verrez qu'ils sont dans templates/system/html
et contiennent le chrome par défaut. Pour le front-end, il s'agit de html5
, table
, horz
, xhtml
, rounded
et outline
.
Quand Joomla! tente de rendre une page et traite une position de module dans un modèle, il appelle la méthode renderModule($module, $attribs)
de la classe JModuleHelper
. Par exemple, aimez cette position de module dans Protostar:
<div id="aside" class="span3">
<!-- Begin Right Sidebar -->
<jdoc:include type="modules" name="position-7" style="well" />
<!-- End Right Sidebar -->
</div>
Cette méthode utilise l'attribut style
du jeton jdoc
et l'utilise pour construire le nom de la méthode/fonction modChrome_????
Responsable du style spécifié. En utilisant ce morceau de code:
$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();
}
Comme vous pouvez voir si la fonction existe dans le fichier modules.php
Du modèle actuel, elle appellera cette méthode et capturera sa sortie avant de la renvoyer au processus de rendu principal.