Fiche


Niveau de difficulté : Avoir de très bonnes bases.
Recommandations : Aide à la création de plugins.
A lire aussi : [Exemple] Plugin "Event Cats"


Inspirez vous de ce qui existe déjà. Regardez comment ont fait les autres simplement en regardant leurs plugins.
Dans les anciennes versions de Piwigo, il regorge encore beaucoup d'exemples !

[Exemple] Faire son plugin personnel

But

Le principe de cette page est de décrire les façons de faire son plugin personnel pour y intégrer les modifications souhaitées sur son site qui ne peuvent pas l'être par la surcharge de la configuration ou la surcharge des css..

Avantages

  • Mise à jour de votre galerie se trouve être simplifiée, facilitée, accélérée entre 2 versions majeures.

C'est à dire dans de très nombreux cas :

  • vous n'avez rien à faire pour récupérer les adaptations de la version précédente,
  • vous n'aurez plus besoin de rechercher ce que vous aviez modifié tout est là et en plus regroupé),
  • et si par une évolution cela ne fonctionne plus comme avant, il suffira de comprendre pourquoi afin de réparer pour profiter de son ancienne adaptation et même tant de l'évolution, tant le principe est simple.

Inconvénients

  • Mise en place un peu plus difficile que la normale.
  • Certaines méthodes ne sont à utiliser que pour un plugin personnel et certainement pas pour un plugin public diffusé.

