Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| developpement_de_plugin [2011/02/25 23:18] – [Ajax] dany | developpement_de_plugin [2015/01/26 00:58] (Version actuelle) – dany | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | + | Page déplacée | |
| - | ====== L' | + | |
| - | + | ||
| - | Toute la documentation se trouve sur www.phpcompta.eu/ | + | |
| - | + | ||
| - | ====== Installation de l' | + | |
| - | + | ||
| - | [[Installation de plugin]] | + | |
| - | + | ||
| - | ===== Connection à la base de données ===== | + | |
| - | + | ||
| - | + | ||
| - | | + | |
| - | Pour se connecter c'est assez facile, il faut utiliser la classe Database et la classe Dossier. | + | |
| - | + | ||
| - | + | ||
| - | Donc on écrit dans dummy.php | + | |
| - | + | ||
| - | <code php> | + | |
| - | echo " | + | |
| - | echo "Son nom réel est " | + | |
| - | echo "Son nom est " | + | |
| - | // Je me connecte à présent à ce dossier | + | |
| - | $cn_db=new Database(dossier:: | + | |
| - | + | ||
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | Je veux afficher toutes les fiches qui concernent le matériel à amortir, donc j'ai | + | |
| - | | + | |
| - | je vois dans la table fiche_def_ref qu'il s'agit de "7 Matériel à amortir" | + | |
| - | + | ||
| - | Pour avoir toutes les fiches, | + | |
| - | + | ||
| - | <code php> | + | |
| - | $fiche= new Fiche($cn_db); | + | |
| - | $aFicheMateriel=$fiche-> | + | |
| - | + | ||
| - | </ | + | |
| - | + | ||
| - | Pour chaque fiche, je veux afficher son nom, son prix, le nombre d' | + | |
| - | + | ||
| - | Donc cela devient | + | |
| - | <code php> | + | |
| - | for ($i=0; $i < count($aFicheMateriel); | + | |
| - | echo "< | + | |
| - | echo "< | + | |
| - | echo " | + | |
| - | echo $aFicheMateriel[$i]-> | + | |
| - | echo "</ | + | |
| - | echo "< | + | |
| - | echo "Prix achat"; | + | |
| - | echo $aFicheMateriel[$i]-> | + | |
| - | echo "</ | + | |
| - | echo "< | + | |
| - | echo " | + | |
| - | echo $aFicheMateriel[$i]-> | + | |
| - | echo "</ | + | |
| - | echo "< | + | |
| - | echo "Date de début"; | + | |
| - | echo $aFicheMateriel[$i]-> | + | |
| - | echo "</ | + | |
| - | echo "</ | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | ===== Soumettre des requêtes ===== | + | |
| - | + | ||
| - | + | ||
| - | | + | |
| - | Les données nécessaires dans le FORM sont toujours au minimum: l'id du dossier, le code du plugin. | + | |
| - | + | ||
| - | Dans le FORM, on demandera juste à afficher le solde de chaque élément. | + | |
| - | On aura alors le code suivant, on utilisera la technique des templates | + | |
| - | + | ||
| - | <code php> | + | |
| - | $year=new IText(' | + | |
| - | + | ||
| - | $str_year=$year-> | + | |
| - | + | ||
| - | $str_submit=HtmlInput:: | + | |
| - | + | ||
| - | require_once(' | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | template1.php | + | |
| - | <code php> | + | |
| - | <FORM METHOD=" | + | |
| - | + | ||
| - | <? | + | |
| - | + | ||
| - | <? | + | |
| - | + | ||
| - | Solde pour l' | + | |
| - | + | ||
| - | <? | + | |
| - | + | ||
| - | </ | + | |
| - | </ | + | |
| - | + | ||
| - | Puis dans le début du fichier phpcompta/ | + | |
| - | une boîte de dialogue. | + | |
| - | + | ||
| - | <code php> | + | |
| - | if (isset($_GET[' | + | |
| - | + | ||
| - | alert(' | + | |
| - | + | ||
| - | } | + | |
| - | + | ||
| - | </ | + | |
| - | ====== Plugin plus avancé ====== | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | Ma première extension, intégrer un fichier de client dans une catégorie | + | |
| - | de fiche, ce fichier est en CSV. Le code est simple et compréhensible, | + | |
| - | devrait avoir une meilleure gestion des erreurs, vérifier les attaques SQL Inject, | + | |
| - | Ce code n'est là QUE pour expliquer le concept. On n'a pas utilisé plusieurs pages, ni de templates | + | |
| - | + | ||
| - | Tout d' | + | |
| - | + | ||
| - | <code php> | + | |
| - | // se connecter au dossier courant | + | |
| - | + | ||
| - | | + | |
| - | </ | + | |
| - | + | ||
| - | Dans extension.php on vérifie la sécurité, en ajoutez une dans l' | + | |
| - | + | ||
| - | En premier lieu, il est nécessaire | + | |
| - | enregistrements. Donc on utilise un petit form | + | |
| - | <code php> | + | |
| - | + | ||
| - | echo '< | + | |
| - | + | ||
| - | echo dossier:: | + | |
| - | + | ||
| - | // Ceci vous permet de revenir ici (voir extension.php). Cet élément caché permet d' | + | |
| - | + | ||
| - | // Donc si votre plugin | + | |
| - | + | ||
| - | // inclure la page que vous voulez (voir méthode de développement de PhpCompta ) | + | |
| - | + | ||
| - | echo HtmlInput:: | + | |
| - | + | ||
| - | + | ||
| - | echo "Choix de la catégorie de fiche"; | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | echo $select_cat-> | + | |
| - | + | ||
| - | echo HtmlInput:: | + | |
| - | + | ||
| - | + | ||
| - | echo '</ | + | |
| - | </ | + | |
| - | + | ||
| - | 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' | + | |
| - | + | ||
| - | + | ||
| - | L' | + | |
| - | + | ||
| - | On choisit d' | + | |
| - | <code php> | + | |
| - | if ( isset($_GET[' | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | echo '< | + | |
| - | + | ||
| - | echo dossier:: | + | |
| - | + | ||
| - | echo HtmlInput:: | + | |
| - | + | ||
| - | echo HtmlInput:: | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | echo $file-> | + | |
| - | + | ||
| - | echo HtmlInput:: | + | |
| - | + | ||
| - | echo '</ | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | } | + | |
| - | </ | + | |
| - | Voilà, si l' | + | |
| - | + | ||
| - | Le code qui suit est très simplifié, il n'y a peu voire aucun contrôle ni de gestion d' | + | |
| - | <code php> | + | |
| - | if ( isset($_POST[' | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | if ( ! is_uploaded_file($tmp_file)) | + | |
| - | + | ||
| - | die 'Je ne peux charger ce fichier'; | + | |
| - | + | ||
| - | // on ouvre le fichier | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | // On récupère les propriétés de cette catégorie de fiche | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | // $array contient toutes les valeurs nécessaires à Fiche:: | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | while ( $data=fgetcsv($f)) { | + | |
| - | + | ||
| - | // remarque : on a éliminé les traitements d' | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | // On remet tous les attributs (propriétés) à vide | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | // Nom et prénom | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | // Numéro de client | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | // Adresse | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | // Quickcode | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | } | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | Voici le fichier client.txt | + | |
| - | + | ||
| - | < | + | |
| - | " | + | |
| - | + | ||
| - | " | + | |
| - | + | ||
| - | " | + | |
| - | + | ||
| - | " | + | |
| - | + | ||
| - | </ | + | |
| - | Si vous vérifiez dans VW_CLIENT, vous verrez que toutes vos fiches ont été ajoutées. Dans l' | + | |
| - | + | ||
| - | + | ||
| - | ====== Ajax ====== | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | Afin d' | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | Exemple | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | dans | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | dummy/ | + | |
| - | <code javascript> | + | |
| - | function show_detail(pop_id){ | + | |
| - | $(' | + | |
| - | showIPopup(' | + | |
| - | try { | + | |
| - | var gDossier=$(' | + | |
| - | var phpsessid=$(' | + | |
| - | var code=$(' | + | |
| - | var obj={" | + | |
| - | var queryString=encodeJSON(obj); | + | |
| - | var action=new Ajax.Request ( ' | + | |
| - | { | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | } | + | |
| - | ); | + | |
| - | } catch (e){alert(' | + | |
| - | + | ||
| - | + | ||
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | et dans dummy/ | + | |
| - | + | ||
| - | + | ||
| - | <code php> | + | |
| - | + | ||
| - | // Met correctement la langue | + | |
| - | + | ||
| - | set_language(); | + | |
| - | //retrouve le dossier courant et s y connecte | + | |
| - | + | ||
| - | $gDossier=dossier:: | + | |
| - | $cn=new Database($gDossier); | + | |
| - | + | ||
| - | // action | + | |
| - | + | ||
| - | $action=(isset($_REQUEST[' | + | |
| - | + | ||
| - | + | ||
| - | // Véridfie la sécurité | + | |
| - | + | ||
| - | require_once (' | + | |
| - | $User=new User(new Database()); | + | |
| - | $User-> | + | |
| - | + | ||
| - | /* Suivant l action demandé, on executera tel ou tel partie de code | + | |
| - | + | ||
| - | /* Show the document */ | + | |
| - | if ( $action == ' | + | |
| - | /* | + | |
| - | + | ||
| - | * Votre code | + | |
| - | + | ||
| - | */} | + | |
| - | /* remove the document */ | + | |
| - | if ( $action == ' | + | |
| - | /*votre code et la réponse | + | |
| - | + | ||
| - | */ | + | |
| - | + | ||
| - | header(' | + | |
| - | header ('<? | + | |
| - | echo '< | + | |
| - | echo '< | + | |
| - | echo '< | + | |
| - | echo '</ | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | ====== 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' | + | |
| - | + | ||
| - | exemple | + | |
| - | + | ||
| - | create schema plugin_tva; | + | |
| - | + | ||
| - | create table version (val integer); | + | |
| - | + | ||
| - | .... | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||