•  » Plugins
  •  » [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

#1 2010-05-26 22:00:44

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

[Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Ceci fait suite à la discussion [Forum, topic 17758] modifier ordre affichage des utilisateurs par defaut.

De manière globale, j'essaie de faire interagir un plugin sur l'affichage par défaut d'une partie de l'admin de Piwigo. C'est à dire de surcharger un fichier tpl par une version modifiée et fournie par le plugin.

Plus précisément, il s'agit d'ajouter une fonctionnalité de tri des colonnes de la liste des utilisateurs de Piwigo (userlist.tpl). Pour cela, il me faut insérer quelques modifs et un script JQuery.

Problème: Je sais utiliser les triggers pour que les plugins interagissent avec le code php de Piwigo. Mais faire de même avec les tpl, je ne sais pas faire. Je pense que la solution doit être trop simple :-/

Hors ligne

#2 2010-05-26 22:57:51

gbo
Membre
PACA
2006-11-01
1218

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Si j'ai bien compris ton besoin,r je dirai que c'est un pré filtre Smarty:
dans le replace tu fais ce que tu veux.

Un exemple de hd Shadowbox:

  global $template;
  $template->set_prefilter('default_content', 'shadowbox_prefilter');



function shadowbox_prefilter($content, &$smarty)
{
  $search = '<a href="javascript:phpWGOpenWindow(\'{$high.U_HIGH}\',\'{$high.UUID}\',\'scrollbars=yes,toolbar=no,status=no,resizable=yes\')">';
 
  $replacement = '<a href="{$high.U_HIGH}" rel="shadowbox">';

  return str_replace($search, $replacement, $content);
}

Hors ligne

#3 2010-05-26 23:10:18

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

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Merci EX-FTB, j'étudierai çà demain mais je pense que c'est bien ce que je cherche. Reste à savoir si le préfiltre smarty est applicable partout.

Hors ligne

#4 2010-05-26 23:31:16

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

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Oui, le préfiltre est à peu près applicable partout...
Il y a aussi le postfilter, et le outpufilter (plus gourmands en ressources, mais utiles dans certains cas).

Si tu veux d'autres précisions, n'hésites pas ;-)
Certains de mes plugins en font usage...


P@t

Hors ligne

#5 2010-05-27 22:39:29

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

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

L'idée est de permettre, via une option d'un plugin, de trier les données du tableau des utilisateurs affiché sur la page user_list.tpl en utilisant le plugin JQuery tablesorter.
Mais l'histoire s'est un peu compliquée: La surcharge du tpl ne suffira pas. Pour que cela fonctionne, il faudrait que j'arrive à substituer toute la partie de génération du tableau dans le user_list.php et faire abstraction de la pagination (comprendre le formatage en pages du tableau) et le Navbar. Cà fait beaucoup, je trouve. Autant réécrire entièrement la fonction...

J'abandonne pas mais je réfléchi encore au problème.

Hors ligne

#6 2010-05-27 22:59:12

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Ne faudrait-il pas de toutes manière améliorer un peu cette age déjà pour autoriser le tri des colonnes ?
Comment ça après Eric, avec ta future idée, il sera possible de "simuler" un tri non ?


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#7 2010-05-30 17:10:08

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

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Quelque chose doit m'échapper dans le concept des pre/post/outfilter. Dans l'exemple qui suit, je cherche à insérer une option supplémentaire dans la page profile_content.tpl mais sans grand succès:

Code:

/* Adding NBMS in profile page */
add_event_handler('loc_begin_profile', 'NBMS_Profile');

function NBMS_Profile()
{
  global $conf, $user, $template;
  
  $query = '
  SELECT user_id, enabled
    FROM '.USER_MAIL_NOTIFICATION_TABLE.'
    WHERE user_id = \''.$user['id'].'\'
  ;';
  
  $data = pwg_db_fetch_assoc(pwg_query($query));
  
  if (!empty($data))
  {
    $template->set_prefilter('default_content', 'NBMS_prefilter');

    $template->assign('radio_options',
      array(
        'true' => l10n('Yes'),
        'false' => l10n('No')));
          
    $template->assign(
      array(
        'NBMS'=>$data['enabled'] ? 'true' : 'false',
      ));
  }

 $template->set_prefilter('default_content', 'NBMS_prefilter');
}

function NBMS_prefilter($content, &$smarty)
{
  $search = '<li>
        <span class="property">
          <label for="Maximum height of the pictures">{\'Maximum height of the pictures\'|@translate}</label>
        </span>
        <input type="text" size="4" maxlength="4" name="maxheight" id="maxheight" value="{$MAXHEIGHT}">
      </li>';
  
  $replacement = '<li>
        <span class="property">{\'My_option\'|@translate}</span>
        {html_radios name=\'My_option\' options=$radio_options selected=$NBMS}
      </li>
      <li>
        <span class="property">
          <label for="Maximum height of the pictures">{\'Maximum height of the pictures\'|@translate}</label>
        </span>
        <input type="text" size="4" maxlength="4" name="maxheight" id="maxheight" value="{$MAXHEIGHT}">
      </li>';

  return str_replace($search, $replacement, $content);
}

Hors ligne

#8 2010-05-30 22:54:52

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

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Attention, pour faire des essais de prefiltres, il faut obligatoirement mettre:

$conf['template_force_compile'] = true;

Car le principe du préfiltre, c'est qu'il n'est appliqué qu'une seule fois, et mis en cache.


P@t

Hors ligne

#9 2010-05-31 13:41:43

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

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

P@t a écrit:

Attention, pour faire des essais de prefiltres, il faut obligatoirement mettre:

$conf['template_force_compile'] = true;

Car le principe du préfiltre, c'est qu'il n'est appliqué qu'une seule fois, et mis en cache.

Mais çà pose le problème du rafraichissement du cache. Un utilisateur ne peut pas purger les templates compilés. Si on ne passe pas $conf['template_force_compile'] = true, il faudrait lancer $template->delete_compiled_templates(); à chaque chargement de la page.

J'ai bon?

Hors ligne

#10 2010-05-31 22:10:15

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

Re: [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Je passe ce topic en résolu car je pense avoir compris le fonctionnement et réussi à obtenir ce que je recherchais.

Maintenant je butte sur un autre problème plus ou moins lié à celui-ci. Je préfère ouvrir un autre topic: [Forum, topic 17913] [Dev Plugins] Trigger save_profile_from_post

Hors ligne

  •  » Plugins
  •  » [Résolu] [Dev Plugins] Surcharger un tpl via un plugin

Pied de page des forums

Propulsé par FluxBB

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