diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index a9722202c2303e976551cef6e9b2724693e46f38..09ef02b4420c0acda6b736c7d0e8461155013270 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -19,7 +19,7 @@ include_spip('inc/documents');
 include_spip('inc/forum');
 include_spip('inc/distant');
 include_spip('inc/rubriques'); # pour calcul_branche (cf critere branche)
-include_spip('public/debug'); # toujours prévoir le pire
+include_spip('public/debug'); # toujours prevoir le pire
 
 # Charge et retourne un composeur, i.e. la fonction principale d'un squelette
 # ou '' s'il est inconnu. Le compile au besoin
@@ -313,6 +313,27 @@ function calcul_exposer ($id, $type, $reference) {
 	return $exposer[$type][$id];
 }
 
+function lister_objets_avec_logos ($type) {
+	$type_logos = array(
+	'hierarchie' => 'rub',
+	'rubriques' => 'rub',
+	'articles' => 'art',
+	'breves' => 'breve',
+	'mots' => 'mot',
+	'sites' => 'site',
+	'auteurs' => 'aut'
+	);
+
+	$logos = array();
+	if ($type = $type_logos[$type]) {
+		$a = preg_files(_DIR_IMG.$type.'on[0-9]+\.(gif|png|jpg)$');
+		foreach ($a as $f)
+			$logos[] = intval(substr($f, strlen(_DIR_IMG.$type.'on')));
+	}
+
+	return join(',',$logos);
+}
+
 function table_from_primary($id) {
 	global $tables_principales;
 	include_spip('base/serial');
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 50e09bbc91e1a2fffe94af76a7d46259dab87d79..6a8968f8dc0cd2deada4ee9bee120985bbf8c14a 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -185,6 +185,22 @@ function critere_branche_dist($idb, &$boucles, $crit) {
 		$boucle->where[]= $c;
 }
 
+// {logo} liste les objets qui ont un logo
+function critere_logo_dist($idb, &$boucles, $crit) {
+	$not = $crit->not;
+	$boucle = &$boucles[$idb];
+
+	$c = "calcul_mysql_in('" .
+	  $boucle->id_table . '.' . $boucle->primary
+	  . "', lister_objets_avec_logos(". $boucle->type_requete ."), '')";
+	if ($crit->cond) $c = "($arg ? $c : 1)";
+
+	if ($not)
+		$boucle->where[]= array("'NOT'", $c);
+	else
+		$boucle->where[]= $c;
+}
+
 // Tri : {par xxxx}
 // http://www.spip.net/@par
 function critere_par_dist($idb, &$boucles, $crit) {