[Astuce] Comment j'ai intégré un formulaire courriel dans Pluxml

yhugoyhugo Member
juin 2008 modifié dans Modifications
Tout d'abord je dois préciser que toutes les modifications que j'apporte à Pluxml je les fais en essayant de ne jamais modifier le noyau de l'application; Pourquoi ? Pour être en mesure de mettre à jour facilement Pluxml au fil des versions et aussi pour ne pas dénaturer l'esprit initial de ce moteur de blog : simplicité et légerté.

Sur mon site Web, l'intégration du formulaire de courriel repose sur la même technique que j'ai abordé dans un autre post, c'est-à-dire la création d'une varialble qui récupère le nom URL des catégories.

Dans la page categories.php de l'administration d'un site Pluxml, vous avez sûrement déjà remarqué la colonne URL ; Celle-ci reprend les noms de vos catégories, mais modifiés afin qu'ils soient utilisables dans les adresses URL. Donc sans accents et les mots se trouvent séparés par des tirets.

Si ces noms de catégories sont bons pour des hyperliens, alors par ricochet, ils le seront également pour des ID XHTML / CSS et des noms variables PHP ... Et ça c'est une chance pour nous, car nous allons avoir la possibilité de modifier beaucoup de choses dans nos templates grâce à ces noms de catégories.

Bon maintenant nous devons trouver le morceau de code PHP qui génère ces noms de catégories et le transformer en variable dans notre fichier template.php.

Ce qui nous intéresse se trouve dans le fichier core/lib/functions.php, plus ou moins à la ligne #64 :
case 'categorie':
	if($pluxml->result->f('cat_num') != 'home'){
		echo '<a href="?'.$pluxml->result->f('cat_num').'/'.$pluxml->uCats[$pluxml->result->f('cat_num')]['url'].'">'.$pluxml->uCats[$pluxml->result->f('cat_num')]['name'].'</a>';
	}
break;
Ne copier que ceci : ($pluxml->uCats[$pluxml->result->f('cat_num')]) ... Puis collez ce bout de code juste en haut de la balise <body> de votre fichier template.php.

Mais sous cette forme ce bout de code est inutilisable ! N'oubliez pas
notre but est d'en faire une variable PHP. Donc nous devons un peu l'étoffer ...

D'abord un script PHP dois toujours être entouré de <?php ?> :
<?php 
	$pluxml->uCats[$pluxml->result->f('cat_num')]['url'] 
?>
Puis une variable en PHP doit avoir cette syntaxe :
<?php
	$nomDeLaVariable = valeurDeLaVariable ;
?>
Alors le bout de code qui nous intéresse ici prendra cette forme :
<?php 
	$categorie = $pluxml->uCats[$pluxml->result->f('cat_num')]['url'] ;
?>
Ensuite je vous conseil de tester si votre code récupère bien le nom
URL de la catégorie de la page courante. Pour se faire, placez le script
ci-dessous à quelque part entre la balise <body> :
<?php echo "<p style='color:#ff0000;font-size:5em;'>".$categorie."</p>" ;?>
Normalement, vous devriez voir le nom de la catégorie courante apparaître en rouge dans votre page ... Si ce n'est pas le cas, je vous conseille de repasser les étapes ci-dessus.

Maintenant passons à la prochaîne étape : Nous allons céer une catégorie qui s'apelle Contact et un article qui s'appellera aussi Contact. Évidemment tout ça se fait par l'entremise de votre interface d'administration. Dans l'article Contact vous pouvez mettre ce que vous voulez : adresse, courriel, téléphone, etc.

Une fois que votre catégorie et votre article sont créés, vous allez devoir vous trouver un script de formulaire courriel. Celui que j'utilise moi, je l'ai trouvé sur le site Web webmaster-hub.com ... Il tient sur une page et il est facile à adapter, il n'est peut-être pas autement sécurisé, mais rien ne vous empêche de l'améliorer par la suite.

Lorsque que vous avez mît la main sur votre script de formulaire courriel, créez un répertoire includes à la racine de votre site, mettez s'y votre fichier et renommez-le contact.inc.php.

