Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2015-04-29 07:13:35

Welsh
Membre
Inscription : 2011-12-28

behaviour templateCustomSortByAlias

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

#2 2015-04-29 10:56:07

Welsh
Membre
Inscription : 2011-12-28

Re : behaviour templateCustomSortByAlias

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

#3 2015-04-29 18:58:03

Welsh
Membre
Inscription : 2011-12-28

Re : behaviour templateCustomSortByAlias

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).

Pied de page des forums

Sites map