Comment créer des régions personnalisées dans un thème?

58

Je veux ajouter une nouvelle zone qui sera large du site. Décrivez le processus d'obtention de cette nouvelle région dans mon thème, si possible généralisez-le pour ajouter une nouvelle région personnalisée.

palbakulich
la source
détail blog: goo.gl/kD3TZu
Suresh Kamrushi

Réponses:

68

Vous définissez des régions dans votre fichier .info de thème. Voir: Structure du fichier .info

Vous devez ensuite mettre les balises de modèle appropriées dans votre fichier page.tpl.php.

Ainsi, par exemple, si vous avez défini la région sidebardans votre fichier .info de thèmes, vous devez alors ajouter: <?php print render($page['sidebar']); ?>à l'emplacement approprié dans votre page.tpl.php.

Camsoft
la source
6
Si votre thème ne contient pas de fichier page.tpl.php, vous pouvez copier le module par défaut du module système dans votre thème et modifier cette copie.
Mikey P
5
Omega n'a pas besoin de la partie page.tpl.php, il suffit de déclarer la région dans le fichier .info AND CLEAR CACHES.
Capi Etheriel
20

Un autre point: Ne manquez pas les régions requises!

regions[content] = Content
regions[help] = Help
regions[page_top] = Page top
regions[page_bottom] = Page bottom

Plus d'informations à ce sujet sont disponibles à l' adresse http://drupal.org/update/themes/6/7#closure .

Pour clarifier ce point: si vous définissez vos propres régions, vous devez définir tout ce que vous utilisez, y compris ceux qui sont requis. En d'autres termes, vous ne pouvez pas simplement définir des régions supplémentaires: si vous en définissez une, vous devez les définir toutes.

Laura
la source
9

Créer une région pour un thème Drupal 7 n’est pas différent de la création d’une région pour une région Drupal 6; les différences entre Drupal 7 et les versions précédentes sont essentiellement les suivantes:

  • Les régions ne sont pas définies à l'aide d'une mytheme_regions()fonction comme dans Drupal 5, mais elles sont définies dans mytheme.info à l'aide de regions[]directives, ce qui est également le cas avec les thèmes Drupal 6.
  • Les régions sont rendues à l'aide de la fonction Drupal render(), au lieu d'imprimer le contenu d'une variable.

Les régions Drupal 7 par défaut sont les suivantes:

regions[header] = Header
regions[highlighted] = Highlighted
regions[help] = Help
regions[content] = Content
regions[sidebar_first] = Left sidebar
regions[sidebar_second] = Right sidebar
regions[footer] = Footer

Les thèmes principaux de Drupal 7 incluent désormais une région nommée 'en surbrillance' qui utilise le même affichage que la zone d’énoncé de mission de Drupal 6; ils incluent également une région nommée 'help', qui a par défaut le même contenu que la $helpvariable utilisée par Drupal 6.

kiamlaluno
la source
4

Les régions de thème sont définies dans votre fichier .info de thème - voir la documentation . Ajoutez simplement une ligne avec regions[corner] = Cornerpour obtenir une région Corner.

Ensuite, vous devez éditer le fichier page.tpl.php et ajouter <php print render($corner); ?>où vous voulez que la région apparaisse. Si votre thème n'a pas de page.tpl.php, copiez-le à partir du thème de base ou du module système.

Pièges courants:

  • Si le fichier theme.info n'avait aucune région déclarée, il utilisait les régions par défaut de Drupal. Si vous voulez ajouter, vous devrez re-déclarer les régions par défaut. Vous pouvez bien sûr supprimer n'importe quelle région, mais veuillez soutenir les régions requises. Voir la documentation à nouveau.

  • Les modifications apportées au fichier .info ou l'ajout de nouveaux fichiers au thème (comme page.tpl.php) ne seront remarqués qu'une fois les caches effacées.

  • Omega, un thème de base très populaire, ne nécessitera aucun changement dans page.tpl.php, mais uniquement dans le fichier .info. Mais vous devrez visiter les paramètres de thème dans l'interface utilisateur et affecter votre région à une zone.

Capi Etheriel
la source
Ceci est une synthèse des réponses avec des pièges courants.
Capi Etheriel
La regions[content] = Contentseule région requise dans D7? drupal.org/node/171205#regions semble impliquer, mais alors drupal.org/node/171224 dit que les régions sont nécessaires content, help, page_topetpage_bottom
Jim Garrison
Je ne sais pas si Drupal vérifie l’une quelconque des régions, mais contentc’est vraiment très important. helpest supporté par core (pour afficher les messages d’aide), page_bottomc’est probablement où js en bas est imprimé et page_topsemble être utilisé pour les barres de navigation telles que celles de la barre d’outils principale.
Capi Etheriel
2

Suivez les étapes ci-dessous pour créer une région personnalisée dans votre thème:

  1. Accédez à votre fichier theme.info et ajoutez cette ligne.

    regions[machine_name_of_your_region] = Name of your region
  2. Bien que vous puissiez également appeler des blocs de région dans le modèle de nœud, vous ajouterez généralement la région au modèle de page du thème. Il s’agit généralement de page.tpl.php. Si vous avez des fichiers de modèle personnalisés pour différentes pages, modifiez-les également. La nouvelle région apparaîtra uniquement sur les pages construites autour du modèle auquel vous ajoutez la nouvelle région. Collez-le où vous voulez que votre nouvelle région apparaisse.

    <?php if ($page['machine_name_of_your_region']): ?>
      <div id="sidebar-first" class="column sidebar"><div class="section">
      <?php print render($page['machine_name_of_your_region']); ?>
      </div></div> <!-- /.section, /#sidebar-first -->
     <?php endif; ?>
    
  3. Configuration - Performances - Effacer tous les caches

Astha Chauhan
la source
0

Créer une nouvelle région dans le thème

Vous avez juste besoin de le définir dans deux fichiers.

  • Theme.info
  • Page.tpl.php

Theme.info

;;;;;;;;;;;;;;;;;;;;;
;; Regions
;;;;;;;;;;;;;;;;;;;;;

regions[navigation]      = 'Navigation'
regions[header]          = 'Top Bar'
regions[highlighted]     = 'Highlighted'
regions[new_region_name] = 'Region Name' ;; Add New Region

Page.tpl.php

Maintenant rendre cette région

  <?php if ($page['new_region']): ?>
      <div class="new_region_class">
        <?php print render($page['new_region']); ?>
     </div>
  <?php endif; ?>

Maintenant effacez tout le cache, vous avez une nouvelle région dans votre thème. Vous pouvez le voir sur votre page de configuration de bloc.

Pour plus d'informations, visitez http://drupal.org/node/171205

gsjha
la source