Outils pour utilisateurs

Outils du site


gcweb:documentation:creer_un_theme

Créer un thème

Comment réaliser ou adapter un thème ?

Depuis la version 1.0beta1 GCweb lance un assistant à l'adaptation de thème si celui-ci n'est pas encore compatible avec votre type de collection.

Pour réaliser un thème (changer l'apparence de GCweb) le plus simple est de s'inspirer du thème par défaut. Mais vous trouverez ci-dessous quelque information complémentaire.

Note : Une fois votre thème réalisé si vous voulez le partager signalez le moi via le forum (n'oubliez pas de spécifié le type de licence, par exemple CC by-nc-sa).

Glossaire

Quelques termes utilisé qui pourraient de pas être claire

  • Fichier xml d'une collection : Le fichier de sauvegarde de GCstar (utilisé par GCweb comme base de donnée).
  • <type> : Nom du type de collection (gcbook, gcfilm …).

Les différents fichiers

Un certains fichiers sont obligatoires

Fichier Commentaire
/head.php Partie haute commune à toutes les pages (entête html, titre et description du site …)
/foot.php Partie basse commune à toutes les pages (Pub pour GCweb, fermeture des balises body et html)
/main.php Partie centrale de la page d'acceuil listant les différentes collection
/list_<type>.php Partie centrale de la page listant les éléments de la collection
/item_<type>.php Partie centrale de la page affichant le détail d'un éléments
/model_add Fichier listant les modèles de page additionnel
/img/nocover.??? Image de remplacement quand celle de l'élément n'est pas trouvé

D'autres optionnels

Fichier Commentaire
/……_<type>.php D'autre partie centrale (devant être listée dans “/model_add”). Par exemple dans le thême par défaut “menu_<type>.php” (le menu commun à toute les page), “/cloud_<type>.php” (nuage de mot clef) et “/search_<type>.php” (recherche avancée)
/img/<type>_nocover.??? Image de remplacement pour le type de collection spécifique (si elle n'existe pas “/img/nocover.???” serra utilisé)

Composition des pages

+---------------------+
|        HEAD         |
|     (head.php)      |
+---------------------+
|       MIDDLE        |
|     (main.php,      |
|   list_<type>.php,  |
|   item_<type>.php,  |
|         ...)        |
+---------------------+
|         FOOT        |
|      (foot.php)     |
+---------------------+

Si pour une page (flux RSS par exemple) vous ne souhaitez pas avoir de HEAD ou FOOT vous pouvez mettre n'importe ou dans MIDDLE ~~ NOHEAD ~~ ou ~~ NOFOOT ~~.

Language des fichiers

Les fichiers du thème sont à écrire en php5. Toutes les fonctions de php5 peuvent être utilisée y compris les inculde et require. Il est donc possible d'inclure un autre fichier (comme le menu dans le thème par défaut).

Afin de facilité l'affichage des champs (liste des genres …) une série de fonction disponible dans le fichier func4tpl.php. Attention n'afficher jamais des champs avec “echo” sans être passer par une des fonctions de func4tpl.php ! Certain caractères (comme les , < >) s'afficheront mal car ils sont remplacés afin de ne pas rentrer en conflit avec certaine fonctionnalité de gcweb.

Les différentes variables

Nom Type Contient disponible
$info array Les informations entrée dans le fichier de configuration. partout
$collec array Les informations de la collection active (ou de la 1ère si elle n'est pas spécifée). Voir :gcweb:documentation:$collec pour plus de détail. partout
$bdd array Tableau de tous les élément de la collection (à parcourir avec un foreach. Chaque élément aura une structure identique à $item) tout les “MIDDLE”
$items array Tableau contenant les élément de la collection à afficher sur la page (idem $bdd) tout les “MIDDLE”
$item array Les information sur l'élément. Le nom de la clef est le nom du champ du fichier xml de sauvegarde. Quand un champs contient une liste d'élément (genres, auteurs …) la valeur est un tableau. item_<type>.php (tous les “MIDDLE” à partir de svn#261)

Les fichiers

Explication pour réalisé les fichiers

model_add

(Disponible partir de la SVN rev8)

Fichier texte se trouvant dans le dossier du thème listant les modèles de pages additionnel du thème.

Les caractères après un # seront ignoré (possibilité de mettre des commentaires). Ne pas dépasser les 255 caractères par ligne (y compris les commentaires).

Exemple :

menu            # menu commun pour chaque type de collection
main            # parti intégrer à la page d'accueil
search          # recherche avancée
cloud           # nuage de mots clef, auteurs ...
exportpage      # page avec les liens pour les différents type d'export
exportfunction  # fonction d'exportation

head.php

Partie au sommet de chaque page.

Elle doit contenir :

  • le code d'ouverture et l'entête d'une page html (<html>…<head>…</head>).
  • La partie du “<body>” commune a toute les pages.

code type :

<html>
  <head>
  ...
  </head>
  <body>
     <!-- code commun du haut de chaque page du site -->
     <div>
        <h1><?php aff($info['title']) ?></h1>
        <p><?php aff($info['description']) ?></p>
     </div>
 
     <div>
        <p>Charger une autre collection <?php aff_chooseCollec() ?></p>
     </div>
 
     <div>
         <!--Affichage des éventuelles messages d'erreur ou d'avertissement -->
         <?php aff($msg) ?>
     </div>

foot.php

Partie ce trouvant en bas de chaque page.

Elle doit contenir :

  • Une note signallant que les informations peuvent provenir de source externe.
  • Le code de fermeture de la page (</html>).
  • Et merci de mettre un petit lien vers mon site pour signaler la provenance du moteur ;-).

code type :

   <!-- code commun du pied de chaque page du site -->
     <div>
        <p>Les informations des élément de cette collection peuvent provenir de source externe. Consultez le lien source pour les connaître.</p>
        <p>Propulsé par <a href="http://jonas.tuxfamily.org/wiki/gcweb/">GCweb</a></p>
     </div>
   </body>
</html>

main.php

Contenu de la page d'acceuil.

Elle contiendra par exemple la liste de collection

code type :

   <!-- listing des collections -->
   <?php foreach ($info['collections'] as $collec) {
       if (!$collec['private']) { #regarde si c est une collection privée
          ?>
 
          <div>
               <h2><a href="<?php aff_hrefModel('list') ?>"><?php aff($collec['title']) ?>"</a></h2>
 
               <p><?php aff($collec['description']) ?></p>
 
               <p><a href="<?php aff_hrefModel('list') ?>">Voir la collection</a></p>
          </div>
         <?php
      }
   } ?>

list_<type>.php

Contenu de la page listant les éléments d'une collection. Il est nécessaire de faire une boucle php pour afficher les différents éléments.

code type :

<!-- Navigation entre les pages -->
<?php aff_prevPage(5,' - ') ; aff_currentPage() ; aff_nextPage(5,' - ') ?>
 
<?php
for ($items as $item)
{
     /*** Début de la boucle affichant les items ********************/
     ?>
 
     <!-- code type de chaque item. -->
     <h4><?php aff_linkitem($item, $item['title'])?></h4>
     <img src="<?php image($item['cover'],'auto',120) ?>">
     <ul>
        <li>auteurs : <?php aff_filter('authors==',$item['authors']) ?></li>
        <li>genre : <?php aff_filter('genre==',$item['genre'])?></li>
        <li>Note : <?php aff_star($item['rating']) ?></li>
        <li><a href="<?php aff($item['web'])?>">Source</a></li>
      </ul>
 
     <?php
     /*** Fin de la boucle ******************************************/
}     
?>
<!-- code suivant le listage des items -->

item_<type>.php

Contenu affichant les informations d'un item

code type :

<h2><?php aff_linkitem($item, $item['title'])?></h2>
<img src="<?php aff_image($item['cover'],'auto',320) ?>" />
<ul>
   <li>Isbn : <?php aff($item['isbn'])?></li>
   <li>Auteurs : <?php aff_filter('authors==',$item['authors']) ? </li>
   <li>Genre : <?php aff_filter('genre==',$item['genre'])?></li>
   <li>Description : <?php aff($item['description'])?></li>
   <li>Note : <?php aff_star($item['rating']) ?></li>
   <li><a href="<?php aff($item['web'])?>">Source</a></li>
</ul>

cloud_<type>.php

(Fichier optionnel)

Contenu de la page des nuages.

code type :

<h3>Auteurs</h3>
<?php aff_cloud('authors') ?>
 
<h3>Genre</h3>
<?php aff_cloud('genre') ?>

search_<type>.php

(Fichier optionnel)

Contenu de la page de recherche.

code type :

<?php search('start') /*Obligatoire, marque le début du formulaire*/?>
 
<ul>
    <li>Titre : <?php aff_search('title','str') /*Affiche les conditions et un champs de recherche pour le titre*/ ?></li>
    <li>Auteurs : <?php aff_search('authors','list') /*Affiche les conditions et une liste des possiblitée*/?></li>
</ul>
<strong>OU</strong>
Requete :<br/> <?php aff_search('request') ?>
 
<?php search('submit') /*Obligatoire, boutons pour lancer la recharche*/?>
<?php search('end') /*Obligatoire, marque la fin du formulaire*/?>
gcweb/documentation/creer_un_theme.txt · Dernière modification: 15/01/2010 12:34 (modification externe)