Module articles [Réglé]
affichage des articles les plus visités
Créations de Modules
babsolune Membre non connecté
-
Administrateur
- Voir le profil du membre babsolune
- Inscrit le : 16/05/2008
- Site internet
- Groupes :
-
Equipe Développement
Reprise du message précédent
alors petite différence entre s'inspirer de et copier
on va y aller en douceur
Certes c'est de l'anglais, mais phpboost nomme ses fonctions en relation avec leurs actions
ArticlesExtensionPointProvider.class.php
adding_running_module_displayed_file peut se traduire par "utiliser le fichier seulement quand le module (articles) est actif", je pense que tu préfèrerais qu'il soit utilisé sur toutes les pages => adding_always_displayed_file
ArticlesModuleMiniMenu.class.php
- get_default_block defini la position du mini => ok
- get_menu_id défini l'id du mini => ok
- get_menu_title défini le titre => pas ok : ArticlesConfig = tu charges la config du module articles et regardes ce que retourne la fonction "classement par date". Problème : ArticlesConfig.class.php ne contient pas cette fonction, ça va te retourner une erreur. Langloader va chercher la traduction de last_articles_files et most_view_articles_files dans le fichier common.php du module articles. si elles n'existent pas => erreur.
On veut juste un titre fixe qui ne dépend pas d'une fonction, on va donc charger seulement le Langloader et on crée la ligne de traduction dans le fichier common.php du module articles
Code PHP :
return LangLoader::get_message('most_viewed_articles', 'common', 'articles');
et dans le fichier common.php du module on ajoute
Code PHP :
tu mets ce que tu veux comme traduction, ici on affiche une suite de mot, on met donc ce qu'on veut (n'oublie pas de créer la même ligne dans le fichier de langue "english" pour être complet $lang['most_viewed_articles'] = 'Articles les plus vus';
)- is_displayed vérifie les autorisations quand le mini est affiché => ok
- get_menu_content : défini le contenu du mini, là, on rentre dans le dur

Pour l'instant en recopiant/modifiant le download, tu appeles des fonctionnalités qui existent dans download mais pas dans articles => erreur
pour le début c'est bon :
FileTemplate => défini le tpl qui va gérer l'affichage
Langloader charge le fichier de langue nécessaire pour la traduction
Ensuite c'est là qu'on va différer du download, ici on veut récupérer les données de la table articles dans la base de données, lire la liste des articles pour l'afficher en fonction du nombre de vues
dans l'ordre
on initialise la date
on défini la fonction "va chercher dans la base de données"
on défini l'id de départ des articles (on veut voir parmis tous les articles donc = 1)
on défini les résultats parmis les différentes options de la table articles, en ordonnant par nombre de vues et on va limiter aux 10 premiers résultats (tu pourras modifier ce nombre en fonction de tes besoins)
Code PHP :
$now = new Date(); $querier = PersistenceContext::get_querier(); $top_view = 1; $results = $querier->select('SELECT articles.*, member.*, com.number_comments, notes.average_notes, notes.number_notes, note.note, 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 LEFT JOIN ' . DB_TABLE_COMMENTS_TOPIC . ' com ON com.id_in_module = articles.id AND com.module_id = 'articles' LEFT JOIN ' . DB_TABLE_AVERAGE_NOTES . ' notes ON notes.id_in_module = articles.id AND notes.module_name = 'articles' LEFT JOIN ' . DB_TABLE_NOTE . ' note ON note.id_in_module = articles.id AND note.module_name = 'articles' AND note.user_id = :user_id AND (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.number_view DESC LIMIT 10 ', array( 'user_id' => AppContext::get_current_user()->get_id(), 'timestamp_now' => $now->get_timestamp() ));
AND = On vérifie que l'article est publié
ORDER BY = défini l'option choisie pour le classement - DESC pour ordre décroissant, ASC pour ordre croissant
LIMIT = nombre d'articles à afficher
Ensuite on récupère chaque résultat un par un en utilisant les fonctions du module articles
on défini le nom de la liste et on appelle les variables template du module articles
on passe au résultat suivant
on envoie au tpl
Code PHP :
while($row = $results->fetch())
{
$article = new Article();
$article->set_properties($row);
$tpl->assign_block_vars('articles_items', $article->get_tpl_vars());
$top_view++;
}
return $tpl->render();Je te rassure, je n'y connaissais pas grand chose non plus, j'applique juste une vieille méthode :
1 - Comment c'est fait dans d'autres modules ?
2 - Essayons de l'adapter à mes besoins

