26

Mise en page

Créez site21 en copiant site20.

  1. /cms
    1. ...
    2. site20
    3. site21

Dans ce chapitre, nous allons créer un accès direct à un nœud d'un fil par défaut avec une mise en page spécifique.

Pour tester le résultat en ligne, entrez http://www.frasq.org/cms/site21 dans la barre d'adresse de votre navigateur. Cliquez sur le lien Informations légales dans le pied de page de la page d'accueil. Le site affiche le nœud 1 du fil 1 avec une mise en page simple.

Créez l'action page en ajoutant le fichier page.php dans le dossier actions avec le contenu suivant :

  1. /cms/site21
    1. actions
      1. page.php
  1. require_once 'models/thread.inc';
  2.  
  3. function page($lang, $arglist=false) {
  4.     $page=false;
  5.  
  6.     if (is_array($arglist)) {
  7.         if (isset($arglist[0])) {
  8.             $page=$arglist[0];
  9.         }
  10.     }
  11.  
  12.     if (!$page) {
  13.         return run('error/notfound', $lang);
  14.     }
  15.  
  16.     $thread_id = 1;
  17.  
  18.     $page_id = thread_node_id($thread_id, $page);
  19.     if (!$page_id) {
  20.         return run('error/notfound', $lang);
  21.     }
  22.  
  23.     $r = thread_get_node($lang, $thread_id, $page_id);
  24.     if (!$r) {
  25.         return run('error/notfound', $lang);
  26.     }
  27.     extract($r); /* node_name node_title node_abstract node_cloud node_nocomment */
  28.  
  29.     $page_name=$node_name;
  30.     $page_title=$node_title;
  31.     $page_abstract=$node_abstract;
  32.     $page_cloud=$node_cloud;
  33.  
  34.     $page_contents = build('nodecontent', $lang, $page_id);
  35.  
  36.     head('title', $page_title);
  37.     head('description', $page_abstract);
  38.     head('keywords', $page_cloud);
  39.  
  40.     $validate='/' . $lang . '/'. $page_name;
  41.     $banner = build('banner', $lang, compact('validate'));
  42.  
  43.     $content = view('page', false, compact('page_name', 'page_title', 'page_contents'));
  44.  
  45.     $output = layout('standard', compact('banner', 'content'));
  46.  
  47.     return $output;
  48. }

Remarquez que l'action page recherche les nœuds dans le fil 1.

Donnez accès à l'action page en ajoutant un alias par langue dans le fichier includes/aliases.inc :

  1.         'page'                  => 'page',
  1.         'page'                  => 'page',

Comme la vue ne dépend pas de la langue, ajoutez-la directement dans le dossier views :

  1. /cms/site21
    1. views
      1. page.phtml
  1. <h3><?php echo htmlspecialchars($page_title, ENT_COMPAT, 'UTF-8'); ?></h3>
  2. <?php
  3. if ($page_contents) {
  4.     echo $page_contents;
  5. }
  6. ?>

Ajoutez la fonction thread_get_node dans le fichier models/thread.inc :

  1. function thread_get_node($lang, $thread_id, $node_id) {
  2.     $sqllang=db_sql_arg($lang, false);
  3.  
  4.     $tabthreadnode=db_prefix_table('thread_node');
  5.     $tabnode=db_prefix_table('node');
  6.     $tabnodelocale=db_prefix_table('node_locale');
  7.  
  8.     $sql="SELECT tn.number AS node_number, nl.name AS node_name, nl.title AS node_title, nl.abstract AS node_abstract, nl.cloud AS node_cloud FROM $tabthreadnode tn JOIN $tabnode n ON n.node_id=tn.node_id JOIN $tabnodelocale nl ON nl.node_id=tn.node_id AND nl.locale=$sqllang WHERE tn.thread_id=$thread_id AND tn.node_id=$node_id LIMIT 1";
  9.  
  10.     $r = db_query($sql);
  11.  
  12.     return $r ? $r[0] : false;
  13. }

thread_get_node retourne tous les attributs pour la langue $lang du nœud dont l'identifiant est $node_id qui est dans le fil dont l'identifiant est $thread_id, ou false en cas d'erreur.

Entrez http://localhost/cms/site21/fr/page/informations-legales dans la barre d'adresse de votre navigateur. Essayez la version en anglais à l'adresse http://local.frasq.org/cms/site21/en/page/legal-information.

Modifiez l'analyse d'une URL dans la fonction route définie dans le fichier library/engine.php pour que l'action page devienne l'action par défaut :

  1.     return array('page', $args);

La dernière étape consiste à ajouter un lien dans le pied de page.

  1. /cms/site21
    1. views
      1. fr
        1. footer.phtml
      2. en
        1. footer.phtml
  1. <p><a href="<?php echo $contact_page; ?>">Contact</a>&nbsp;|&nbsp;<a href="<?php echo $base_path; ?>/fr/informations-legales">Informations légales</a>&nbsp;|&nbsp;<img src="<?php echo $base_path; ?>/images/ubuntu.png" alt="" width="16" height="16" />&nbsp;<a href="http://www.ubuntu.com" target="_blank">Ubuntu</a></p>
  1. <p><a href="<?php echo $contact_page; ?>">Contact</a>&nbsp;|&nbsp;<a href="<?php echo $base_path; ?>/en/legal-information">Legal information</a>&nbsp;|&nbsp;<img src="<?php echo $base_path; ?>/images/ubuntu.png" alt="" width="16" height="16"/>&nbsp;<a href="http://www.ubuntu.com" target="_blank">Ubuntu</a></p>

Entrez http://localhost/cms/site21/fr dans la barre d'adresse de votre navigateur. Cliquez sur le lien Informations légales dans le pied de page. Vérifiez la version en anglais.

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].