Conseil: Avant d'installer et d'activer un plugin public, contrôler qu'il n'utilise pas les techniques de la personnalisation par plugin (c'est à dire modification du template par substitution directe).

Normes

Dans cette page, on utilisera le terme “personal” pour désigner le plugin que l'on conçoit. Vous pouvez bien entendu modifier ce terme mais n'oubliez pas de le faire partout (nom répertoire, fichier, noms des fonctions, etc.)

Préparation: Création de son plugin personnel

  1. Créer un répertoire personal dans le répertoire /plugins/
  2. Ajouter un fichier main.inc.php et y mettre le code suivant:
<?php
/*
Plugin Name: Personal
Version: 0.0.0.0
Description: It's your personal plugin / c'est votre plugin personnel
Plugin URI: http://www.phpwebgallery.net
Author: Moi, nous et vous
Author URI: http://www.phpwebgallery.net
*/
 
?>
  1. Encore plus simple: Installer et activer le plugin LocalFiles Editor.
  2. Editez le dernier onglet de LocalFiles Editor (après activation du plugin).
  • et dans tous les cas, aller dans l'administration des plugins pour installer et activer votre Personal Plugin

Principales méthodes de bases

Principe

Ce sont différentes méthodes applicables pour élaborer son plugin personnel.

Méthodes

Supprimer un bout de code dans un fichier tpl

Ajouter la fonction suivante dans votre fichier main.inc.php après l'en-tête :

/* Suppression d'une partie du code dans un template */
/* Code compris entre la chaine $str_begin et $str_end */
function personal_remove_tpl_code($tlp_handle, $str_begin, $str_end)
{
  global $template;
 
  $template->loadfile($tlp_handle);
 
  $p_beg = strpos($template->uncompiled_code[$tlp_handle], $str_begin);
  $p_end = strpos($template->uncompiled_code[$tlp_handle], $str_end) + strlen($str_end);
  $s = substr($template->uncompiled_code[$tlp_handle], $p_beg, $p_end - $p_beg);
 
  $template->uncompiled_code[$tlp_handle] = 
    substr_replace($template->uncompiled_code[$tlp_handle], '', $p_beg, $p_end - $p_beg);
 
  return $s;
}

Le code supprimé est retourné par la fonction.

Ajouter du code dans un fichier tpl après un délimiteur

Ajouter la fonction suivante dans votre fichier main.inc.php après l'en-tête :

/* Ajout de code dans un template après la chaine $insert_after */
function personal_add_after_tpl_code($tlp_handle, $insert_after, $code)
{
  global $template;
 
  $template->loadfile($tlp_handle);
  $template->uncompiled_code[$tlp_handle] = str_replace($insert_after, $insert_after.$code, $template->uncompiled_code[$tlp_handle]);
}

Ajouter du code dans un fichier tpl avant un délimiteur

Ajouter la fonction suivante dans votre fichier main.inc.php après l'en-tête :

/* Ajout de code dans un template avant la chaine $insert_before */
function personal_add_before_tpl_code($tlp_handle, $insert_before, $code)
{
  global $template;
 
  $template->loadfile($tlp_handle);
  $template->uncompiled_code[$tlp_handle] = str_replace($insert_before, $code.$insert_before, $template->uncompiled_code[$tlp_handle]);
}

Remplace une partie du code par une autre dans un fichier tpl

Ajouter la fonction suivante dans votre fichier main.inc.php après l'en-tête :

/* Remplace une partie du code par une autre dans un template */
function personal_replace_tpl_code($tlp_handle, $old, $new)
{
  global $template;
 
  $template->loadfile($tlp_handle);
  $template->uncompiled_code[$tlp_handle] = str_replace($old, $new, $template->uncompiled_code[$tlp_handle]);
}

Applications

Applications concrètes des méthodes

Déplacer et ajouter du code dans un fichier TPL

Exemple: Changement de place du bouton filtre

Description

Permet de mettre le bouton filtre à côté des autres boutons disponibles et d'afficher à côté “Affichage”.

Fonctions nécessaires

Modification du plugin

Ajouter le code suivant dans votre fichier main.inc.php après l'entête:

add_event_handler('loc_begin_menubar', 'personal_filter_button_move');
 
function personal_filter_button_move()
{
  // Recupere le bout de code des boutons filtres
  $s = personal_remove_tpl_code('menubar', '<!-- BEGIN start_filter -->', '<!-- END stop_filter -->');
 
  // Ajout le bout de code des boutons filtres
  //personal_add_after_tpl_code('index', '<!-- END mode_created -->', '
  //<li>'.$s.'</li>
  //');
  // Ajout le bout de code des boutons filtres avant le bouton order
  // Les retours à la ligne sont nécessaire pour le tpl fonctionne
  // Ajout de <li> necessaire et du texte language
  // La traduction est à ajouté dans les fichiers local.lang.php
  // Il existe un autre moyen d'ajouter des boutons mais cet exemple sert à montrer comment déplacer et modifier du code
  personal_add_before_tpl_code('index', '<!-- BEGIN preferred_image_order -->', '
  <b>{lang:Display}</b>
  <li>'.$s.'</li>
  ');
}

Cette astuce se retouve aussi dans la personnalisation de la branche 1.7

Ajouter du code javascript

Exemple : Décocher "simuler" lors de la synchronisation

Description

Permet d'avoir la case à cocher “Simuler uniquement” non coché par defaut.

Fonctions nécessaires

Modification du plugin

Ajouter le code suivant dans votre fichier main.inc.php après l'en-tête :

add_event_handler('loc_begin_page_tail', 'personal_sync_not_simulate');
 
function personal_sync_not_simulate()
{
  global $page, $template;
 
  if
  (
    is_admin() and 
    (script_basename() == 'admin') and
    ($page['page'] == 'site_update')
  )
  {
    personal_add_after_tpl_code('tail',
    '</div> <!-- the_page -->',
    '
<script type="text/javascript">
document.getElementsByName("simulate")[0].checked = false;
</script>
    '
    );
  }
}

Cette astuce se retouve aussi dans la personnalisation de la branche 1.7

Exemples intéressants

Agir sur les valeurs postées dans un formulaire

Modifier des valeurs assignées à un template

Agir sur des listes assignées à un template

Ajouter du code css

Remarques

Il est bien entendu possible de fusionner les différentes fonctions des triggers entre elles.

Pour éviter le listage des répertoires et sous-répertoires de vos plugins, il est préférable d'y mettre le même fichier index.php que celui présent dans les autres répertoires de Piwigo.

Vous pouvez également retrouver d'autres évènements personnels dans les Trucs et Astuces de la 1.7, par exemple : Gommer le compteur de catégorie.

La modification de template par plugin est intéressante quand elle est liée à une modification de code php, c'est à dire si j'ai besoin de modifier un peu de php et qu'en raison de ce changement, j'ai en parallèle besoin de changer le fichier .tpl correspondant.

La modification seule de .tpl ne se justifie pas pour :

  • une page publique d'un site très actif
  • ou si le nombre de modification d'un même template est important

Dans ce cas, il vaut mieux modifier directement le fichier .tpl une fois pour toute au lieu de dérouler du code php supplémentaire à chaque visite de page. Au besoin, créer son propre template est indispensable dès que le nombre de modifications est trop important.

Exemple à éviter pour les sites très actifs :
[PLUGIN] Déplacer « Identification » en haut du menu
Autant dans ce cas, faire cela une fois pour toute à la “main” dans menubar.tpl.

A l'inverse, certaines fonctionnalités ne peuvent pas être assurées par des directives css : dans ces cas très exceptionnels, l'usage du plugin personnel deviendra indispensable.

Si vous rencontrez des difficultés à la mise en place ou à l'élaboration de votre personal plugin, n'hésitez pas à poser des question sur le forum.

MERCI DE NE PAS TOUCHER AUX LIGNES QUI SUIVENT.

 
Haut de page
projet/developpement/plugins/exemple_faire_son_plugin_perso.txt · Dernière modification: 2011/08/10 15:33 par tosca
 
 
github twitter newsletter Faire un don Piwigo.org © 2002-2020 · Contact