il ne reste plus qu'à utiliser les variables templates du module articles dans le tpl, en n'oubliant pas de mettre le préfixe défini dans le traitement des résultats :
On initialise la liste => START ma liste
on affiche le nom de l'article, son lien et le nombre de vues
On ferme la liste => END ma liste, qui s’arrêtera à 10 articles (selon le nombre défini dans LIMIT)
Code TPL :
Bien sur une meilleure mise en page est possible avec un tableau par exemple, là on a le minimum syndical

Tu remarqueras qu'on ne déclare pas le conteneur du mini (module-mini-container, module-mini-top, etc) puisque c'est phpboost qui s'en charge en récupérant le titre et le contenu déclaré pour les mettre dans les emplacements qui vont bien
Pour les css, il faut faire attention. Comme le fichier css est appelé tout le temps et après les css du thème, les classes définies dans article_mini.css peuvent prendre le pas sur celles du thème. Il faut donc précéder les classes css de l'id du mini module
par exemple
a { color: #0055ff }
=> tous les liens du site seront bleus
#module-mini-articles a { color: #0055ff }
=> seuls les liens du mini seront bleus
Enjoy
Édité par babsolune Le 06/03/2016 à 08h24
xela Membre non connecté
-
Modérateur
- Voir le profil du membre xela
- Inscrit le : 26/12/2015
- Groupes :
-
Equipe Rédaction
Je vais tenter d'appliquer tout ça dans la semaine et je reviendrai vers vous

Cordialement,
Xela
xela Membre non connecté
-
Modérateur
- Voir le profil du membre xela
- Inscrit le : 26/12/2015
- Groupes :
-
Equipe Rédaction
Bonjour,
Tout fonctionne parfaitement <img src="/images/smileys/party.png" alt=":party" class="smiley" /> . J'ai juste fait (modestement) une petite correction de syntaxe sur le fichier ArticlesModuleMiniMenu.class.php
Au lieu de (à ligne 70) :
Code PHP :
LEFT JOIN ' . DB_TABLE_COMMENTS_TOPIC . ' com ON com.id_in_module = articles.id AND com.module_id = 'articles' LEFT JOIN ' . DB_TABLE_AVERAGE_NOTES . ' notes ON notes.id_in_module = articles.id AND notes.module_name = 'articles' LEFT JOIN ' . DB_TABLE_NOTE . ' note ON note.id_in_module = articles.id AND note.module_name = 'articles' AND note.user_id = :user_id
il faut mettre :
Code PHP :
LEFT JOIN ' . DB_TABLE_COMMENTS_TOPIC . ' com ON com.id_in_module = articles.id AND com.module_id = \'articles\' LEFT JOIN ' . DB_TABLE_AVERAGE_NOTES . ' notes ON notes.id_in_module = articles.id AND notes.module_name = \'articles\' LEFT JOIN ' . DB_TABLE_NOTE . ' note ON note.id_in_module = articles.id AND note.module_name = \'articles\' AND note.user_id = :user_id
Voici l'ensemble des fichiers modifiés (c'est ma petite contribution lol) : <a href="/upload/creation-mini-module---topview-articles---basev5_0_1.rar">Création mini module - topview articles - baseV5.0.1.rar</a>
J'ai fait quelques tests avec ajout d'un tableau dans le TPL et tout roule. Et bien sûr, je ferai attention au css mais pas de pb à apriori. J'améliorerai au fur et à mesure <img src="/images/smileys/smile.png" alt=":)" class="smiley" />
Un énorme merci à <span style="text-decoration: underline;">babsolune</span> (super pédagogue!) et <span style="text-decoration: underline;">j1.seth</span> !
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie
