Contenu en PHP
Créez site22 en copiant site21.
- /cms
- ...
- site21
- 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 :
- /cms/site22
- library
- seval.php
- library
- function seval($s) {
- ob_start();
- echo eval('?>'. $s);
- return ob_get_clean();
- }
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
:
Modifiez le content_text
2 en français en remplaçant la date par du code en PHP :
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><b>frasq.org</b></p>
Modifiez la version en anglais :
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><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 :
Modifiez le fichier models/node.inc pour ajouter la lecture du champ eval
dans la fonction node_get_contents
:
- function node_get_contents($lang, $node_id) {
- $sqllang=db_sql_arg($lang, false);
- $tabnodecontent=db_prefix_table('node_content');
- $tabcontenttext=db_prefix_table('content_text');
- $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";
- $r = db_query($sql);
- return $r;
- }
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
:
- case 'text':
- $s = $c['content_text'];
- if (!empty($s)) {
- $eval = $c['content_eval'] == 1 ? true : false;
- if ($eval) {
- require_once 'seval.php';
- $s = seval($s);
- }
- $text = $s;
- $contents[] = compact('type', 'text');
- }
- 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