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édenteDernière révisionLes deux révisions suivantes | ||
developpement_de_plugin [2013/02/28 00:52] – modification externe 127.0.0.1 | developpement_de_plugin [2014/12/20 17:58] – dany | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | + | [[developpement:developpement_de_plugin|Développement | |
- | ====== 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 contient plusieurs pages, vous allez devoir ajouter une seconde variable pour | + | |
- | + | ||
- | // 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> | + | |
- | <?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); | + | |
- | + | ||
- | .... | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + |