HomeCustom : last_articles, last_news, last_events [Réglé]
jpalbert92 Membre non connecté
-
Booster Fuzil
- Voir le profil du membre jpalbert92
- Inscrit le : 27/04/2014
LE LIEN EST => ICIBonjour,
Suite à la demande de Janus57, je créais un nouveau sujet pour des question de recherche.
J'ai pu à l'aide de Janus récupérer les derniers articles et les dernières news publiées. Mais il se trouve que j'ai encore 2 petit soucis.
- Problème pour récupérer les description.
- Problème pour récupérer les événements.
Je propose qu'on commence déjà d'une part par régler le problème le plus simple qui est la récupération des description (pour les articles) ou short_content (pour les news). En effet, il se trouve qu'en allant chercher sur la table la colonne short_content et le placer dans le .php puis dans le .tpl il ne s'affiche rien. Ceci me semble logique parce qu'il n'y a rien dans cette colonne. Mais PHPBoost arrive à gérer le fait qu'il n'y ai rien et reprend les 128 premier caractère de la colonne content. Comment pourrais-je les récupérer si je ne met aucune description ? Quel algorithme dois-je créer ?
Par la suite, je vous poste mon code .php qui a essayer de récupérer les événements. Je trouve cette tâche plutôt difficile puisque pour récupérer le calendrier faut jouer sur 3 entités :
- calendar_cats
- calendar_events
- calendar_events_content
Voici ce que j'ai essayer de faire tout en sachant que la requête SQL est fausse et que le $link aussi puisque je ne sais pas comment définir le $category présent dans le link.
<?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(false); //passer à "true" pour désactiver $columns_disabled->set_disable_right_columns(false); $columns_disabled->set_disable_top_central(false); $columns_disabled->set_disable_bottom_central(false); 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() { $now = new Date(); $querier = PersistenceContext::get_querier(); $results = $querier->select('SELECT calendar_events_content.id, calendar_events_content.id_category, calendar_events_content.title, calendar_events_content.rewrited_title, calendar_events_content.contents, calendar_events_content.location, calendar_events_content.author_id, calendar_events.id_event, calendar_events.content_id, calendar_events.start_date, calendar_events.end_date, calendar_cats.id FROM ' . PREFIX . 'calendar_events, ' . PREFIX . 'calendar_cats, ' . PREFIX . 'calendar_events_content LEFT JOIN ' . PREFIX . 'calendar_events_content ON calendar_events_content.id = event.content_id LEFT JOIN ' . PREFIX . 'member ON member.user_id = calendar_events_content.author_id LEFT JOIN ' . PREFIX . 'calendar_cats ON calendar_cats.id = calendar_events_content.id_category WHERE approved = 1 ORDER BY start_date', array( 'timestamp_now' => $now->get_timestamp() )); $this->build_events_view($results); } private function build_events_view(SelectQueryResult $results) { $tpl = new FileTemplate('HomeCustom/events.tpl'); $i = 0; foreach ($results as $row) { if ($i >= 3) { break; } $link = CalendarUrlBuilder::display_event($category->get_id(), $category->get_rewrited_name() ? $category->get_rewrited_name() : 'root', $event->get_id(), $event->get_content()->get_rewrited_title()); $tpl->assign_block_vars('events_items', array( 'U_LINK' => $link->absolute(), 'TITLE' => $row['title'], 'CONTENTS' => $row['contents'], 'LOCATION' => $row['location'], 'START' => $row['start_date'], )); $i++; } $this->template->put('EVENTS', $tpl); } } ?>
Merci d'avance à ceux qui pourront m'aider dans la conception de ma page d'accueil, Jpa92.
Édité par jpalbert92 Le 15/03/2015 à 22h05

janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
Pour la description y a 2 choix, soir cela récupère la description en BDD, soit cela récupère le contenu qui se faire couper.
Pour le SQL du calendar tu peu essayer un truc du genre :
$result = $querier->select('SELECT * FROM ' . PREFIX . 'calendar_events event LEFT JOIN ' . PREFIX . 'calendar_events_content event_content ON event_content.id = event.content_id LEFT JOIN ' . DB_TABLE_MEMBER . ' member ON member.user_id = event_content.author_id LEFT JOIN '. PREFIX . 'calendar_cats cat ON cat.id = event_content.id_category WHERE approved = 1 ORDER BY start_date DESC');
Cordialement, janus57
olivierb Membre non connecté
-
Modérateur
- Voir le profil du membre olivierb
- Inscrit le : 07/02/2014
- Site internet
- Groupes :
-
Equipe Assistance
Je n'y connais pas grand chose mais l'idée ne serait-elle pas de suivre la piste du module mini Calendar ?
Olivier.

