Closed Fil closed 7 years ago
J'ai utilisé cette construction à pas mal d'endroits dans plugins/seenthis et seenthis_squelettes ; seuls ceux où les éléments qu'on passe comportent plusieurs champs vont poser problème, mais je crois que par principe il faudrait les éliminer tous. Comme c'est un peu chiant à écrire est-ce qu'on fait une fonction dédiée ?
À noter : https://github.com/seenthis/seenthis/commit/0276740a47b03fad7160becf8cddd31dfee3e5f4 aurait pu être corrigé autrement, en supprimant ,date
de la requête SQL qui précède.
Je disais : maintenant il vaut mieux utiliser array_column($tableau, 'nom de la colonne');
plutôt que des array_map('reset', $tableau);
ou équivalent.
foreach($mentions as $m) $pointe[] = $m['id'];
=> $pointe = array_column($mentions, 'id');
donc
Le patch suivant réglerait le problème pour les deux occurrences où on passe un élément à plusieurs champs :
Index: inc/seenthis_data.php
===================================================================
--- inc/seenthis_data.php (révision 418)
+++ inc/seenthis_data.php (copie de travail)
@@ -507,7 +507,7 @@
# les mentions @login vers $moi :
$mentions = sql_allfetsel('id_me', 'spip_me_auteur', 'id_auteur='.$moi, '', 'date DESC', '0,'.($debut + $max_pagination));
- $pointe = array_merge($pointe, array_map('array_pop', $mentions));
+ $pointe = array_column($mentions, 'id_me');
# les messages qui parlent d'un sujet ou url qui m'interesse $moi
if ($pointetags = liste_pointe_tags($debut, $max_pagination, $moi)) {
@@ -516,7 +516,7 @@
# les messages auxquels j'ai repondu $moi
$mentions = sql_allfetsel('DISTINCT(id_parent) as id, date', 'spip_me', "id_auteur=$moi AND id_parent>0 AND statut='publi'", '', 'date DESC', '0,'.($debut + $max_pagination));
- foreach($mentions as $m) $pointe[] = $m['id'];
+ $pointe = array_column($mentions, 'id');
# faut-il ajouter les messages ayant des URLs avec un tag opencalais que je suis ?
Appliqué dans la branche 3.1, reste à voir si on reporte dans la branche 2.1 dans quel cas il faudra préciser que PHP >= 5.5.0 est nécessaire.
= 5.5.0 est nécessaire.
Il suffit peut-être de fournir array_column si la fonction est absente (dans mes_fonctions par exemple ?)
-- Fil
Vi, on pourrait pomper ce que fait bonux https://zone.spip.org/trac/spip-zone/browser/_plugins_/spip-bonux-3/lib/array_column/array_column.php?rev=89337 pour la branche 2.1 uniquement, et ajouter un necessite bonux pour la branche 3.1.
Discussion en ce moment sur spip-dev
pour que cette fonction soit ajoutée en cas de besoin au niveau de SPIP.
Dans un premier temps, il suffit d'ajouter un necessite spip_bonux (qui fourni array_column) dans la branche 3.1 du plugin seenthis, parce que je ne suis pas certain de pouvoir assurer le portage de seenthis vers SPIP 3.2 en 5 minutes (notamment au niveau du plugin inclure ajaxload et des changements apportés par la nouvelle version de jQuery).
Maintenant que seenthis est en 3.2 on peut considérer que c'est bien fermé :)
L'idée était d'écrire simplement "récupérer le premier élément de chaque élément du tableau", mais on dirait que ça ne fonctionne plus si le tableau comporte plusieurs éléments, ce qui provoquait une grande lenteur sur la page d'accueil (cf. https://github.com/seenthis/seenthis/commit/0276740a47b03fad7160becf8cddd31dfee3e5f4 )