Bonjour,
Pour le premier cas, je ne sais pas mais pour le second j'ai un doute. Pourquoi est-il nécessaire de modifier skin_skeleton.php alors que c'est un script de référence qui fonctionne ?
Les fonctions de ce script peuvent-êtres reprises dans le skin dérivé avec le fichier skin.php.
Enfin, pour ce genre d'erreur, c'est une ligne "include_once('../sections/sections.php') qu'il faut insérer avant l'appel de la fonction Sections:: .
Encore une fois, bizarre que vous ayez à toucher à ce script (qui sera effacé lors des mises à jour).
GnapZ:
J'ai modifié le script de la
template.php mais je n'ai pas touché à skin_skeleton.php, que je ne reproduis ici que pour référence à sa version 6.12. La modif ne sera donc pas perdue lors d'une mise à jour.La raison pour laquelle j'ai procédé comme suit (et quelqu'un a peut-être une suggestion pour une solution plus appropriée), c'est que je voulais afficher un menu contextuel mais aucune autre des boîtes extra, comme celle des catégories ou des références. Or, je n'y parvenais pas, je ne trouvais aucune place où ces options pourraient être réglées. Alors...
Je suis allé dans le script de
template.php et j'ai réglé Page::side(FALSE);. Ainsi, aucune boîte extra ne s'affiche. Ensuite, j'ai ajouté les lignes de codes mentionnées ci-dessus (premier bloc de code de cette page) pour faire afficher un menu contextuel. Et ça fonctionne.Mais ce code semble supposer l'existence d'une section, de sorte qu'il affiche bien sur une page d'index de section mais pas sur une autre page. Dans ce dernier cas, la boîte extra du menu contextuel est remplacé par le message d'erreur.
Il me semble que j'aurais besoin d'un ligne qui dise (en PHP correct) quelque chose comme
IF nous sommes sur une page d'index de section THEN affiche le menu contextuel ELSE fais rien !.Ce que je ne sais pas formuler c'est le
IF...Lasares : Ok, moi comprendre mieux.
Bon alors il faut que je regarde parce que si la condition IF n'est pas très difficile à réaliser, il faut s'assurer que le menu contextuel est prévu pour fonctioner sur la page d'accueil car il semble qu'il ait besoin d'une section de référence. Hors la page d'acceuil ou plutôt le plan du site (origine des sections) n'a pas de numéro puisqu'il est établi par sections/index.php (d'où peut-être l'erreur).
GnapZ:
Je n'en ai pas besoin sur la page d'accueil, ni sur aucune page qui n'est pas un index de section, d'ailleurs.
Si vous me trouvez une solution générale qui s'applique à toutes ces pages, je suis preneur, bien sûr. Mais pour l'instant, je me contenterais d'une solution plus restreinte pour le site spécifique que je suis en train de finaliser et qui repose essentiellement sur des pages d'index.
Merci de votre aide !!!
En partant du code qui se trouve dans
sections/view.php, on pourrait écrire :// ensure we are in a section
include_once $context['path_to_root'].'sections/sections.php';
if(strpos($context['skin_variant'], 'section:') == 0) {
// the contextual menu, in a navigation box, if this has not been disabled
if( (!is_object($anchor) || !$anchor->has_option('no_contextual_menu'))
&& (!isset($item['options']) || !preg_match('/\bno_contextual_menu\b/i', $item['options']))
&& isset($context['current_focus']) && ($menu =& Skin::build_contextual_menu($context['current_focus']))) {
// use title from topmost level
if(count($context['current_focus']) && ($anchor = get_anchor($context['current_focus'][0]))) {
$box_title = $anchor->get_title();
$box_url = $anchor->get_url();
// generic title
} else {
$box_title = i18n::s('Navigation');
$box_url = '';
}
// in a navigation box
$box_popup = '';
echo Skin::build_box($box_title, $menu, 'navigation', 'contextual_menu', $box_url, $box_popup)."\n";
}
}
Oui, merci Bernard, mille fois merci !
J'ai pas tout compris (quoique je sois bien décidé à apprendre) mais ça fait le travail de façon impeccable.
Si ma compréhension s'améliore, je crois qu'il manque juste une barre oblique avant le dernier
n, comme ça : "\n";Je ne comprends pas
!preg_match('/bno_contextual_menub/i' mais ce n'est pas grave. Ça m'amène juste une question si bête que j'ai presque honte de la poser et révéler ainsi mon ignorance de débutant : on les trouve où toutes ces variables comme $context, $anchor ou autres ? Certaines sont propres à un script donné, mais plusieurs semblent être plus globales. Il y a un endroit où je devrais regarder pour commencer ?En tous cas, merci pour la solution. Je poste sans tarder l'adresse de mon nouveau site dans le showcase et je partage mon skin aussitôt que j'ai le temps de le finaliser pour publication.
Lasares:
$context est effectivement THE variable globale, utilisée partout dans le code, et initialisée dans shared/global.php, vers le début du fichier.









