Le trait url est utilisé sur les collectors dont les éléments doivent pouvoir être accessibles via une URL.
Il est nécessaire de créer une seconde table portant le nom du collector et suffixée par _url : cette dernière stockera les urls des contenus par site et locale.
Le trait url définit une méthode makeUrl()
qui retourne l'URL de l'élément. L'URL contient éventuellement une partie provenant du treeview associé s'il existe, puis dans la majorité des cas le libellé de l'élément, le tout étant "urlizé".
Il est possible de configurer le ou les champs utilisés pour la partie élément de l'URL. On peut par exemple utiliser un champ dédié au SEO dans le collector.
Pour cela, il faut configurer la propriété $_canonical_url
dans le collector avec un tableau contenu les champs à utiliser en lieu et place du libellé.
Si les éléments d'un collector ne sont pas catégorisées à l'aide du treeview, il est possible de l'indiquer, voire de définir le hook d'un treeview particulier qui servira de racine aux urls des éléments.
Cela peut être utile par exemple pour un système d'actualités : on peut préciser que toutes les actualités sont à "ranger" dans le menu "news", ce qui aura pour effet de débuter toutes les URLs des news par l'URL du menu news.
Voici dans ce cas le code à appeler dans le _construct
du collector :
public function __construct() {
// On n'utilise pas de champ treeview comme les news ne sont pas catégorisées, mais un hook correspondant à une entrée de menu
$this->setTreeviewField();
$this->setTreeviewHook('news');
}
Le trait définit une méthode buildUrl()
qui prend en paramètre un identifiant facultatif.
Si cet identifiant est passé, on va reconstruire les URLs de l'élément correspondant et les stocker dans la table collector_url.
Sans identifiant, c'est la totalité des URLs qui est reconstruite.
Dans le backoffice, une fonctionnalité permet de reconstruire toutes les URLs des colllectors.
Cette fonctionnalité va utiliser une méthode de la GenClass pour récupérer tous les collectors qui utilisent le trait url : getClassesByTrait()
, et va sur chacun d'eux appeler la méthode buildUrl()
.