25

Contenu en PHP

Créez site22 en copiant site21.

  1. /cms
    1. ...
    2. site21
    3. site22

Dans ce chapitre, nous allons ajouter du code en PHP directement dans un contenu textuel.

Pour tester le résultat en ligne, entrez http://www.frasq.org/cms/site22 dans la barre d'adresse de votre navigateur. Cliquez sur le lien Informations légales. La signature par frasq.org est précédée par la date courante qui est calculée en PHP au moment de l'affichage.

Ajoutez le fichier seval.php dans le dossier library avec le contenu suivant :

  1. /cms/site22
    1. library
      1. seval.php
  1. function seval($s) {
  2.     ob_start();
  3.     echo eval('?>'. $s);
  4.     return ob_get_clean();
  5. }

seval retourne le résultat de l'évaluation par PHP de $s. Ajouter la balise fermante ?> au début du texte protège d'une balise <?php restée ouverte dans $s et garantit que tout le code entre les balises <?php et ?> contenu dans $s sera évalué.

Testez seval :

$ php -a
php> require_once 'library/seval.php';
php> $text='<p>1 + 1 = <?php echo 1+1; ?></p>';
php> echo seval($text);
<p>1 + 1 = 2</p>
php> quit

Ajoutez le champ eval à la table content_text :

ALTER TABLE content_text ADD seval BOOLEAN NOT NULL DEFAULT '0';

Modifiez le content_text 2 en français en remplaçant la date par du code en PHP :

UPDATE content_text
SET text = '<p><i><?php setlocale(LC_TIME, ''fr_FR.UTF-8''); echo strftime(''%e %B %Y''); ?></i></p>\r\n<p><b>frasq.org</b></p>'
WHERE content_text.content_id = 2 AND content_text.locale = 'fr';

Insèrez le contenu suivant à la fin de la page en français :

<p><i><?php setlocale(LC_TIME, 'fr_FR.UTF-8'); echo strftime('%e %B %Y'); ?></i></p>
<p><b>frasq.org</b></p>

Modifiez la version en anglais :

UPDATE content_text
SET text = '<p><i><?php setlocale(LC_TIME, ''en_US.UTF-8''); echo strftime(''%B %e, %Y''); ?></i></p>\r\n<p><b>frasq.org</b></p>'
WHERE content_text.content_id = 2 AND content_text.locale = 'en';

Insère le contenu suivant à la fin de la page en anglais :

<p><i><?php setlocale(LC_TIME, 'en_US.UTF-8'); echo strftime('%B %e, %Y'); ?></i></p>
<p><b>frasq.org</b></p>

IMPORTANT : Selon le système hôte du site, le format du paramètre de la fonction setlocale peut varier.

Mettez le champ eval du content_text 2 à 1 :

UPDATE content_text SET eval = '1' WHERE content_id = 2;

Modifiez le fichier models/node.inc pour ajouter la lecture du champ eval dans la fonction node_get_contents :

  1. function node_get_contents($lang, $node_id) {
  2.     $sqllang=db_sql_arg($lang, false);
  3.  
  4.     $tabnodecontent=db_prefix_table('node_content');
  5.     $tabcontenttext=db_prefix_table('content_text');
  6.  
  7.     $sql="SELECT nc.content_id AS content_id, nc.content_type AS content_type, nc.number AS content_number, ct.text AS content_text, ct.eval AS content_eval FROM $tabnodecontent nc LEFT JOIN $tabcontenttext ct ON nc.content_type='text' AND ct.content_id=nc.content_id AND ct.locale=$sqllang WHERE nc.node_id=$node_id ORDER BY nc.number";
  8.  
  9.     $r = db_query($sql);
  10.  
  11.     return $r;
  12. }

Ajoute le retour d'un champ appelé content_eval à un contenu.

Modifiez le fichier blocks/nodecontent.php pour prendre en compte la valeur du champ content_eval :

  1.                 case 'text':
  2.                     $s = $c['content_text'];
  3.                     if (!empty($s)) {
  4.                         $eval = $c['content_eval'] == 1 ? true : false;
  5.                         if ($eval) {
  6.                             require_once 'seval.php';
  7.                             $s = seval($s);
  8.                         }
  9.                         $text = $s;
  10.                         $contents[] = compact('type', 'text');
  11.                     }
  12.                     break;

Passe la valeur de content_text à seval si content_eval vaut 1.

Entrez http://localhost/cms/site22/fr dans la barre d'adresse de votre navigateur. Cliquez sur le lien Informations légales. Vérifiez que la signature est précédée de la date du jour.

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].