developpement_de_plugin

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
developpement_de_plugin [2010/11/24 11:07] – [Explication des champs] danydeveloppement_de_plugin [2014/06/12 15:47] – [Plugin plus avancé] yann
Ligne 6: Ligne 6:
 ====== Installation de l'extension ====== ====== Installation de l'extension ======
  
- +[[Installation de plugin]]
-Les extensions se trouvent toujours un sous-répertoire de  /phpcompta/include/ext, pour notre plugin que nous appelerons DUMMY, le répertoire correspondant sera /phpcompta/include/ext/dummy. La première étape est donc de signaler à PhpCompta l'existence de cette extension. Pour cela, il faut ,dans phpcompta, aller dans paramètre -> extensions ->ajout. +
- +
-===== Explication des champs ===== +
- +
-  * Label, est le nom de menu de votre extension +
-  * Code est utilisé pour inclure le fichier du plugin, il correspond au champs caché EXT +
-  * Fichier est le chemin complet vers l'extension +
-  * Sécurité : qui peut appeler le plugin +
- +
-  +
- Pour notre extension, les valeurs suivantes sont données +
-  * Label : Mon dummy à moi +
-  * code : dum +
-  * Fichier : dummy/dummy.php +
-  * Sécurité : aucune +
-  +
- Vous sauvez, cliquer sur Extension et vous verrez apparaître un nouveau plugin appelé "Mon dummy à moi"; si vous cliquez dessus, la page ext/dummy/dummy.php sera exécutée; voyez le code du fichier phpcompta/html/extension.php pour comprendre.+
    
 ===== Connection à la base de données ===== ===== Connection à la base de données =====
Ligne 34: Ligne 17:
  Donc on écrit dans dummy.php  Donc on écrit dans dummy.php
    
 +<code php>
   echo "L' identifiant de mon dossier est ".dossier::id()."<br>";   echo "L' identifiant de mon dossier est ".dossier::id()."<br>";
   echo "Son nom réel est ".DOMAIN."dossier".dossier::id()."<br>";   echo "Son nom réel est ".DOMAIN."dossier".dossier::id()."<br>";
   echo "Son nom est ".dossier::name()."<br>";   echo "Son nom est ".dossier::name()."<br>";
 + // Je me connecte à présent à ce dossier
 +  $cn_db=new Database(dossier::id());
  
-  +  
 +</code>
  
      
- 
-  // Je me connecte à présent à ce dossier 
-  $cn_db=new Database(dossier::id()); 
  
    
Ligne 53: Ligne 36:
  Pour avoir toutes les fiches,  Pour avoir toutes les fiches,
    
 +<code php>
   $fiche= new Fiche($cn_db);   $fiche= new Fiche($cn_db);
   $aFicheMateriel=$fiche->getByDef(7);    $aFicheMateriel=$fiche->getByDef(7); 
  
-  +</code>
  
  Pour chaque fiche, je veux afficher son nom, son prix, le nombre d'années à amortir et la date d'achat. Je peux en trouver les valeurs dans la table attr_def ou le fichier constant.php,  Pour chaque fiche, je veux afficher son nom, son prix, le nombre d'années à amortir et la date d'achat. Je peux en trouver les valeurs dans la table attr_def ou le fichier constant.php,
    
  Donc cela devient  Donc cela devient
 +<code php>
   for ($i=0; $i < count($aFicheMateriel);$i++) {   for ($i=0; $i < count($aFicheMateriel);$i++) {
     echo "<ul>     echo "<ul>
Ligne 70: Ligne 53:
      echo "</li>";      echo "</li>";
      echo "<li> ";      echo "<li> ";
-     echo "Prix d'achat";+     echo "Prix achat";
      echo $aFicheMateriel[$i]->strAttribut(ATTR_DEF_PRIX_ACHAT);      echo $aFicheMateriel[$i]->strAttribut(ATTR_DEF_PRIX_ACHAT);
      echo "</li>";      echo "</li>";
Ligne 83: Ligne 66:
      echo "</ul>      echo "</ul>
   }   }
 +</code>
      
  
