Insertion d'un fichier
Créez site23 en copiant site22.
- /cms
- ...
- site22
- site23
Dans ce chapitre, nous allons insérer un contenu à partir d'un fichier externe.
Pour tester le résultat en ligne, entrez http://www.frasq.org/cms/site23 dans la barre d'adresse de votre navigateur. Cliquez sur la coccinelle dans les bambous. La page affiche les informations retournées par PHP sur le système hôte.
Ajoutez le fichier sysinfo.php dans le dossier files avec le contenu suivant :
- /cms/site23
- files
- sysinfo.php
- files
- <p>PHP <?php echo phpversion(); ?><br />
- MySQL <?php echo mysql_get_server_info(); ?><br />
- <?php echo php_uname('s'); ?> <?php echo php_uname('r'); ?></p>
Testez le programme :
$ php -a
php> require_once 'includes/db.inc';
php> require_once 'library/db.php';
php> db_connect($db_url);
php> include 'files/sysinfo.php';
<p>PHP 5.3.2-1ubuntu4.7<br />
MySQL 5.1.41-3ubuntu12.10<br />
Linux 2.6.32-30-generic</p>
php> quit
Créez la table content_infile
:
content_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
locale enum('fr','en') NOT NULL DEFAULT 'fr',
`path` VARCHAR(200) DEFAULT NULL,
PRIMARY KEY (content_id,locale)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Ajoutez un contenu en français et en anglais :
(1, 'fr', 'files/sysinfo.php'),
(1, 'en', 'files/sysinfo.php');
Ajoutez un nouveau node
:
(2, 1, NOW(), NOW());
Complétez le node
par ses versions en français et en anglais dans node_locale
:
('2', 'fr', 'informations-systeme', 'Informations système', 'version PHP MySQL Linux', 'Versions de PHP, de MySQL et du système.'),
('2', 'en', 'system-information', 'System information', 'version PHP MySQL Linux', 'PHP, MySQL and system versions.');
Ajoutez le node
2 au thread
1 :
('1', '2', '1');
Ajoutez le type de contenu infile
à la table node_content
:
CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT 'text';
Ajoutez le content_infile
1 au node
2 :
VALUES ('2', '1', 'infile', '1');
Essayez quelques requêtes sur la BD :
FROM thread_node tn
JOIN node n ON n.node_id=tn.node_id
JOIN node_locale nl ON nl.node_id=tn.node_id AND nl.locale='en'
WHERE tn.thread_id=1 AND tn.node_id=2
LIMIT 1;
Retourne le nœud 2 en anglais.
FROM node_content nc
LEFT JOIN content_text ct ON nc.content_type = 'text'
AND ct.content_id = nc.content_id
AND ct.locale = 'fr'
LEFT JOIN content_infile cin ON nc.content_type = 'infile'
AND cin.content_id = nc.content_id
AND cin.locale = 'fr'
WHERE nc.node_id =2
ORDER BY nc.`number`;
Retourne tous les contenus du nœud 2 en français.
Modifiez le fichier models/node.inc pour ajouter la lecture de la table content_infile
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');
- $tabcontentinfile=db_prefix_table('content_infile');
- $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, cin.path AS content_infile FROM $tabnodecontent nc LEFT JOIN $tabcontenttext ct ON nc.content_type='text' AND ct.content_id=nc.content_id AND ct.locale=$sqllang LEFT JOIN $tabcontentinfile cin ON nc.content_type='infile' AND cin.content_id=nc.content_id AND cin.locale=$sqllang WHERE nc.node_id=$node_id ORDER BY nc.number";
- $r = db_query($sql);
- return $r;
- }
Joint le contenu de la table content_file
et ajoute le champ content_infile
au tableau retourné.
Modifiez le fichier blocks/nodecontent.php pour prendre en compte le type de contenu infile
:
- case 'infile':
- $infile=$c['content_infile'];
- if ($infile) {
- $contents[] = compact('type', 'infile');
- }
- break;
Passe simplement le nom du fichier à la vue.
Ajoutez le traitement d'un contenu du type infile
par la vue dans le fichier views/nodecontent.phtml :
- foreach ($contents as $c) {
- switch($c['type']) {
- case 'text':
- $s = $c['text'];
- echo $s, PHP_EOL;
- break;
- case 'infile':
- include $c['infile'];
- break;
- default:
- break;
- }
- }
Insère le fichier avec la fonction include
de PHP. IMPORTANT : Le contenu du fichier est évalué par PHP.
Ajoutez la vue qui construit le panneau dans les dossiers views/fr pour la version en français et views/en pour la version en anglais :
- /cms/site23
- views
- fr
- board.phtml
- en
- board.phtml
- fr
- views
- <div id="board">
- <a id="bug" href="<?php echo $base_path; ?>/fr/informations-systeme"></a>
- </div>
- <div id="board">
- <a id="bug" href="<?php echo $base_path; ?>/en/system-information"></a>
- </div>
Ces vues n'affichent rien. Les images sont placées par la feuille de style. Ajoutez le contenu suivant au fichier css/theme.css :
- #board {height:200px;margin-bottom:0.5em;background:transparent url(../images/bamboo.png) no-repeat center center;}
- #board #bug {float:right;width:64px;height:64px;position:relative;background:transparent url(../images/ladybug.png) no-repeat;cursor:default;}
- #board #bug {top:156px;right:210px;}
- #board #bug:hover {top:158px;right:213px;}
Ajoutez les images pour le fond du panneau et la coccinelle dans le dossier images :
- /cms/site23
- images
- bamboo.png
- ladybug.png
- images
Modifiez la page d'accueil :
- $board = view('board', $lang);
Fabrique le panneau.
- $output = layout('home', compact('footer', 'banner', 'board', 'content'));
Fabrique la page d'accueil avec un modèle de document particulier.
Ajoutez le modèle de document home.phtml qui est spécifique à la page d'accueil dans le dossier layouts :
- /cms/site23
- layouts
- home.phtml
- layouts
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <?php echo $head; ?>
- </head>
- <body>
- <?php echo $banner; ?>
- <?php echo $board; ?>
- <div id="content">
- <?php echo $content; ?>
- </div>
- <?php if (isset($footer)): ?>
- <?php echo $footer; ?>
- <?php endif; ?>
- </body>
- </html>
Place l'en-tête du document puis le bandeau, le panneau, le contenu et le pied de page du corps.
Entrez http://localhost/cms/site23/fr dans la barre d'adresse de votre navigateur. Déplacez le pointeur de la souris sur la coccinelle. Elle doit bouger. Cliquez. Le site affiche la page d'information sur le système. Vérifiez la version en anglais.
Commentaires