Dotclear

Ticket #2171 (closed defect: fixed)

Opened 9 years ago

Last modified 9 years ago

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:1 Changed 9 years ago by tomek

Yep, je l'ai constaté notamment avec EventHandler?. Ça pourrait être bien de pouvoir les prendre en compte.

comment:2 Changed 9 years ago by franck

  • Milestone changed from A definir to 2.10

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:4 Changed 9 years ago by franck

Messieurs, à vos install de test !

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 !

Last edited 9 years ago by tomek (previous) (diff)

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

Last edited 9 years ago by philippe (previous) (diff)

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.

Note: See TracTickets for help on using tickets.

Sites map