Ticket #2171 (closed defect: fixed)
Afficher tous les post_types dans la liste des catégories
Reported by: | philippe | Owned by: | team |
---|---|---|---|
Priority: | normal | Milestone: | 2.10 |
Component: | module:core | Version: | 2.9 |
Severity: | normal | Keywords: | |
Cc: |
Description
Actuellement, si un plugin crée de nouveaux types de billets, qui peuvent être associés à des catégories, ces billets ne sont pas pris en compte dans la liste des catégories (affichée dans categories.php et dans le menu déroulant de post.php)
Dans category.php, il n'est pas possible de déplacer ces billets particuliers d'une catégorie à une autre, et il est même possible de supprimer une catégorie qui ne contient pas de billets de type post mais en contient beaucoup d'un autre type.
Change History
comment:3 Changed 9 years ago by franck <carnet.franck.paul@…>
- Status changed from new to closed
- Resolution set to fixed
(In [f86399915c78]) Let category be used for other types of entries, should closes #2171
comment:5 Changed 9 years ago by franck <carnet.franck.paul@…>
(In [b3284c634538]) Let category be used for other types of entries, use "entry"/"entries" generic labels rather than "post"/"posts", addresses #2171
comment:6 Changed 9 years ago by tomek
Cool, je teste ça dès que la mise à jour du canal unstable (si j'ai bien compris c'est pour la 2.10) se fait !
comment:7 Changed 9 years ago by franck
Merci Tomek, et oui c'est bien pour la 2.10 ; c'est un poil au delà du simple bug, plutôt un changement au niveau de l'usage des catégories, conçues à l'origine uniquement pour les billets.
comment:8 Changed 9 years ago by philippe
Essayé ce matin : c'est une grosse amélioration, merci Franck :)
Si on garde l'idée, il reste une petite incohérence : dans la liste des catégories, on se retrouve par exemple avec cet affichage:
Ma catégorie (5 entrées, total : 5) URL : Ma-categorie
avec un lien sur "5 entrées". Ce lien pointe vers la liste des billets, filtrés sur la catégorie "Ma catégorie"
Or si la catégorie ne contient aucun billet de type post, ou moins de 5, le filtre semble ne pas marcher.
Par exemple avec 2 billets de type post et 3 d'un autre type, pourrait-on afficher
Ma catégorie (2 billets, 3 entrées, total : 5) URL : Ma-categorie
Ainsi le lien vers les 2 billets de la catégorie serait alors correct.
Reste que la formulation "entrées" est un peu courte et dans ce contexte prête à confusion, mais je ne vois pas par quoi la remplacer, peut-être "3 autres" tout simplement ?
comment:9 Changed 9 years ago by franck
Cool pour le fonctionnement, c'est une bonne nouvelle.
Concernant les infos affichées côté liste des catégories, je m'y attendais un peu. J'ai remplacé "billet" par "entrée", plus générique tout en sachant que le lien mènerait uniquement vers les billets et pas les autres types d'entrée. D'autre part, faire la distinction entre les types à ce niveau pose quelques problèmes vu que la table des catégories intègre un compteur général et pas spécifique. Du coup il faudrait refaire des requêtes pour avoir les sous-totaux précis…
D'autre part, ce n'est pas à Dotclear de fournir un lien vers une page de gestion des types d'entrées non gérés par le cœur (billets en l'occurence), il en serait bien incapable. On pourrait par contre imaginer un behaviour pour que le ou les plugins fournissent quelque chose de plus précis ?
Bref, en l'espèce et pour quelques rares cas d'usage, je ne suis pas certains qu'il faille aller plus loin (mais on peut continuer à en débattre).
comment:10 Changed 9 years ago by philippe
Pour afficher "2 billets, 3 autres types", il faudrait juste une requête de plus que maintenant : celle sur les billets de type post, non ?
Pour le lien, dotclear ne peut pas le fournir pour les autres types et je ne le suggérais pas, je ne parlais que du lien vers la liste des billets (donc de type post) de la catégorie. Dans mon exemple, le lien serait seulement sur "2 billets"
Pour les autres types, le compte suffirait pour être cohérent et ne rien perturber pour l'immense majorité qui n'a pas d'autres post_types.
Si ensuite dotclear fournit aux plugins un mécanisme pour s'inviter dans cette page et mettre un lien vers sa propre liste de billets, ce serait la cerise sur le gâteau :)
comment:11 follow-up: ↓ 12 Changed 9 years ago by philippe
PS : on ne devrait peut-être afficher, dans le menu déroulant de post.php pour choisir la catégorie d'un billet, que les nombres de billets de type post ?
comment:12 in reply to: ↑ 11 Changed 9 years ago by franck
Tout ça nécessite des modifs un peu plus en profondeur que ce que j'ai fait jusqu'à présent. Je me garde ça pour le jour où je serai en panne de code :-p
comment:13 Changed 9 years ago by philippe
Je viens de tester ceci dans categories.php : on remplace les lignes 167 à 174 par
$rs_posts = $core->blog->getCategories(array('cat_id' => $rs->cat_id, 'post_type'=>'post')); $nb_posts = $rs_posts->nb_post; $other_posts = $rs->nb_post - $rs_posts->nb_post; echo '<p class="cat-title"><label class="classic" for="cat_'.$rs->cat_id.'"><a href="'. $core->adminurl->get("admin.category",array('id' => $rs->cat_id)).'">'.html::escapeHTML($rs->cat_title). '</a></label> </p>'. '<p class="cat-nb-posts">(<a href="'.$core->adminurl->get("admin.posts",array('cat_id' => $rs->cat_id)).'">'. sprintf(($nb_posts > 1 ? __('%d entries') : __('%d entry') ),$nb_posts).'</a>'. ', '.sprintf(($other_posts > 1 ? __('%d others') : __('%d other') ),$other_posts). ', '.__('total:').' '.$rs->nb_total.')</p>'. '<p class="cat-url">'.__('URL:').' <code>'.html::escapeHTML($rs->cat_url).'</code></p>';
et ça affiche bien
Ma catégorie (2 entrées, 3 others, total : 5) URL : Ma-categorie
Du coup je remettrais bien "billets" au lieu de "entrées" (pour ne pas dérouter), et donc "autres entrées" pour les autres post_types.
comment:14 Changed 9 years ago by philippe
Un peu amélioré, pour ne pas afficher "autres entrées" s'il n'y en a pas :
$rs_posts = $core->blog->getCategories(array('cat_id' => $rs->cat_id, 'post_type'=>'post')); $nb_posts = $rs_posts->nb_post; $other_posts = $rs->nb_post - $rs_posts->nb_post; echo '<p class="cat-title"><label class="classic" for="cat_'.$rs->cat_id.'"><a href="'. $core->adminurl->get("admin.category",array('id' => $rs->cat_id)).'">'.html::escapeHTML($rs->cat_title). '</a></label> </p>'. '<p class="cat-nb-posts">(<a href="'.$core->adminurl->get("admin.posts",array('cat_id' => $rs->cat_id)).'">'. sprintf(($nb_posts > 1 ? __('%d billets') : __('%d billet') ),$nb_posts).'</a>'; if ($other_posts > 0) { echo ', '.sprintf(($other_posts > 1 ? __('%d autres entrées') : __('%d autre entrée') ),$other_posts); } echo ', '.__('total:').' '.$rs->nb_total.')</p>'. '<p class="cat-url">'.__('URL:').' <code>'.html::escapeHTML($rs->cat_url).'</code></p>';
Les traductions sont en dur, mais c'est pour afficher
Ma catégorie (2 billets, 3 autres entrées, total : 5) URL : Ma-categorie
et le lien sur "2 billets" pointe bien vers la liste des billets de la catégorie
comment:15 Changed 9 years ago by franck
Me garde ça sous le coude pour plus tard, merci Philippe ;-)
comment:16 Changed 9 years ago by franck
Par contre ça veut dire refaire plein de requêtes (1 avec jointure pour le comptage, 1 à n pour les infos de la catégorie, n étant le niveau de "profondeur" de la catégorie), pour chacune des catégories, spa vraiment glop, même si ça fonctionne.
Donc on fera ça (si on le fait), comme je le disais plus haut, un peu plus en "profondeur" dans la gestion des catégories pour éviter de trop solliciter la base.
comment:17 Changed 9 years ago by philippe
Si tu remplaces "si on le fait" par "quand on le fera", ça me va :P
comment:18 Changed 9 years ago by tomek
Argh, mon install de test est foireuse... les pages de l'admin finissent souvent en page blanche. Faut que je réinstalle tout ça proprement pour tester. Bon, je vois que Philippe s'en est déjà chargé avec succès.
Yep, je l'ai constaté notamment avec EventHandler?. Ça pourrait être bien de pouvoir les prendre en compte.