•  » Plugins
  •  » [Plugin perso] [Resolu] Comprendre le trigger loc_visible_user_list

#1 2009-05-04 18:50:03

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

[Plugin perso] [Resolu] Comprendre le trigger loc_visible_user_list

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 :

Code:

/* 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

#2 2009-05-05 18:02:56

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Plugin perso] [Resolu] Comprendre le trigger loc_visible_user_list

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 :

Code:

/* 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

#3 2009-05-05 19:07:19

P@t
Ex Equipe Piwigo
Nice
2007-06-13
5695

Re: [Plugin perso] [Resolu] Comprendre le trigger loc_visible_user_list

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)


P@t

Hors ligne

#4 2009-05-05 19:14:59

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Plugin perso] [Resolu] Comprendre le trigger loc_visible_user_list

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

#5 2009-07-22 02:16:25

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12676

Re: [Plugin perso] [Resolu] Comprendre le trigger loc_visible_user_list

Eric, c'est dans quel plugin que tu as ajouté l'information de la langue de l'utilisateur ? (ça m'intéresse)


Les historiens ont établi que Pierrick était le premier utilisateur connu de Piwigo.

Hors ligne

#6 2009-08-04 18:04:41

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Plugin perso] [Resolu] Comprendre le trigger loc_visible_user_list

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

  •  » Plugins
  •  » [Plugin perso] [Resolu] Comprendre le trigger loc_visible_user_list

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2025 · Contact