CSS/Thèmes : ajouter une région dans les pages

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Je souhaiterais savoir comment faire pour, à partir d'un thème (et ses fichiers theme.info, style.css, ...), insérer une nouvelle REGION CSS dans mes pages.

------> Par exemple :

Disons que j'ai un theme avec une feuille de style style.css qui déclare bien
les 4 régions suivantes :
header,
content,
sidebar-left,
footer,

Et mon souhait est de créer une région "sidebar-right".

Je le fais donc dans ma page styles.css. Par exemple :

sidebar-right {
float: right;
width: 100%;
)

Le fichier theme.info m'indique :

regions[header] = Header

regions[content] = Content

regions[left] = Sidebar left

regions[footer] = Footer

------> Est-ce uniquement au niveau de ce fichier theme.info que ça se passe ? Et que dois-je déclarer ?

Re-

Bon je ne me coucherais pas tant que je n'aurais pas résolu ça, car je
n'arrive plus à avancer sans... :)

Donc pour résumer : comment "triturer" le fichier .info dans le thème,
pour pouvoir, par exemple, créer une nouvelle région ?

J'y ai passé 2 heures, parfois un truc apparaît (je reste sur la page
"liste des blocs" de mon site), mais avec parfois un autre nom, ça ne
"répond" pas normalement...

Salut, je suis aussi en train de regarder un peu comment ça marche tout ça.

Je ne voudrais pas dire de bêtises mais, il me semble qu'en dehors de les déclarer dans le .info et dans le css il faut aussi modifier tes templates pour pouvoir les afficher.

a+

La question que je me pose, c'est s'il n'y aurait pas un fichier (un template, ou autre..) EN DEHORS du thème et donc dans les fichiers du site lui-même...

Car sur mon bouquin j'ai l'information suivante :
"Voici les 5 régions fournies par défaut :
- Left
- right
- content
- header
- footer"

Si ces régions sont par défaut, je suppose que c'est donc indépendant du thème. Le fichier qui les déclare est très important dans ce cas;..

Mais où est-il ? :-)

Effectivement il me semble avoir vu quelque chose comme ça, mais si tu déclare tes propres régions dan ton thème tu overwrite celles par défaut et donc ne surtout pas toucher à celles par défaut car si mise à jour drupal tu risque de perdre tes modifs.

Toutes tes modifs doivent être faites dans ton theme.

Un truc qui me perturbe, c'est, pour prendre un exemple très concret :

J'ai dans mon css : sidebar-second {...

Puis dans mon fichier .info la ligne suivante :
regions[right] = Second sidebar

-> Et dans mes pages apparaît bien la région "Second sidebar". Mais comment le lien se fait-il entre le fichier .info et la déclaration dans le css, alors que l'orthographe est différente ? (sidebar-second / Second sidebar) !!!

(Car au final je parviens bien à faire apparaître mes noms de régions dans mes pages, par contre ces régions ne semblent absolument pas liées à ce que j'ai écrit à leur sujet dans la page .css)

Si j'ai bien compris et dans ton exemple sa passe par la variable $right dans le template ce qui correspond à regions[right]= le nom de region.
Ensuite dans le template derrière le if $right tu peux placer des div avec ta classe css.
Enfin j'ai pas encore essayer mais je crois que c'est comme cela que sa fonctionne.
Si un spécialiste passe par ici merci de confirmer.

ps: après modif il faut apparemment vider la cache

Je comprends le principe que tu évoques.

Ceci dit j'ai écumé le fichier template.php, et tous les fichiers de type .tpl, mais pas trace des right, left, header, content ou autre... Donc au final je ne repère toujours pas le lien, malheureusement...

Disons que j'en reste au stade suivant :
- Je crée mes régions dans le fichier .info (déclaration) et dans le fichier .css (caractéristiques en css de ces régions). Elles sont alors bien présentes sur mes pages.
- Mais je peux mettre n'importe quel bloc dedans, je n'obtiens rien. Par exemple je mets la "navigation" du site dans une de mes régions, cette navigation disparaît. Mes régions créés sont comme "vides"...

(PS : oui il faut vider le cache régulièrement, à chaque changement du fichier .info)

Par exemple dans garland page.tpl.php ligne 82:

     <?php if ($right): ?>
        <div id="sidebar-right" class="sidebar">
          <?php if (!$left && $search_box): ?><div class="block block-theme"><?php print $search_box ?></div><?php endif; ?>
          <?php print $right ?>
        </div>
      <?php endif; ?>

Les 2 choses à faire :

  1. Fichier .info :
    regions[ma_nouvelle_region] = Ma nouvelle région

  2. page.tpl.php :

<?php
 
print $ma_nouvelle_region;
?>

Et enfin les 2 régions apparaissent bien sur la page. Reste une chose (post à suivre...) :-)

Reste le comment agir au niveau de la feuille de style, pour agir sur ces régions créées.

Pour reprendre le cas du thème "Basic", ça peut se passer au niveau de la feuille de style layout.css ou style.css

Affaire à suivre...

Bonjour à vous. Voici l'explication : il me manquait de déclarer la div dans le fichier php.

Du coup voilà la procédure globale, pour ceux qui ca va intéresser, pour créer une nouvelle région à laquelle on affectera ensuite diverses propriétés css :

1- Déclarer dans le fichier .info :
regions[ma_nouvelle_region] = Ma nouvelle region

2- Déclarer dans le fichier page.tpl.php :

div id="ma-nouvelle-region"

?php print $ma_nouvelle_region; ?

/div

(J'ai volontairement enlevé les < et > car sinon ça ne "passe pas")

3- Enfin dans le fichier css (dans le cas du thème "Basic", c'est layout.css et non style.css), écrire :

#
ma-nouvelle-region {
(avec ses propriétés en height, padding, margin, etc...)
}

(PS : j'ai aussi volontairement écrit Ma nouvelle region, ma_nouvelle_region et ma-nouvelle-region de 3 façons différentes pour qu'on les distingue bien dans leur déclarations diverses...)

Voilà...