jpalbert92 Membre non connecté
-
Booster Fuzil
- Voir le profil du membre jpalbert92
- Inscrit le : 27/04/2014
Effectivement Janus il y a bien que 2 solutions. Mais comment faire pour tronquer le nombre de caractère ? Car je pense que c'est une classe prédéfini un fichier .php du module article et que je n'ai pas copié sur le module HomeCustom parceque je ne sais vraiment pas comment faire. L'idée serait sur un langage excel : " SI(ESTVIDE(descritption);content;description) Soit Si description ne contient rien alors on prend le content sinon on prend la description"
Ah ouais exact en php j'avais remarqué qu'il n'était pas utile d'ajouter au FROM les entité présente dans les jointures à l'inverse du SQL brut.
Alors j'ai remplacer le code par le précédent et il m'affiche une erreur que je n'ai jamais vu.
Ma ligne 68 :
$this->build_events_view($results);
J'ai l'impression qu'il me dit que la variable $this est nulle pourquoi ?
Oliverb, à vrai dire c'est ce que j'essai de faire mais le module calendrier est vraiment très complexe car il gère plusieurs fonction en même temps donc j'essai de l'éplucher masi la tâche est pas facile quand on est pas un crack en PHP. Le code permettant de récupérer les événements est associé à d'autre code qui gère autre chose j'ai l'impression et il m'est pas facile de l'extraire afin de le rendre indépendant si tu vois ce que je veux dire ?

janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
Tu as repris le fichier PHP pour les articles, et essayer avec le code SQL plus haut ?
Et faut pas dupliquer le fichier "HomeCustomHomePageExtensionPoint.class.php" pour chaque module, dans 1 seule et unique "HomeCustomHomePageExtensionPoint.class.php" tu doit mettre le SQL pour articles, calendar et news
Cordialement, janus57
jpalbert92 Membre non connecté
-
Booster Fuzil
- Voir le profil du membre jpalbert92
- Inscrit le : 27/04/2014
Tu as repris le fichier PHP pour les articles, et essayer avec le code SQL plus haut ?
Oui j'ai bien récupérer le fichier .articles mais j'étais obligé de modifier les noms et le $link sinon ce n'est pas logique. En fait je m'en suis servis de base. Tellement j'ai laissé les commentaire regarde le fichier ci-dessous. Mais je ne pouvais par exemple pas garder cette ligne :
(cat.rewrited_name AS rewrited_name_cat | cat.rewrited_name <=> cat.id = articles.id_category)
Puisqu'on ne peut renommer les événements. Ai-je eut tord ?
Puisque ce fichier comporte les commentaires insérés par toi même (Janus57) afin de m'expliquer d'avantage le cheminement et la logique du code php, le problème n'est plus à la ligne 68 mais 73 qui représente toujours la même ligne en sois.
$this->build_events_view($results);
<?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(false); //passer à "true" pour désactiver $columns_disabled->set_disable_right_columns(false); $columns_disabled->set_disable_top_central(false); $columns_disabled->set_disable_bottom_central(false); 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() { $now = new Date(); $querier = PersistenceContext::get_querier(); $result = $querier->select('SELECT * FROM ' . PREFIX . 'calendar_events event LEFT JOIN ' . PREFIX . 'calendar_events_content event_content ON event_content.id = event.content_id LEFT JOIN ' . DB_TABLE_MEMBER . ' member ON member.user_id = event_content.author_id LEFT JOIN '. PREFIX . 'calendar_cats cat ON cat.id = event_content.id_category WHERE approved = 1 ORDER BY start_date'); /* On selectionne tous les champs lié aux articles (id, id_category, title, rewrited_title, picture_url, contents, description, date_created) on regarde dans quel catégories est l'articles (cat.rewrited_name AS rewrited_name_cat | cat.rewrited_name <=> cat.id = articles.id_category) Aussi on va chercher les info sur le membre (member.login <=> member.user_id = articles.author_user_id) Et enfin on fait bien attention a récupérer un article qui a été publié avec autorisation ou différé après heure (on recup pas les articles en attente de contribution). */ $this->build_events_view($results); } private function build_events_view(SelectQueryResult $results) { // ici les résultats seront envoyé dans articles.tpl $tpl = new FileTemplate('HomeCustom/events.tpl'); $i = 0; foreach ($results as $row) { if ($i >= 3) //si plus de 3 on casse { break; } // je me prend pas la tête j'utilise le builder du module articles, comme ça je suis sure que le lien généré sera correcte. $link = CalendarUrlBuilder::display_event($category->get_id(), $category->get_rewrited_name() ? $category->get_rewrited_name() : 'root', $event->get_id(), $event->get_content()->get_rewrited_title()); // ici sa boucle et on fait correspondre le tableau extrait de la BDD avec des variables TPL $tpl->assign_block_vars('events_items', array( 'U_LINK' => $link->absolute(), 'TITLE' => $row['title'], 'CONTENTS' => $row['contents'], 'LOCATION' => $row['location'], 'START' => $row['start_date'], )); $i++; } // ici c'est pour "pousser" articles.tpl via # INCLUDE ARTICLES # dans le home.tpl $this->template->put('EVENTS', $tpl); } } ?>
Oui, j'en suis bien conscient mais je préfère faire étape par étape : Regarder si ça marche uniquement avec le code du module news, puis articles et enfin events. C'est à la fin que je réunis les 3 fichier en 1. C'est beaucoup plus simple pour la relecture s'il faut modifier le code incorrect. Pour le module news et articles le code est fini à 95% de mes attentes. Les 5% manquant sont de gérer le cas de la description et du short_content. Par contre, pour le module calendar c'est un tout autre fonctionnement j'ai l'impression.

janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
renomme build_events_view en build_events_view_articles puis tu re-fait une fonction build_events_view_news puis build_events_view_calendar etc...
1 fonction = 1 module
Cordialement, janus57
jpalbert92 Membre non connecté
-
Booster Fuzil
- Voir le profil du membre jpalbert92
- Inscrit le : 27/04/2014
Mais ça va revenir au même en fait Janus57 puisque pour l'instant si tu veux je ne m'occupe plus du module article et news je les met sur le côté puisque je sais qu'ils fonctionnent. Donc j'ai enlevé le code les concernant du fichier HomeCustomHomePageExtensionPoint.class.php
Voila là code de mes fichiers en fait
<?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(false); //passer à "true" pour désactiver $columns_disabled->set_disable_right_columns(false); $columns_disabled->set_disable_top_central(false); $columns_disabled->set_disable_bottom_central(false); 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() { $now = new Date(); $querier = PersistenceContext::get_querier(); $result = $querier->select('SELECT * FROM ' . PREFIX . 'calendar_events event LEFT JOIN ' . PREFIX . 'calendar_events_content event_content ON event_content.id = event.content_id LEFT JOIN ' . DB_TABLE_MEMBER . ' member ON member.user_id = event_content.author_id LEFT JOIN '. PREFIX . 'calendar_cats cat ON cat.id = event_content.id_category WHERE approved = 1 ORDER BY start_date'); /* On selectionne tous les champs lié aux articles (id, id_category, title, rewrited_title, picture_url, contents, description, date_created) on regarde dans quel catégories est l'articles (cat.rewrited_name AS rewrited_name_cat | cat.rewrited_name <=> cat.id = articles.id_category) Aussi on va chercher les info sur le membre (member.login <=> member.user_id = articles.author_user_id) Et enfin on fait bien attention a récupérer un article qui a été publié avec autorisation ou différé après heure (on recup pas les articles en attente de contribution). */ $this->build_events_view($results); } private function build_events_view(SelectQueryResult $results) { // ici les résultats seront envoyé dans articles.tpl $tpl = new FileTemplate('HomeCustom/events.tpl'); $i = 0; foreach ($results as $row) { if ($i >= 3) //si plus de 3 on casse { break; } // je me prend pas la tête j'utilise le builder du module articles, comme ça je suis sure que le lien généré sera correcte. $link = CalendarUrlBuilder::display_event($category->get_id(), $category->get_rewrited_name() ? $category->get_rewrited_name() : 'root', $event->get_id(), $event->get_content()->get_rewrited_title()); // ici sa boucle et on fait correspondre le tableau extrait de la BDD avec des variables TPL $tpl->assign_block_vars('events_items', array( 'U_LINK' => $link->absolute(), 'TITLE' => $row['title'], 'CONTENTS' => $row['contents'], 'LOCATION' => $row['location'], 'START' => $row['start_date'], )); $i++; } // ici c'est pour "pousser" articles.tpl via # INCLUDE ARTICLES # dans le home.tpl $this->template->put('EVENTS', $tpl); } } ?>
# START events_items # <hr> <div class=""> <a href="{events_items.U_LINK}"><p class="">{events_items.TITLE}</p></a> <p class="">{events_items.LOCATION}</p> <p class="">{events_items.START}</p> </div> # END events_items #
<div class="center">Votre Page d'accueil</div> # INCLUDE EVENTS #
Tu vois ce que je veux dire ?

janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
Tu essaye de faire quoi exactement, je pense que ce sera plus simple de donner la finalité de la chose plutôt que de donner des codes faux qui sont peut être faux dans leur conception ou du moins dans leur façons de faire.
Là pour moi le SQL est pas juste, tu fait un "ORDER BY start_date" mais tu as oublié de dire comment il me semble (le SQL c'est pas mon fort).
Cordialement, janus57
jpalbert92 Membre non connecté
-
Booster Fuzil
- Voir le profil du membre jpalbert92
- Inscrit le : 27/04/2014
En fait je m'explique Janus, ce que je cherche à faire c'est de récupérer les 3 prochains événements du calendrier. Autrement dit il faut gérer le fait si l'événement est passé ou s'il va arrivé. Donc l'ordre d'affichage serait
(événement jour J-1) entre () car il ne faut pas l'affiché puisqu'il est passé
1. événement jour J
2. événement jour J+1
3. événement jour J+2
(événements jour J+3) entre parenthèse car il ne faut pas l'affiché puisqu'on récupère les 3 prochains événements
Et pour ce qui concerne le SQL je sais que dans le SQL brut quand on ne précise pas l'ordre, l'ordre est par défaut en ASC soit ascendant alors que quand tu veux inverser la chose tu es obligatoirement obligé de le préciser par DESC soit descendant. Ainsi, dans ce cas nous voulons l'ordre chronologique donc c'est dans l'ordre ascendant (J ; J+1 ; J+2) sinon si on met descendant ça serait (J+2 ; J+1 ; J ) Tu vois ce que je veux dire ? A moins que je me trompe dans mon raisonnement car je m'embrouille du coup là mdr
Mais comme je t'ai dis je parle en SQL brut moi celui qu'on apprend à l'école lol

jpalbert92 Membre non connecté
-
Booster Fuzil
- Voir le profil du membre jpalbert92
- Inscrit le : 27/04/2014
En attendant l'avancement de cette page, je vous propose déjà la solution pour afficher les 3 derniers articles et les 3 dernières news.
Les explications sont disponible en commentaire, je ne sais pas si le code est optimal mais il fonctionne bien ! Je précise bien que l'aide de Janus57 m'étais précieuse.
Venons-en vraiment au fait : Il vous faudra créer 2 fichiers et en modifier 2.
Pour que vous comprenez il suffit de créer les 2 requêtes SQL permettant de récupérer tous les articles et toutes les news, que nous définirons (ceci permettra de mieux les personnaliser en CSS par la suite, de récupérer seulement les 3 dernières). Ensuite nous créerons les fichier TPL concernant les articles et les news (ici on mettra du code HTML/CSS) que nous apellerons dans le fichier Home.tpl.
En résumé, nous devons modifier les fichiers suivants du module HomeCustom :
- HomeCustomHomePageExtensionPoint.class.php
- Home.tpl
Puis nous devrons créer dans le dossier templates les fichiers suivant :
- articles.tpl
- news.tpl
- Dans un premier temps nous modifions donc le fichier HomeCustomHomePageExtensionPoint.class.php par :
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(false); //passer à "true" pour désactiver $columns_disabled->set_disable_right_columns(false); $columns_disabled->set_disable_top_central(false); $columns_disabled->set_disable_bottom_central(false); 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() { /**************************************************** ************* DEBUT REQUETE SQL ARTICLES ************ *****************************************************/ $now = new Date(); $querier = PersistenceContext::get_querier(); $results_articles = $querier->select('SELECT articles.id, articles.id_category, articles.title, articles.rewrited_title, articles.picture_url, SUBSTRING(articles.contents,1,128) AS contents, articles.description, articles.date_created, member.login, cat.rewrited_name AS rewrited_name_cat FROM ' . PREFIX . 'articles articles LEFT JOIN ' . PREFIX . 'articles_cats cat ON cat.id = articles.id_category LEFT JOIN ' . DB_TABLE_MEMBER . ' member ON member.user_id = articles.author_user_id WHERE (published = 1 OR (published = 2 AND publishing_start_date < :timestamp_now AND (publishing_end_date > :timestamp_now OR publishing_end_date = 0))) ORDER BY articles.date_created DESC', array( 'timestamp_now' => $now->get_timestamp() )); /* SELECT = On selectionne tous les champs liés aux articles (id, id_category, title, rewrited_title, picture_url, contents, description, date_created) ATTENTION j'ai limité le contents à 128 caractères : SUBSTRING(articles.contents,1,128) FROM = Dans quelles entités sont issues les champs LEFT JOIN = On fait la jointure afin de dire que les clefs primaire sont identiques. Donc on regarde dans quel catégories est l'articles (cat.rewrited_name AS rewrited_name_cat | cat.rewrited_name <=> cat.id = articles.id_category) N'oublions pas la jointure sur la table de membre afin de récupérer les info sur le membre (member.login <=> member.user_id = articles.author_user_id) AND = On fait bien attention a récupérer un article qui a été publié avec autorisation ou différé après heure (on recup pas les articles en attente de contribution). ODRDER BY = On classe les articles par la date de création et par ordre décroissant (DESC, le plus récent en premier et le plus anciens en dernier) */ $this->build_articles_view($results_articles); /**************************************************** ************* FIN REQUETE SQL ARTICLES ************** *****************************************************/ /**************************************************** ************* DEBUT REQUETE SQL NEWS **************** *****************************************************/ $now = new Date(); $querier = PersistenceContext::get_querier(); $results_news = $querier->select('SELECT news.id, news.id_category, news.name, news.rewrited_name, news.picture_url, SUBSTRING(news.contents,1,250) AS contents, news.short_contents, news.creation_date, member.login, cat.rewrited_name AS rewrited_name_cat FROM ' . PREFIX . 'news news LEFT JOIN ' . PREFIX . 'news_cats cat ON cat.id = news.id_category LEFT JOIN ' . DB_TABLE_MEMBER . ' member ON member.user_id = news.author_user_id WHERE (approbation_type = 1 OR (approbation_type = 2 AND start_date < :timestamp_now AND (end_date > :timestamp_now OR end_date = 0))) ORDER BY news.creation_date DESC', array( 'timestamp_now' => $now->get_timestamp() )); /* Même principe que précédemment */ $this->build_news_view($results_news); /**************************************************** ************* FIN REQUETE SQL NEWS ****************** *****************************************************/ } /**************************************************** ************* DEBUT BUILD ARTICLES ****************** *****************************************************/ private function build_articles_view(SelectQueryResult $results) { // ici les résultats seront envoyé dans articles.tpl $tpl = new FileTemplate('HomeCustom/articles.tpl'); $i = 0; foreach ($results as $row) { if ($i >= 1) //si plus de 3 on casse { break; } // si "rewrited_name_cat" est vide c'est que c'est la categorie racine (root) $row['rewrited_name_cat'] = !empty($row['id_category']) ? $row['rewrited_name_cat'] : 'root'; // je me prend pas la tête j'utilise le builder du module articles, comme ça je suis sure que le lien généré sera correct. $link = ArticlesUrlBuilder::display_article($row['id_category'], $row['rewrited_name_cat'], $row['id'], $row['rewrited_title']); // ici sa boucle et on fait correspondre le tableau extrait de la BDD avec des variables TPL $tpl->assign_block_vars('articles_items', array( 'U_LINK' => $link->absolute(), 'TITLE' => $row['title'], 'CONTENTS' => $row['contents'], 'PSEUDO' => $row['login'], 'DESCR' => $row['description'], 'URL_IMG' => $row['picture_url'] )); $i++; } // ici c'est pour "pousser" articles.tpl via # INCLUDE ARTICLES # dans le home.tpl $this->template->put('ARTICLES', $tpl); } /**************************************************** ************* FIN BUILD ARTICLES ******************** *****************************************************/ /**************************************************** ************* DEBUT BUILD NEWS ********************** *****************************************************/ private function build_news_view(SelectQueryResult $results) { // ici les résultats seront envoyé dans news.tpl $tpl = new FileTemplate('HomeCustom/news.tpl'); $i = 0; foreach ($results as $row) { if ($i >= 3) //si plus de 3 on casse { break; } // si "rewrited_name_cat" est vide c'est que c'est la categorie racine (root) $row['rewrited_name_cat'] = !empty($row['id_category']) ? $row['rewrited_name_cat'] : 'root'; // je me prend pas la tête j'utilise le builder du module articles, comme ça je suis sure que le lien généré sera correcte. $link = NewsUrlBuilder::display_news($row['id_category'], $row['rewrited_name_cat'], $row['id'], $row['rewrited_name']); // ici sa boucle et on fait correspondre le tableau extrait de la BDD avec des variables TPL $tpl->assign_block_vars('news_items', array( 'U_LINK' => $link->absolute(), 'NAME' => $row['name'], 'CONTENTS' => $row['contents'], 'PSEUDO' => $row['login'], 'DESCR' => $row['short_contents'], 'URL_IMG' => $row['picture_url'], 'DATE' => gmdate_format('date_format_short', $row['creation_date']), )); $i++; } // ici c'est pour "pousser" news.tpl via # INCLUDE NEWS # dans le home.tpl $this->template->put('NEWS', $tpl); } /**************************************************** ************* FIN BUILD NEWS ************************ *****************************************************/ } ?>
- Puis il faut créer le fichier articles.tpl et news.tpl :
articles.tpl
Code TPL :# START articles_items # <hr> <div class=""> <img src="{PATH_TO_ROOT}{articles_items.URL_IMG}" /> <a href="{articles_items.U_LINK}"><p class="">{articles_items.TITLE}</p></a> <p class=""># IF articles_items.DESCR #{articles_items.DESCR}# ELSE #{articles_items.CONTENTS}...# ENDIF #</p> <p class=""> par : <span>{articles_items.PSEUDO}</span></p> </div> # END articles_items #
news.tpl
Code TPL :# START news_items # <hr> <div class=""> <img src="{PATH_TO_ROOT}{news_items.URL_IMG}" /> <a href="{news_items.U_LINK}"><p class="">{news_items.TITLE}</p></a> <p class=""># IF news_items.DESCR #{news_items.DESCR}# ELSE #{news_items.CONTENTS}...# ENDIF #</p> <p class=""> par : <span>{news_items.PSEUDO}</span></p> </div> # END news_items #
- Enfin nous modifions le fichier Home.tpl :
Code TPL :
S'il y a une quelconque erreur, un oubli de ma part ou une suggestion afin d'optimiser les codes n'hésitez surtout pas à faire votre remarque ! Merci à vous
Édité par jpalbert92 Le 11/03/2015 à 19h40

janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
je reviens sur ce sujet et te donne ceci comme code : https://gist.github.com/janus57/b0812bcc1e0272568774
Ce code est sans doute très "moche" est très mal optimisé mais il utilise les fonctions présentes dans leur module respectif, comme ça pas d'erreur possible c'est les modules qui gèrent.
Cela respecte (normalement) tous ce que tu voulais, que ce soir la description (courte ou non selon la config du module) des articles/news ainsi que l'ordre des events.
J'ai pas fait de test poussé avec ce code mais en théorie il doit fonctionner, en tout cas rien ne t'interdit de le tester en local par sécurité

Cordialement, janus57
jpalbert92 Membre non connecté
-
Booster Fuzil
- Voir le profil du membre jpalbert92
- Inscrit le : 27/04/2014
Super Janus tu es vraiment au top !! Je vais regarder ce code je le test et je te dirais ! En tout cas merci beaucoup !
Je test tout en local toute manière car je n'ai pas de site internet pour le moment je le prépare donc c'est pour ça que je pose beaucoup de question sur le forum car j'aimerais que visuellement il claque en fait j'ai pleins d'autres questions en vrai je cherche (sur le forum, le module, le site etc.) parfois je trouve, parfois je laisse tombé pour y revenir quelques semaines plus tard etc. J'attends de vraiment être bloqué je note les questions et quand j'aurai pas mal avancé je les posterais mes questions bizarres lol
En tout cas je te remercie Janus et je te tiens au courant !

jpalbert92 Membre non connecté
-
Booster Fuzil
- Voir le profil du membre jpalbert92
- Inscrit le : 27/04/2014
Sujet réglé ! Merci à toi.

janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
Sujet réglé ! Merci à toi.
Bonjour,
normalement tu n'a strictement rien à modifié vu que cela utilise les variables TPL des modules news/articles.
LE seule ou tu doit toucher au PHP pour avoir plus de valeurs est le calendrier (calendar/events).
Sinon pour les news/articles normalement tu as tout de base, possible de m'en dire plus sur ce que tu voulais ?
Cordialement, janus57