Nous avons presque terminé, maintenant il nous faut retourner à notre fichier template.php pour y insérer notre formulaire. Et voici comment :

Dans votre fichier template.php repérez le morceau de PHP suivant : <?php __('content'); ?> ... Dan mon fichier il se trouve à la ligne #97 ... Et juste en dessous ajoutez-y l'include PHP ci-dessous.
<?php include("includes/contact.inc.php");?>
Enregistrez les modifications et allez voir le résultat dans votre navigateur ... Si tout c'est bien passé, vous devriez voir le formulaire dans la page. Il y a cependant un problème : Si vous naviguez dans votre site vous constaterez que le formulaire se trouve sur toutes les pages de votre site ! Donc tout ce qui nous reste à faire c'est de dire à Pluxml de n'afficher le formulaire que dans une seule section, en l'occurence la section Contact, qui elle ne contient qu'un seul article qui se nomme lui aussi Contact.

Et vous l'aurez deviné, pour y arriver nous allons utiliser la variable $section que nous avons créée plus haut en y ajoutant une condition au include que nous avons insérer tout à l'heure :

<?php if($section=="Contact") {
  include("includes/contact.inc.php");
} ?>
Voilà ... si tout c'est bien passé, votre formulaire ne devrait maintenant qu'apparaître dans la section Contact.

Bien sûr vous allez pouvoir utiliser cette technique pour différents scripts PHP que vous voudriez ajouter à votre site Web Pluxml.

Merci, bonne chance et bon courage !