Ligne 95: Ligne 78:
  On aura alors le code suivant, on utilisera la technique des templates  On aura alors le code suivant, on utilisera la technique des templates
    
 +<code php>
   $year=new IText('year');   $year=new IText('year');
  
Ligne 103: Ligne 86:
  
   require_once('template1.php');   require_once('template1.php');
 +</code>
      
  
Ligne 109: Ligne 92:
  
   template1.php   template1.php
 +<code php>
   <FORM METHOD="GET" ACTION="extension.php">   <FORM METHOD="GET" ACTION="extension.php">
  
Ligne 121: Ligne 104:
  
   </form>   </form>
 +</code>
    
 Puis dans le début du fichier phpcompta/include/ext/dummy/dummy.php, on ajoutera un test pour savoir un FORM a été soumis et on affichera Puis dans le début du fichier phpcompta/include/ext/dummy/dummy.php, on ajoutera un test pour savoir un FORM a été soumis et on affichera
 une boîte de dialogue. une boîte de dialogue.
  
 +<code php>
  if (isset($_GET['year_left'])){  if (isset($_GET['year_left'])){
  
Ligne 132: Ligne 116:
  }  }
  
 +</code>
 ====== Plugin plus avancé ====== ====== Plugin plus avancé ======
  
Ligne 144: Ligne 128:
 Tout d'abord, il faut se connecter à la base de données Tout d'abord, il faut se connecter à la base de données
  
 +<code php>
  // se connecter au dossier courant  // se connecter au dossier courant
  
  $cn=new Database(dossier::id());  $cn=new Database(dossier::id());
 +</code>
  
 Dans extension.php on vérifie la sécurité, en ajoutez une dans l'extension n'est en général pas nécessaire mais vous pourriez avoir votre propre système de sécurité si votre extension est fort complexe Dans extension.php on vérifie la sécurité, en ajoutez une dans l'extension n'est en général pas nécessaire mais vous pourriez avoir votre propre système de sécurité si votre extension est fort complexe
  
-En premier lieu, il est nécessaire  de choisir dans quel catégorie de fiche je veux intégrer les+En premier lieu, il est nécessaire  de choisir dans quelle catégorie de fiche je veux intégrer les
 enregistrements. Donc on utilise un petit form enregistrements. Donc on utilise un petit form
 +<code php>
  
  echo '<form METHOD="get" action="extension.php">';  echo '<form METHOD="get" action="extension.php">';
Ligne 183: Ligne 167:
  
  echo '</FORM>';  echo '</FORM>';
 +</code>
  
 Il faut remarquer 2 choses dans ce FORM, primo, on utilise les objets HtmlInput et ISelect, secundo on doit avoir absolument en variables cachées, le n° de dossier sur  lequel on est connecté, le code de l'extension, qui permettra à extension.php d'include le bon fichier. On utilise ici le protocole GET puisqu'on interroge, le protocole POST est réservé aux sauvegardes, c'est une convention assez répandue. La différence, est que les requêtes GET se voient dans l'URL, les requêtes POST ne sont jamais dans l'url. Il faut remarquer 2 choses dans ce FORM, primo, on utilise les objets HtmlInput et ISelect, secundo on doit avoir absolument en variables cachées, le n° de dossier sur  lequel on est connecté, le code de l'extension, qui permettra à extension.php d'include le bon fichier. On utilise ici le protocole GET puisqu'on interroge, le protocole POST est réservé aux sauvegardes, c'est une convention assez répandue. La différence, est que les requêtes GET se voient dans l'URL, les requêtes POST ne sont jamais dans l'url.
