Dernière mise à jour : 26/08/2014 à 13h34
Table des matières
Introduction
Ce tutoriel va vous expliquer comment ajouter dans votre page d'accueil des éléments provenant de la base de donnée.
La fonction PHP
Nous allons prendre pour exemple la récupération d’éléments du module download.
Récupérer les données de la base de donnée
Nous allons ajouter la fonction suivante dans le fichier HomeCustomHomePageExtensionPoint.class.php du répertoire /HomeCustom/PHPBoost.
Code PHP :
private function build_view() { }
Dans notre cas, nous allons récupérer les éléments de deux catégories.
Notre fonction build_view doit contenir l’élément suivant :
Code PHP :
$id_cats = array('25', '74');
Pour récupérer les données, nous devons réaliser une requête SQL :
Code PHP :
Cette fonction permet de récupérer les éléments id, idcat, title, short_contents, timestamp, image de la table download ainsi que le login.$querier = PersistenceContext::get_querier(); $results = $querier->select('SELECT file.id, file.idcat, file.title, file.short_contents, file.timestamp, file.image, user.login FROM ' . PREFIX . 'download file LEFT JOIN ' . DB_TABLE_MEMBER . ' user ON user.user_id = file.user_id WHERE visible = 1 AND approved = 1 AND file.idcat IN (' . implode(', ', $id_cats) . ') ORDER BY timestamp DESC');
Une fois la base de données récupérer, nous faisons appel à une nouvelle fonction (que nous allons créer) pour traiter les données.
Code PHP :
$this->build_modules_view($results);
Le traitement des données
Toujours dans le fichier HomeCustomHomePageExtensionPoint.class.php du répertoire /HomeCustom/PHPBoost , nous allons ajouter la fonction suivante :
Code PHP :
private function build_modules_view(SelectQueryResult $results)
Pour rester assez simple, nous allons séparer le chaque élement dans un fichier HTML différent.
Nous allons faire appel au fichier modules.tpl que nous allons créer par la suite.
Code PHP :
$tpl = new FileTemplate('HomeCustom/modules.tpl');
Dans notre exemple, nous allons afficher les 3 premier élements (les 3 plus récents)
Code PHP :
foreach ($results as $row) { if ($i >= 3) { break; } $link = new Url('/download/download' . url('.php?id=' . $row['id'], '-' . $row['id'] . '+' . Url::encode_rewrite($row['title']) . '.php')); $tpl->assign_block_vars('item', array( 'U_LINK' => $link->absolute(), 'U_IMG' => Url::to_absolute($row['image']), 'C_IMG' => !empty($row['image']), 'TITLE' => $row['title'], 'DESC' => $row['short_contents'], 'PSEUDO' => $row['login'] )); $i++; }
Nous allons parcourir tous les résultats (foreach ($results as $row)), si on dépasse trois, on arrête ( if ($i >= 3) { break; } ).
On créer la référence du lien pour aller sur la page du module download ( $link = new Url ... )
On créer les différents élements pour l'affichage dans le code HTML avec comme nom 'item'
Enfin pour finaliser, on transmet toutes les donnés au tpl concerné
Code PHP :
$this->template->put('MODULES', $tpl);
Faire appel à notre nouvelle fonction
Bien sûr il est nécessaire de faire appel à la fonction build_view().
Ajouter dans la fonction get_view l'appel à la fonction build_view de la manière suivante :
Code PHP :
private function get_view() { $this->template = new FileTemplate('HomeCustom/home.tpl'); $this->build_view(); return $this->template; }
Le code complet
Caché :
Code PHP :
<?php /*################################################## * HomeCustomHomePageExtensionPoint.class.php * ------------------- * begin : August 25, 2012 * copyright : (C) 2012 Kevin MASSY * email : kevin.massy@phpboost.com * * ################################################### * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ###################################################*/ class HomeCustomHomePageExtensionPoint implements HomePageExtensionPoint { private $template; public function get_home_page() { $columns_disabled = Environment::get_graphical_environment()->get_columns_disabled(); $columns_disabled->set_disable_left_columns(true); $columns_disabled->set_disable_right_columns(true); $columns_disabled->set_disable_top_central(true); $columns_disabled->set_disable_bottom_central(true); return new DefaultHomePage($this->get_title(), $this->get_view()); } private function get_title() { return LangLoader::get_message('title', 'common', 'HomeCustom'); } private function get_view() { $this->template = new FileTemplate('HomeCustom/home.tpl'); $this->build_view(); return $this->template; } private function build_view() { $id_cats = array('24', '74'); $querier = PersistenceContext::get_querier(); $results = $querier->select('SELECT file.id, file.idcat, file.title, file.short_contents, file.timestamp, file.image, user.login FROM ' . PREFIX . 'download file LEFT JOIN ' . DB_TABLE_MEMBER . ' user ON user.user_id = file.user_id WHERE visible = 1 AND approved = 1 AND idcat IN (' . implode(', ', $id_cats) . ') ORDER BY timestamp DESC'); $this->build_modules_view($results); } private function build_modules_view(SelectQueryResult $results) { $tpl = new FileTemplate('HomeCustom/modules.tpl'); $i = 0; foreach ($results as $row) { if ($i >= 3) { break; } $link = new Url('/download/download' . url('.php?id=' . $row['id'], '-' . $row['id'] . '+' . Url::encode_rewrite($row['title']) . '.php')); $tpl->assign_block_vars('item', array( 'U_LINK' => $link->absolute(), 'U_IMG' => Url::to_absolute($row['image']), 'C_IMG' => !empty($row['image']), 'TITLE' => $row['title'], 'DESC' => $row['short_contents'], 'PSEUDO' => $row['login'] )); $i++; } $this->template->put('MODULES', $tpl); } } ?>
Le code HTML
Il vous suffit de créer le fichier modules.tpl dans le répertoire /HomeCustom/templates et d'y ajouter l'affiche que vous souhaitez avec le code CSS que vous souhaitez.
Code TPL :
Chaque élément récupéré dans la base de donnée sera affiché de la manière précedente.# START item # <div class="votre classe CSS"> <a href="{item.U_LINK}"> <p class="lm_img_container"> # IF item.C_IMG # <img src="{item.U_IMG}" title="{item.TITLE}" alt="{item.TITLE}" class="votre classe CSS" /> # ENDIF # </p> </div> <p class="votre classe CSS">{item.TITLE}</p> <p class="votre classe CSS">{item.DESC}</p> <p class="votre classe CSS"> par : <span>{item.PSEUDO}</span></p> </a> </div> # END item #
Finalement, il faut appeler ce second tpl dans le tpl principal home.tpl
Pour cela, il suffit d'ajouter
Code TPL :
dans le fichier home.tpl à l'endroit souhaité.# INCLUDE MODULES #
Utilisation des flux
Nous pouvons aussi utiliser simplement les flux disponible par PHPBoost. C'est beaucoup plus rapide en code, mais moins personnalisable.
Pour ce faire, il vous suffit :
- D'ajouter dans le fichier HomeCustomHomePageExtensionPoint.class.php la fonction suivante :
(Nous avons pris comme exemple l'ajout du flux des news.
Code PHP :private function build_feed_news_view() { $feed_template = new FileTemplate('HomeCustom/feed_news.tpl'); $this->template->put('FEED_NEWS', Feed::get_parsed('news', Feed::DEFAULT_FEED_NAME, 0, $feed_template, 5, 1)); }
- D'ajouter une appel à cette fonction dans build_view ou get_view si vous n'avez pas besoin de build_view:
Code PHP :$this->build_feed_news_view();
- De créer votre fichier feed_news.tpl :
- Faire appel au nouveau tpl dans le home.tpl :
Code TPL :{FEED_NEWS}