Toolbox

De TheliaDoc
Version du 20 octobre 2012 à 01:13 par F r e d (discuter | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Créer sa propre boucle (à partir de la version 1.4.3)

Grâce aux plugins vous allez pouvoir créer vos propres boucles pour en rajouter à Thélia. Pour ce faire vous devez utilisez la fonction boucle dans votre Plugin. Elle recoit 2 paramètres en entrée. $args et $texte. $args contient les arguments passés en entrée à la boucle et $texte contient le texte encapsulé dans la boucle.

Pour récupérer les arguments, vous devez utiliser la fonction lireTag qui prend en paramètre $args et le nom du paramètre à récupérer.

Pour exemple, on va prendre un plugin qui permet de laisser un commentaire sur un produit. la table contient le champ produit (identifiant du produit), la date du commentaire, le commentaire et la colonne ligne qui permet de mettre en ligne ou pas le commentaire. La boucle prend en paramètre d'entrée l'id du produit, ligne (qui permettra de spécifier si on veut afficher les commentaires hors-ligne), num (pour spécifier le nombre de commentaires à afficher) et debut qui spécifie à partir de quel résultat on doit afficher les commentaires :

function boucle($texte,$args){
   $produit = lireTag($args,"produit");
   $ligne = lireTag($args,"ligne");
   $num = lireTag($args,"num");

}

les variables $produit, $ligne et $num contiennent à présent les valeurs passés en argument à notre boucle sur le front-office et nous allons pouvoir à présent construire notre requête puis l'exploiter

function boucle($texte,$args){
   $produit = lireTag($args,"produit");
   $ligne = lireTag($args,"ligne");
   $num = lireTag($args,"num");
   $debut = lireTag($args,"debut");
    
   if($debut == "") $debut = 0;   


   //initialisation des variables temporaires
   $search = "";
   $temp = "";
   $res = "";
   $limit = "";

   if($produit != "") $search .= " and produit in (\"".$produit."\")";
   if($ligne == "") $search .= " and ligne=1"; 
   if($num != "") $search .= " limit $debut,$num";

   //les paramètres de la requête sont désormais crées, on peut la construire : 
   $commentaire = new Commentaire();
   $query = "select * from $commentaire->table where 1 $search $limit";
   $resul = CacheBase::getCache()->mysql_query($query, $commentaire->link);

   //la requête est préparé et exécuté grâce au moteur de Thelia qui gère un petit cache sur les requêtes.
   //on traite les données retournées qui permettront l'affichage : 
   foreach($resul as $row){
        $temp = str_replace("#COMMENTAIRE",$row->commentaire,$texte);
        $temp = str_replace("#PRODUIT",$row->produit,$temp);
        $temp = str_replace("#DATE",$row->date,$temp);

        //on stock le résultat dans la variable res
        $res .= $temp;
   }

   //on peut désormais renvoyer le résultat au navigateur : 
   return $res;
}

Récupérer les paramètres en GET ou POST de manière sécurisé (à partir de la version 1.4.3)

Depuis la version 1.4.3, une nouvelle fonction va vous permettre de récupérer les variables passées par la méthode GET ou POST de manière sécurisé ce qui évitera par exemple les injections sql et autres failles XSS. Elle prend 3 paramètres en entrée (le dernier est optionnel.

prototype de la fonction : mixed lireParam(string paramètre, string type[, string méthode ])

- paramètre : nom de la variable ( "produit" pour $_GET["produit"] par exemple
- type : type de données attendues : int, string (a-zA-Z et caractères accentués), float, int_list, string_list. Il estpossible de passer un complément en plus du type attendu. Pour le mail par exemple il y aura un @ et des points il faudra donc mettre : string+\@\.
- méthode : permet de préciser la méthode (GET ou POST). Par défaut $_REQUEST sera utilisé. Si on veut bloquer sur une méthode on spécifie soit POST soit GET.

Fonctions accessibles depuis les plugins

Ces fonctions sont directements accessibles de n'importe quel plugins. Si vous souhaitez utiliser d'autres fonctions/classes de Thelia vous devez les inclure (en appelant le fichier) dans votre plugin.

- function redirige(string url) : recoit en paramètre l'url vers laquelle l'utilisateur sera redirigé.

- function chemin(int id) : recoit en paramètre l'id d'une rubrique et renvoie (sous forme de tableau d'objet) le chemin pour aller à cette rubrique

- function chemin_dos(int id) : recoit en paramètre l'id d'une rubrique et renvoi (sous forme de tableau d'objet) le chemin pour aller à ce dossier.

- function rewrite_prod(string ref[,int lang = 0]) : recoit en paramètre la ref d'un produit et la langue (optionnel). Renvoie l'url réecrite de ce produit.

- function rewrite_rub(int id[, int lang = 0]) : recoit en paramètre l'id d'une rubrique et la langue (optionnel). Renvoie l'url réecrite de cette rubrique.

- funtion rewrite_dos(int id[, int lang = 0]) : recoit en paramètre l'id d'un dossier et la langue (optionnel). Renvoie l'url réecrite de ce dossier.

- function rewrite_cont(int id[, int lang = 0]) : recoit en paramètre l'id d'un contenu et la angue (optionnel). Renvoie l'url réecrite de ce contenu.

- function arbreBoucle(int depart[, int profondeur=0, int i=0]) : recoit en paramètre depart qui est l'id de départ d'une rubrique, la profondeur souhaité et un compteur ($i qu'on ne touche pas en fait). Retourne la hiérarchie des rubriques depuis celle de départ.

- function resize(string nomorig, int width) : recoit en paramètre le nom (ou chemin) d'une image, ainsi que la largeur souhaité de l'image. La fonction va redimensionné cette image et l'enregistrer aux nouvelles dimensions dans le répertoire courant.

- function genpass(int size) : génère un mot de passe de la longueur spécifiée en paramètre. Retourne le mot de passe généré.

- function gencode(int size) : génère un code de la longueur spécifiée en paramètre. Retourne le code généré. Ne génère que des chiffres et lettres majuscules (genpass génère des chiffres, lettres majuscules et minuscules).

- function port(int type=0) : retourne les frais de port du panier courant (renverra -1 si l'adresse de livraison/transporteur n'ont pas encore été renseigné).

- function url_exists(string url) : return true si l'url passée en paramètre existe, false sinon.