Ligne 191: Ligne 175:
  
 On choisit d'afficher les propriétés avant de confirmer l'import On choisit d'afficher les propriétés avant de confirmer l'import
 +<code php>
  if ( isset($_GET['display_prop'])){  if ( isset($_GET['display_prop'])){
  
Ligne 221: Ligne 205:
  
  }  }
 +</code>
 Voilà, si l'utilisateur clique sur le bouton SUBMIT,  l'importation va  démarrer. Dans notre exemple, on imaginera que le fichier CSV n'a que 4 champs "nom client","prenom client", "numero client","adresse client" Voilà, si l'utilisateur clique sur le bouton SUBMIT,  l'importation va  démarrer. Dans notre exemple, on imaginera que le fichier CSV n'a que 4 champs "nom client","prenom client", "numero client","adresse client"
  
 Le code qui suit est très simplifié, il n'y a peu voire aucun contrôle ni de gestion d'erreur. Le code qui suit est très simplifié, il n'y a peu voire aucun contrôle ni de gestion d'erreur.
 +<code php>
  if ( isset($_POST['start_import'])){  if ( isset($_POST['start_import'])){
  
Ligne 285: Ligne 269:
  
  }  }
 +</code>
  
  
Ligne 291: Ligne 275:
 Voici le fichier client.txt Voici le fichier client.txt
  
 +<code>
  "Nom client1","Prénom","C1","Rue de la boite,55"  "Nom client1","Prénom","C1","Rue de la boite,55"
  
Ligne 299: Ligne 284:
  "Nom client4","Prénom","C4","Rue de la couleur,55"  "Nom client4","Prénom","C4","Rue de la couleur,55"
  
 +</code>
 Si vous vérifiez dans VW_CLIENT, vous verrez que toutes vos fiches ont été ajoutées. Dans l'exemple, il fatraitement d'erreur plus élaboré; le fait que si une fiche echoue , l'opération est annulée (Database::rollback) ou alors création d'un fichier avec les enregistrements "ratés"... Si vous vérifiez dans VW_CLIENT, vous verrez que toutes vos fiches ont été ajoutées. Dans l'exemple, il fatraitement d'erreur plus élaboré; le fait que si une fiche echoue , l'opération est annulée (Database::rollback) ou alors création d'un fichier avec les enregistrements "ratés"...
  
Ligne 321: Ligne 306:
  
 dummy/javascript.js, vous avez  dummy/javascript.js, vous avez 
 +<code javascript>
 function show_detail(pop_id){ function show_detail(pop_id){
     $('detail_invoice_content').innerHTML=loading();     $('detail_invoice_content').innerHTML=loading();
Ligne 343: Ligne 328:
  
  }  }
 +</code>
    
  
Ligne 349: Ligne 334:
  
    
- +<code php> 
 +<?php
 // Met correctement la langue // Met correctement la langue
  
 set_language(); set_language();
-//retrouve le dossier courant et s'y connecte+//retrouve le dossier courant et s y connecte
  
 $gDossier=dossier::id(); $gDossier=dossier::id();
Ligne 370: Ligne 355:
 $User->Check(); $User->Check();
  
-/* Suivant l'action demandé, on executera tel ou tel partie de code+/* Suivant l action demandé, on executera tel ou tel partie de code
  
 /* Show the document */ /* Show the document */
Ligne 392: Ligne 377:
     echo '</answer>';     echo '</answer>';
 } }
 +?> 
 +</code>
    
-Les données+====== Les données ====== 
  
 Si votre extension nécessite de sauver ses propres données, il faut impérativement les mettres dans un schéma séparé. Prévoyez une table version, afin d'appliquer des mises à jour si nécessaire et un fichier install.php afin de créer les schémas nécessaire Si votre extension nécessite de sauver ses propres données, il faut impérativement les mettres dans un schéma séparé. Prévoyez une table version, afin d'appliquer des mises à jour si nécessaire et un fichier install.php afin de créer les schémas nécessaire
  • developpement_de_plugin.txt
  • Dernière modification : 2015/01/26 00:58
  • de dany