Pages: 1
Bonjour à tous. C'est à nouveau le boulet du php qui en remet une couche :-(
Je m'échine à essayer de reproduire un plugin perso que j'avais sous PWG 1.7.3 vers Piwigo 2.x. Il s'agit d'ajouter une colonne dans user_list, présentant la langue de chaque utilisateur listé en plus des données déjà présentes (Nom, statut, groupe, etc...). En 1.7.3, j'y suis arrivé "finger in the nose" mais là...
J'ai parfaitement identifié le trigger loc_visible_user_list ainsi que ses variables plugin_user_list_column_titles et plugin_columns. J'ai facilement pu créer une colonne supplémentaire et la nommer "Langue". Mais pas moyen de faire coller les langues de chaque user dans les cases !
Je sais que je fais quelque chose de travers. Je sais où je merdoie mais je n'arrive pas à résoudre. Voici mon approche :
/* Ajout d'une colonne Langues pour la gestion des utilisateurs */ /* Le trigger = OK */ add_event_handler('loc_visible_user_list', 'personal_loc_visible_user_list'); /* La fonction qui doit retourner $visible_user_list */ function personal_loc_visible_user_list($visible_user_list) { global $template; /* Mise en place du titre de la colonne - Cà, c'est bon ! */ $template->assign ( 'plugin_user_list_column_titles', array ( 'CAPTION' => l10n('language') ) ); $user_ids = array(); foreach ($visible_user_list as $i => $user) { $user_ids[$i] = $user['id']; } $user_nums = array_flip($user_ids); $languages = get_languages(); /* requête pour obtenir les infos - Testé offline et c'est OK */ if (!empty($user_ids)) { $query = ' SELECT user_id, language FROM '.USER_INFOS_TABLE.' WHERE user_id IN ('.implode(',', $user_ids).') ;'; $result = pwg_query($query); while ($row = mysql_fetch_array($result)) { /* la variable prend bien les data de la requête */ $visible_user_list[$user_nums[$row['user_id']]]['language'] = $languages[$row['language']]; } } /* Les bonnes infos dans la bonne colonne - C'est là qu'est le malaise */ $template->assign( 'user.plugin_columns', array( 'LANGUAGE' => $languages[$row['language']] )); return $visible_user_list; }
Le template user_list.tpl est tout prêt à recevoir les données mais je me retrouve avec la colonne "Langue" et, dessous, les icones de la colonne "Actions".
Merci pour le dépannage ! ;-)
PS : Si je suis trop "lourd" (pour ne pas dire ch..nt), n'hésitez pas à me le faire comprendre. Promis, je ne le prendrai pas mal et je comprendrai (the shame is on me)...
Dernière modification par Eric (2009-05-05 19:15:22)
Hors ligne
Finalement, je parviens à avancer... Lentement mais surement !
Ce qui me rassure c'est que mon code est bon. Mais au niveau de l'insertion dans le template, y a encore du boulot (voir capture). Je suis parvenu à ce résultat comme ceci :
/* Ajout d'une colonne Langues pour la gestion des utilisateurs */ /* Le trigger = OK */ add_event_handler('loc_visible_user_list', 'personal_loc_visible_user_list'); /* La fonction qui doit retourner $visible_user_list */ function personal_loc_visible_user_list($visible_user_list) { global $template; /* Mise en place du titre de la colonne - Cà, c'est bon ! */ $template->assign ( 'plugin_user_list_column_titles', array ( 'CAPTION' => l10n('language') ) ); $user_ids = array(); foreach ($visible_user_list as $i => $user) { $user_ids[$i] = $user['id']; } $user_nums = array_flip($user_ids); $languages = get_languages(); /* requête pour obtenir les infos - Testé offline et c'est OK */ if (!empty($user_ids)) { $query = ' SELECT user_id, language FROM '.USER_INFOS_TABLE.' WHERE user_id IN ('.implode(',', $user_ids).') ;'; $result = pwg_query($query); while ($row = mysql_fetch_array($result)) { /* la variable prend bien les data de la requête */ $visible_user_list[$user_nums[$row['user_id']]]['language'] = $languages[$row['language']]; /* Une autre variable pour le template */ $lang[] = $languages[$row['language']]; } } /* Les bonnes infos dans la bonne colonne - C'est toujours là qu'est le malaise */ /* J'ai bien les langues mais sur une ligne au lieu de la colonne 'plugin_user_list_column_titles' */ $template->append( 'users', array( 'plugin_columns' => $lang ) ); return $visible_user_list; }
Hors ligne
Il n'y a pas besoin de faire d'assign ou d'append sur plugin_columns, vu que le fichier user_list.php le fait déjà!
Voila ce qui fonctionne:
add_event_handler('loc_visible_user_list', 'personal_loc_visible_user_list');
function personal_loc_visible_user_list($visible_user_list)
{
global $template;
// plus simplement:
$template->append('plugin_user_list_column_titles', l10n('language'));
foreach ($visible_user_list as $i => $user)
{
$user_ids[$i] = $user['id'];
}
$user_nums = array_flip($user_ids);
$languages = get_languages();
if (!empty($user_ids))
{
$query = '
SELECT user_id, language
FROM '.USER_INFOS_TABLE.'
WHERE user_id IN ('.implode(',', $user_ids).')
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
// et voila ce qu'il "suffisait" de faire ;-)
$visible_user_list[$user_nums[$row['user_id']]]['plugin_columns'][] = $languages[$row['language']];
}
}
return $visible_user_list;
}
Dernière modification par P@t (2009-05-05 19:10:24)
Hors ligne
Bon sang !! C'est pas possible que je soit c... à ce point !! Pourquoi faut-il que je cherche toujours la complication ?!?!
Encore une fois, la honte m'assaille...
Milles mercis P@t ! Cà fonctionne effectivement beaucoup mieux quand on simplifie ;-)
Hors ligne
Eric, c'est dans quel plugin que tu as ajouté l'information de la langue de l'utilisateur ? (ça m'intéresse)
Hors ligne
plg a écrit:
Eric, c'est dans quel plugin que tu as ajouté l'information de la langue de l'utilisateur ? (ça m'intéresse)
Salut Pierrick.
Je me suis fait un plugin perso non publié. J'avais l'intension, à terme, de publier un plugin qui permettrait d'afficher, au choix, tout ou partie des informations relatives aux utilisateurs inscrits (pas seulement la langue)... Mais pas le temps :-(
Mais je peux tout de même publier mon "truc" perso si tu veux.
Hors ligne
Pages: 1