eZ Find est certainement le seul moyen simple de faire des recherches complexes avec le schéma de données d’eZ Publish.
Faire un filtre entre 2 dates est plus complexe qu’il n’y parait, le format de date utilisé dans le stockage est différents de celui attendu par eZFind.
La date est stocké sous forme de timestamp dans le data_map. Par contre, Solr attend une date aux format ISO 8601. Par défaut, il n’existe pas d’opérateur capable de convertir un timestamp en ce format de dates spécifiques.
La création d’un petit opérateur de template très simple va résoudre notre problème :
private function php_date($format, $timestamp) { return date($format, $timestamp); }
Le format c permet de faire la correspondance entre ces 2 format de dates.
Ainsi, pour obtenir par exemple l’ensemble des articles publiés depuis le début de l’année, on aura un code du genre
{def $dateBegin = php_date('c', makedate(1, 1 , 2009))}
{def $filter = concat('article/date_publication: [', $dateBegin, 'Z TO *]')}
{def $articles = fetch(ezfind, search, hash(
query, '...',
filter, $filter
)}
{foreach $articles as $article}
...
{/foreach}