eZ Find: filtrer par dates

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}

Articles liés

Stockage de données dans eZ Find !!!
Documentation eZ Publish
WordPress : différence entre the_date et get_the_date
Faire un fetch personnalisé (custom fetch)
Rechercher une fonction dans des fichiers PHP

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">