Le passage à dotclear 2.2 est l'occasion de remettre à plat le plugin Metadata.

Jusqu'alors, Metadata avait 2 rôles : la gestion des métadonnées, et la gestion des tags. Metadata fera désormais partie intégrante du core de dotclear, sous la forme du fichier inc/core/class.dc.meta.php.

Les parties spécifiques à la gestion des tags ont été déplacées au sein d'un nouveau plugin livré de base, le plugin Tags.

D'autres améliorations ont été apportées :

  • Maintenant qu'il est intégré au core, il n'est plus besoin d'instancier la classe dcMeta à tout-va. Une instance est désormais systématiquement créée dans $core->meta
  • La méthode $core->meta->getMeta est dépréciée. L'ancienne méthode avait pour signature :
public function getMeta($type=null,$limit=null,$meta_id=null,$post_id=null) {

Il faudra désormais compter sur deux nouvelles méthodes :

public function getMetadata($params=array(), $count_only=false){}
public function computeMetaStats($rs) {}

Concrètement, getMeta avait 2 rôles : récupérer des métadonnées, et calculer les statistiques de ces métadonnées (occurences d'apparition, notamment utilisées par les nuages de tags). Ces 2 rôles sont désormais séparés.

getMetadata récupère les métadonnées en fonction de certains critères. Son mécanisme est très similaire à getPosts de $core->blog. $params peut prendre les attributs suivants :

  • meta_type : récupère les métadonnées d'un type donné
  • meta_id : récupère les métadonnées ayant une valeur donnée
  • post_id : récupère les métadonnées d'un billet donné
  • limit : limite le nombre d'entrées récupérées
  • order : spécifie l'ordre de récupération des métadonnées

computeMetaStats enrichit le résultat renvoyé par getMetadata en y insérant les champs statistiques percent et roundpercent.

En pratique, un ancien appel à getMeta de la forme :

$meta = new dcMeta($core);
$rs_meta = $meta->getMeta($type,$limit,$meta_id,$post_id);

sera à modifier en :

$rs_meta = $core->meta->getMetadata(array(
	'meta_type' => $type,
	'meta_id' => $meta_id,
	'post_id' => $post_id,
	'limit' => $limit));

ou, s'il y a des statistiques à récupérer, en :

$rs_meta = $core->meta->computeMetaStats(
	$core->meta->getMetadata(array(
		'meta_type' => $type,
		'meta_id' => $meta_id,
		'post_id' => $post_id,
		'limit' => $limit)));

L'ancienne méthode getMeta est toujours présente pour des raisons de compatibilité avec l'existant.