78 views
Widget dans une div
Gnesis

12 subjects, 71 replies

donors
Unread message
Bonjour,

J'essaye de faire mon thème en me basant sur le Dungeon, j'ai actuellement fait le "Topbar" et dans mon menu, j'aimerai intégré un widget espace membre, pour pouvoir se loger quand on est visiteur et le panel gestion quand on est connecté, mais je dois modifier mon menu pour faire en sorte qu'il accepte l'ajout de widget... Quelqu'un pourrait m'éclairer sur ce sujet ?

Au passage, j'aimerai aussi savoir si quelqu'un connait le code pour afficher le nombre de personnes en ligne sur le site, pour l'instant il est écrit en brut. J'ai cherché dans le thème par défaut mais je ne trouve pas...

le site: French Family

Merci d'avance !
French Family
3 participants
3 replies
eResnova

17 subjects, 875 replies

Contributors
Unread message
Salut Gnesis !

Alors, pour pouvoir ajouter des widgets à un endroit de ton thème, il faut déclarer une nouvelle zone.

Je vais essayer de t'expliquer la démarche en me basant sur le thème Dungeon et t'expliquer le principe de déclaration/affichage des zones.

Si tu regarde le fichier dungeon.php ligne 43 tu as :

public $zones = array('Header', 'Avant-contenu', 'Contenu', 'Post-contenu', 'Footer');

Le tableau$zones reçoit les zones que tu déclares pour ton thème. Elles sont ensuite appelées pour être affichées dans le fichier body.tpl.php du thème (dans le dossier dungeon/views/...). Tu peux leur donner le nom que tu veux.

Maintenant, si on regarde le fichier body.tpl.php, lignes 3 à 7, on voit un exemple d'appel d'une zone du thème :

<?php if ($zone = $NeoFrag->output->display_zone(0)): ?>
<div class="header-banner">
<div class="container"><?php echo $zone; ?></div>
</div>
<?php endif; ?>


On regarde si la zone a du contenu à afficher avec <?php if ($zone = $NeoFrag->output->display_zone(0)): ?>, si oui : on l'affiche avec <?php echo $zone; ?>

$NeoFrag->output->display_zone(0) va appeler la première zone du tableau $zones déclaré dans le thème, en l’occurrence la zone qui porte le nom "Header". Un tableau PHP commence toujours par l'index 0

Si vous comprenez ce principe, pour appeler la zone "Footer" (5ème zone déclarée dans le tableau), il faudra utiliser : <?php if ($zone = $NeoFrag->output->display_zone(4)): ?>

Donc, dans ton cas, Gnesis, pour ajouter une nouvelle zone, il faut :

  1. Ajouter une nouvelle zone dans la variable $zones du fichier dungeon.php : tu aura donc quelque chose comme cela : public $zones = array('Header', 'Avant-contenu', 'Contenu', 'Post-contenu', 'Footer', 'Topbar');
  2. Afficher ta nouvelle zone dans le fichier body.tpl.php avec ce code : <?php if ($zone = $NeoFrag->output->display_zone(5)): ?>
    <div class="ta classe css">
    <?php echo $zone; ?>
    </div>
    <?php endif; ?>


Autre point très important :

Déclarer une nouvelle zone après avoir installé un thème pose un petit problème : même si elle est vide, elle ne sera pas détectée par le LiveEditor car non configurée/initialisée dans la base de données lors de l'installation du thème.

Donc il faut également modifier la fonction public function install(){ ... } ligne 63 du fichier dungeon.php.

Dans cette fonction, on retrouve toute les actions à réaliser si on installe le thème pour la première fois ou qu'on le réinitialise depuis l'administration : configuration par défaut du thème, dispositions par défaut, etc...

Donc si tu regarde bien le code, on retrouve ce genre de chose :

$dispositions['*']['Header'] = array(
...
);

Ici on déclare un contenu par défaut pour la zone ['Header'], pour toutes les pages du site ['*']

Toujours dans notre exemple, il faut déclarer ton contenu de base pour ta nouvelle zone avec :

$dispositions['*']['Topbar'] = array();

En laissant un array vide, la zone sera déclarée mais vide par défaut, mais bien reconnue avec le LiveEditor.

Ensuite, pour bien prendre en compte ces changements, il faut "Réinstaller le thème par défaut" (petit bouton orange disponible depuis la rubrique Apparence > Thèmes)

Tu pourra ensuite lancer le LiveEditor et voir apparaître ta nouvelle zone et y ajouter ton widget.

J'espère être assez compréhensible dans mes explications lol... Dans tous les cas on pourra en rediscuter si tu as quelques difficultés :)
Zaekof

38 subjects, 883 replies

Contributors donors
Unread message
@eResnova explication au top merci !
"N'arrêtez jamais d'apprendre" !
Gnesis

12 subjects, 71 replies

donors
Unread message
Un grand merci à toi, je n'ai pas encore eu l'occasion d'essayer mais tout est bien détaillé, merci à toi pour une réponse aussi détaillé :)
French Family