Réponses

  • DanDan Member
    août 2009 modifié
    Mes scripts PHP ne fonctionnent pas en "include" dans Pluxml en les appelant de cette manière ...
    En "lien externe" aucun problème pourtant !
    Il y a une petite erreur sur le dernier code, mais ce n'est pas cela
    <?php if($section=="Contact") {
      include("includes/contact.inc.php");
    } ?>
    
    à remplacer par : (pour faire correspondre à la variable du haut)
    <?php if($categorie=="Contact") {
      include("includes/contact.inc.php");
    } ?>
    
    Une idée ??? (doit y avoir un chemin relatif ou autre qui ne va pas)
  • yhugoyhugo Member
    Salut Dan, depuis l'écriture de mon post un peu d'eau a coulé sous les ponts ...
    la version de Pluxml n'est pas la même; Je ne sais donc pas si ce que j'ai fait s'applique toujours ..?

    Je crois malheureusement que le code de Plumxml a changé un peu de syntaxe ... Ce qui rend le premier paragraphe de ce post ridicule :P ... Quelqu'un pourra sûrement t'aider à obtenir un formulaire courriel ...

    Sinon il y a ceci (http://wiki.pluxml.org/?page=Cr%C3%A9er%20un%20formulaire%20de%20contact) que je n'ai jamais testé.

    Bonne réussite !
  • DanDan Member
    août 2009 modifié
    Bonjour yhugo, ton code est bon et permet de faire une personnalisation selon les catégories, je suis sur une version "d'époque" blog beta 3. 1
    Mais ce sont les scripts que j'essaye qui ne fonctionnent pas correctement en include dans pluxml.
    ...
    En gros quand j'intègre un script avec php include, je me retrouve dans la racine de pluxml, pas dans celle du script ... ! et donc avec plein d'erreur ...
  • Dan il faut que tu utilises ce code => [url]http://wiki.pluxml.org/?page=Créer un formulaire de contact[/url] dans une page statique comme te l'indique yhugo...
  • DanDan Member
    août 2009 modifié
    Merci beaucoup à vous deux (à vous tous) pour vos réponses.

    Ce n'etait pas pour intégrer un formulaire de courriel (c'est fait à l'origine) mais pour insérer tous types de scripts Php (un postcard, un forum, pour le moment externalisé en liens ...)

    Je comprends apparement que la version 4.1 et ses pages "statiques" sont conçues pour faire cela. ?
    Il faudra donc que j'y vienne ...
    Mais ma version actuelle me convenait plus que parfaitement en dehors de ce seul point.
    Tout réadapter me parait infaisable ...

    Si je ne trouve pas de solutions, je pense attendre comme cela, une future version avec peut être une gestion de plugins ou grefons (pour une facilité d'adaptation à mes besoins) ?

    Dans tous les cas bravo et merci pour ce CMS, il tourne à merveille, rapidement, config et articles sont très legers et très facilement récupérables, c'est un point essentiel pour la sécurité et la pérennité d'un projet.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Dan

    Es-tu sur du bon chemin spécifié dans l'include de tes fichiers ?
    As-tu un message d'erreur qui s'affiche ?

    Stéphane

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • DanDan Member
    août 2009 modifié
    Bonjour Stéphane,
    oui j'ai des messages d'erreurs, les scripts php marchent en les appelant directement (en liens par exemple) mais pas en include dans pluxml, ça doit pas être bien compliqué, le chemin me semble bon pourtant ...

    voici par exemple une erreur sur un petit script de postcard (que je comptais améliorer, vérifications de syntaxe mails et de champs par exemple en JS ...) mais ...

    erreur :
    Warning: opendir(thumbs) [function.opendir]: failed to open dir: No such file or directory in ..... puis suit le chemin exact du script depuis la racine du serveur jusqu'au nom du script ****.php.... (le script fonctionne parfaitement hors pluxml)

    Y' t'il une protection qui empêche les includes ou ne doit on pas les faire comme indiqué plus haut ?
    include("includes/contact.inc.php"); (exemple pour le formulaire contact de l'exemple vu plus haut)
    Je me retrouve dans la "racine" de pluxml, pas dans celles des scripts (je ne sais pas si je suis suffisament clair ....) Ainsi les "commandes" sur ces scripts php me "ramènent" toutes vers la page d'accueil de pluxml ...

    Merci pour votre travail plus que formidable, je suis très content de toute manière de Pluxml.

    PS : j'utilise une version blog beta 3.1, modifiée par Gcyrillus avec une galerie photo Lightbox splendide, Fckeditor, un formulaire courriel (avec envoi mail admin par Fightsoul, super), j'ai rajouté un tri des articles dans l'admin par catégories (donné par Klav sur ce forum, génial), templates assez personnalisé aussi, etc ... bref je suis satisfait de toutes ces personnalisations qui m'ont pris beaucoup de temps ... (je suis à la rame, moi ... mais c'est ce qui m'interresse pour tenter d'apprendre un peu dans mon coin)
    Je bute sur cette possibilité d'inclure du Php ... Ce doit être un problème de chemin effectivement, mais surtout une manière d'inclure qui ne fonctionne pas avec Pluxml.
  • StéphaneStéphane Member, Former PluXml Project Manager
    à première vu le chemin donné dans l'instruction include("includes/contact.inc.php"); n'est pas bon.

    essaye avec include(PLX_ROOT."includes/contact.inc.php");

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • DanDan Member
    août 2009 modifié
    Je crois que je n'ai pas sur ma version la fonction PLX_ROOT. et après essai, ça ne marche pas.

    J'ai essayé
    include $_SERVER["DOCUMENT_ROOT"] . "/cms/core/includes/ecard/ecard.inc.php";
    (c'est le chemin et le nom d'un de mes scripts)

    ... mais j'ai la même erreur que plus haut : Warning: opendir(thumbs) [function.opendir]: failed to open dir: No such file or directory in ..... puis suit le chemin exact du script depuis la racine du serveur jusqu'au nom du script ****.php
  • StéphaneStéphane Member, Former PluXml Project Manager
    Dan, peux-tu me dire où se situe ton dossier includes par rapport au dossier core.

    as-tu par exemple:

    /core
    /data
    /includes
    /themes

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • DanDan Member
    août 2009 modifié
    Mon site est sur free.fr
    Dans un dossier /cms

    dans ce dossier il y a l'arborescence de pluxml (blog beta 3.1 !) soit:

    /aide
    /core

    dans core il y a:

    /admin
    /conf
    /fichier_utilisateur
    /includes
    /lib
    /plugins
    /templates
    /xml
    /xmlcom

    Donc mon repertoire includes est bien dans:
    cms/core/includes
  • Bonjour dan

    tu semble utiliser une archive que j'avais modifié .
    Peut-tu me dire laquelle est-ce et me dire quelle script tu souhaite integrer à cet archive ?

    GC


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • DanDan Member
    août 2009 modifié
    Bonjour gcyrillus-nomade,

    Effectivement j'utilise une de tes archives modifiées, la "Version : blog beta 02-07 BLOGUER PAR GC" qui est vraiment bien et presque idéale pour mes besoins et je t'en remercie beaucoup.
    J'ai intégré quelques modifs très interressantes (voir le post plus haut, rien toutefois qui n'affecte le fonctionnement en profondeur) et bien adapté les templates, tout refaire pour passer en version 4.1.1 me semble infaisable pour le moment, et de plus tout fonctionne tellement bien ...

    Suite à l'article de "yhugo" en haut de page et cette phrase "vous allez pouvoir utiliser cette technique pour différents scripts PHP que vous voudriez ajouter à votre site Web Pluxml", J'ai voulu intégrer un forum (DNF) sans base de donnée, puis un script très très simple de postcard (à perfectionner d'ailleurs), mais sans succès ... Le code de "yhugo" (que je remercie au passage) marche parfaitement pour la "personnalisation" mais les includes se passent mal ...

    Et j'ignore pour quelle raison, ces scripts fonctionnent parfaitement en liens hors pluxml, je ne vois rien dans leur code qui interdise une include, mais bon attention, je suis à la rame en php ...

    Encore merci à vous tous de votre attention et de votre travail formidable.

    PS : S'il n'y a pas de solution, ce n'est pas bien grave. Je ferai sûrement un changement de version de Pluxml si son code s'ouvre à une gestion de plugins, à une intégration plus aisé de code (php, js) dans les articles (coté admin).
  • août 2009 modifié
    bonjour,

    si tu inclus ton fichier directement a partir du template , alors , le chemin de base est celui qu'affiche ton navigateur , donc :
    include('includes/tonfichier.php);
    doit suffire a inclure ton fichier d'entrée.

    Ensuite , ton fichier d'entrée va lui même inclure ses propres fichiers pour bien fonctionné . Il te faudra peut-etre alors redefinir correctement le chemin de ces fichiers (les messages d'erreurs t'indiqueront quels fichiers n'ont pu etre inclus et le nom de fichier et n° de lignes ou l'erreur survient.


    Il faut aussi penser a elimiminer les<html .. body> et </body></html> des script inclus.
    verifier la navigation dans ceux-ci pour qu'il repasse par pluxml et soit a nouveau inclus ...

    Enfin , il faut aussi mettre en tampon les scripts inclus pour qu'il puissent se deroulé sans accroche , et refixer eventuellement en text/html ce qui est renvoyé au navigateur (a verifier , soucis probable de securité) .

    dans index.php de ton plux (fin de fichier ) réecrire comme ceci :
    # Insertion du template
    ob_start();
    include (PLX_DOC.'templates/'.$pluxml->style.'/template.php');
    header("Content-type: text/html");/* sous-reserve de faille de sécurité */
    ob_end_flush();
    
    j'espere que cela commence a degrossir ton souci :)

    GC

    <edit> dans tout les cas , tes scripts vont demander a être repris , justement pour tout ces fichiers inclus , ou ouvert , lus et écrits par les scripts. ça revient a personnalisé les script et les transformer en greffon .</>


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • DanDan Member
    Ok, merci de tous ces renseignements et enseignements.
    Je vais travailler en ce sens dès que possible, et si ça fonctionne, je ferai part de mes modifications.

    De toutes façons, je suis très satisfait de Pluxml, et de ce que j'ai déjà pu faire avec.

    Merci à vous tous. et @ très bientôt

    Dan
Connectez-vous ou Inscrivez-vous pour répondre.