Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Bonjour à tous
J'utilise Dotclear pour présenter des informations de généalogie, en particulier les documents (phots, actes...).
J'ai déjà utilisé le plugin Series de Franck pour faire le lien entre des documents et les individus et l'ai détourné en ajoutant quelques fonctions de regroupement (codage pas très propre je pense) pour aboutir à cela : http://histoire.gallois.info/?series
Lorsqu'ensuite on passe sur une série (un individu dans mon cas), on entre dans une boucle tpl:Entries que je souhaiterais trier par catégories. Or, de ce que j'ai vu dans mes recherches, tpl:Entries ne permet pas cela.
Je me suis donc tourné vers les behaviors, en particulier templateCustomSortByAlias qui permet d'ajouter un critère de tri. Malheureusement il n'y a pas de documentation dessus.
Le seul exemple que j'ai trouvé se trouve ici : http://forum.dotclear.org/viewtopic.php?id=44756
et donne
<?php
$core->addBehavior('templateCustomSortByAlias',array('behaviorsShuffle','templateCustomSortByAlias'));
class behaviorsShuffle
{
public static function templateCustomSortByAlias($alias)
{
if (DC_DBDRIVER == 'pgsql' ) {
$alias['post']['shuffle'] = 'RANDOM()';
} elseif (DC_DBDRIVER == 'mysql') {
$alias['post']['shuffle'] = 'RAND()';
}
}
}
?>
Je comprends le squelette et me doute que dans la fonction templateCustomSortByAlias, je dois indiquer mon critère de tri souhaité, dans le cas présent category ou category_id (je vérifierais dans la structure de la base).
Mais :
- quid de la syntaxe ?
- dois-je prendre en compte la différence de base comme dans l'exemple ?
- je dois valoriser $alias['post']['NomDeMonCritere'], mais avec quoi ?
Bref, si des bonnes âmes sont prêtes à me guider, je suis preneur.
Merci d'avance
Welsh
PS : j'ai hésité entre ici et le coin des sorciers....
Hors ligne
Bon, je m'auto-réponds après avoir fouillé un peu le code, en particulier class.dc.template.php.
Le tableau $alias est construit comme un tableau de types (ce qui nous intéresse ce sont les posts) pour lesquels on indique le nom du critère de tri qui sera utilisé dans la balise tpl:Entries, pour lequel on indique le critère de tri, généralement une colonne de la table dc_post.
Si ma compréhension est correcte, cela donne un code comme suit :
<?php
$core->addBehavior('templateCustomSortByAlias',array('behaviorsPostCategory','templateCustomSortByAlias'));
class behaviorsPostCategory
{
public static function templateCustomSortByAlias($alias)
{
$alias['post']['category'] = 'cat_id';
}
}
?>
Et donc on devrait pouvoir l'utiliser comme suit :
<tpl:Entries sortby="category">
</tpl:Entries>
Ne pouvant modifier mon thème maintenant, le test est à venir...
Suspense !
Welsh
Hors ligne
Test réalisé....et fonctionnel !
Au vu de cette expérience, c'est ainsi qu'il faut faire...
Si cela peut aider.
Welsh
Hors ligne
Vous n'êtes pas identifié(e).