Forum CMS Made Simple FR

Version complète : [Résolu] Un formulaire pour donner le nom de la page de destination
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.

Virginie

Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS: 1.6.7
#~ Nom de l'hébergeur : OVH
#~ Informations Système :
#~
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
Bonjour,

Je voudrais faire un formulaire où l'internaute saisit le nom (en fait l'alias) de la page sur laquelle il veut se rendre.
Je ne maîtrise pas PHP, mais je pense que FormBuilder permet de le faire.
Je n'ai pas trouvé de docu un tant soit peu complète pour ce module : est-ce que quelqu'un sait où en trouver une ?
Ou peut-être m'expliquer comment faire...
Pour info, le type de code que j'utilise d'habitude pour faire ça :
L'accès à cet espace est réservé. Renseignez le formulaire ci-dessous pour continuer.<br /><br /><br /><br />
<form method="post" action="" name="formulaire">
Mot de passe : <input type="password" name="passe">
<input type="button" name="Bouton" value="OK" onClick="var OuAller='http://www.monsite.com/index.php?page=document.formulaire.passe.value ;document.location=OuAller'" >
</form>
D'avance merci
Virginie
va falloir coder un brin mademoiselle Smile

soit page1 la page contenant le formulaire (décocher WYSIWYG)
soit page2 la page invisible/no-searchable/no-cachée contenant dans son content l'appel à la balise utilisateur {ma_balise}


le code côté formulaire est déjà +/- faisable en HTML pur

Code :
<form method="post" action="page2" name="formulaire">
L'alias : <input type="texte" name="alias">
<input type="submit" name="clic" value="OK">
</form>
le code de la balise utilisateur (en php, allez on va se former un peu)

Code :
global $gCms;

if (! isset($params['alias']))
{
    return;
}

$page = $params['alias'];

$manager =& $gCms->GetHierarchyManager();    
$node =& $manager->sureGetNodeByAlias($page);

if (! isset($node))
{
    return;
}

$content =& $node->GetContent();

    if (isset($content) && is_object($content))
       {
         if ($content->GetURL() != '')
         {
            redirect($content->GetURL());
         }
       }
    else return;
le code récupère la variable "alias" passé depuis le formulaire, test si une page avec cet alias existe, si il existe, récupère l'url de la page et se redirige en automatique dessus.

Sinon il restera sur la page page2. As toi donc de compléter avec les éventuels message d'erreur à prévoir pour que l'utilisateur sache que sa page est introuvable.


inspiré de : http://wiki.cmsmadesimple.org/index.php/..._Hyperlink et de http://wiki.cmsmadesimple.org/index.php/...direct_UDT

Virginie

D'abord merci d'avoir pris du temps pour me répondre, mais, heu...

Je ne sais pas si je n'y arrive pas parce que j'ai mal expliqué ma demande... ou juste parce que je n'y arrive pas.

Sur ma page1, j'ai copié

<form method="post" action="page2" name="formulaire">
L'alias : <input type="texte" name="alias">
<input type="submit" name="clic" value="OK">
</form>

et j'obtiens un formulaire (OK).
Si j'ai bien compris, si l'internaute saisit une valeur qui correspond à l'alias d'une des pages du site, il va dessus, sinon, il va sur page2 qui lui dit ce que je veux, genre "raté : essaye encore".

Bon, cela dit, je crains que mon niveau d'incompétence en PHP ne soit vraiment plus important que ce que tu ne penses.

Le code de la balise utilisateur, je le pose dans la page 1 (c'est ça?), entre

"<?php" et "?>" (c'est ça ?), et, je suppose, je lui donne un nom, si je veux l'appeler depuis la page2. Heu, et là, à part crier très fort, je ne vois pas bien ce que je dois faire (si : une formation PHP, que je me suis promise si je gagne un peu de sous cette année, mais en attendant...).

Bon, alors forcément, le résultat c'est une pleine page de code d'erreur :

"string(123) "Smarty error: [in content:content_en line 9]: syntax error: unrecognized tag: return; (Smarty_Compiler.class.php, line 446)" string(117) "Smarty error: [in content:content_en line 9]: syntax error: unrecognized tag '' (Smarty_Compiler.class.php, line 590)" string(124) "Smarty error: [in content:content_en line 17]: syntax error: unrecognized tag: return; (Smarty_Compiler.class.php, line 446)" string(118) "Smarty error: [in content:content_en line 17]: syntax error: unrecognized tag '' (Smarty_Compiler.class.php, line 590)" string(122) "Smarty error: [in content:content_en line 22]: syntax error: unidentified token '{' (Smarty_Compiler.class.php, line 1410)" string(122) "Smarty error: [in content:content_en line 22]: syntax error: unidentified token ';' (Smarty_Compiler.class.php, line 1410)" string(134) "Smarty error: [in content:content_en line 24]: syntax error: unclosed tag {if} (opened line 22). (Smarty_Compiler.class.php, line 317)" "

Et l'appel à ma balise utilisateur depuis la page2, je mets "{ma_balise}" dans le content (si ma balise s'appelle "ma_balise", enfin quand je saurai comment l'étiqueter) ? Et c'est tout ?

En fait, je ne comprends pas à quoi cet appel à ma balise sert.

Si tu penses que mon cas n'est pas désespéré... à bientôt !
malheureusement il va falloir que tu mettes la main à la pâte pour ce genre de chose comme j'ai pu te le dire précédemment.

les UDT, (balise utilisateur) sont composé de code PHP comme tu as pu le deviner. Par contre dans une UDT tu n'as pas à déclarer <?php et ?>.

Déjà enlève ce point et retest.

Mais évidement mon conseil de te former est pas négociable, CMS MAde Simple est certes simple pour un cms, mais comme tout cms, quand tu sors des sentiers battus il te faut être toute équipée Wink

Citation :Si j'ai bien compris, si l'internaute saisit une valeur qui correspond à l'alias d'une des pages du site, il va dessus, sinon, il va sur page2 qui lui dit ce que je veux, genre "raté : essaye encore".
presque.

le formulaire sert à la saisie évidement. La seconde page va appeler l'UDT. c'est L'UDT qui se chargera de vérifier si l'alias existe. si il existe on sera automatiquement redirigé vers la bonne page. Sinon on reste sur la seconde page telle quelle sans autre information tel que c'est codé.

Virginie

On avance (enfin je crois)...

J'ai enlevé <?php" et "?> et je n'ai plus de pleine page de code d'erreur...

Quand j'envoyais le formulaire de la page1, j'avais une erreur 404 (page2 non trouvée), alors j'ai modifié le formulaire : <form action="index.php?page=page2" method="post">... maintenant le site trouve la page2, mais, que la saisie soit un alias existant ou pas, la page2 s'affiche.

Est-ce que j'ai fait une c... ou est-ce qu'il y a autre chose à changer ? Du côté du GetURL ? Puisque apparemment il ne reconnait pas l'alias seul pour trouver la page...

Je ne comprends ton code de balise utilisateur que parce que tu l'as "traduit" en français en dessous, alors de là à savoir y apporter une éventuelle modification (sans erreur)...

Au cas où... bonne nuit !
là il n'y as plus de mystère, il te faut apprendre la base de php Wink

Virginie

Ben oui, mais il va d'abord falloir que je gagne de quoi la payer, cette formation, alors en attendant, tu voudrais bien me dire ce que je dois faire, là, pour maintenant ?
et l'autodidacte ? pas besoin de payer, il te faut lire les docs sur internet.

C'est sur c'est pas drôle et moins rapide que d'obtenir tout d'un coup d'un seul mais de mon côté je n'ai pas le temps pour tester le script surtout que je t'ai déjà tout pré-maché et que s'il y a une erreur elle doit pas être terrible... avec un peu d'ajout de trace on saurait tout de suite d'où le problème surviens.

En résumé ne t'imagine pas que je te prennes de haut ou autre, mais être formateur sur ce forum n'est ni rémunéré ni un job de bénévolat à plein temps. Donc prend le temps de te former sur internet.

http://www.google.com/search?q=php+pour+debutant

Virginie

Tant pis...

J'ai déjà fait le tuto (excellent d'ailleurs) du site du zéro, mais à la fin, et comme précisé dans mon message du départ "Je ne maîtrise pas PHP".

Peut être que la bonne réponse aurait été "C'est possible, mais pas sans une bonne connaissance PHP : laisse tomber cette fonctionnalité sur CMSMS".
rho la défaitiste...

tiens j'avais pas encore lu ton précédent message mais par curiosité je me suis demandé pourquoi mon script fonctionnait pas.

l'erreur étant tout de même bien planqué j'avais décidé de te donner le code fonctionnel.

Code :
global $gCms;

if (! isset($_POST['alias']))
{
echo "param alias non renseigné";
    return;
}

$page = $_POST['alias'];

$manager =& $gCms->GetHierarchyManager();    
$node =& $manager->sureGetNodeByAlias($page);

if (! isset($node))
{
echo "alias '$page' inexistant";
    return;
}

$content =& $node->GetContent();

    if (isset($content) && is_object($content))
       {
         if ($content->GetURL() != '')
         {
            redirect($content->GetURL());
         }
       }
    else
{
echo "alias pointant vers une non-page";
return;
}
Test tu verras ca fonctionne.

la différence est sur la récupération du paramètre $_POST au lieu de $Param. en effet $Param est propre à cmsms et ce n'est pas une commande PHP. Il récupère les paramètres d'appel des UDT, par exemple {mabalise param='toto'}

Dans mon premier exemple comme le paramètre passe en POST, ca pouvait pas marcher. Ce sont les "echo" ajouté qui en 3s m'ont renseigné de l'erreur.



Maintenant fait moi plaisir et passe le temps nécessaire à comprendre ce script en entier quitte à poser des questions sur les points sensibles. Je préfère que tu utilise un script en le comprenant que d'utiliser bêtement un truc que tu pigeras pas et te revoir demain poser une nouvelle question ailleurs par ce que t'as toujours rien compris.

Wink

Virginie

D'abord un méga merci, parce que d'abord, ça marche, et ensuite, je n'aurais jamais trouvé par moi-même.

Ensuite, je vais être honnête : là, tout de suite, j'ai posé le script sans le comprendre. Par contre, je promet de refaire le tuto d'ici cet été, et aussi de voir un ou 2 des sites trouvés par ton lien. Et même, je viens de voir que le site du zéro sort son tuto en livre. C'est presque bientôt mon, anniv, là...

Alors, je me permettrai de revenir vers toi pour finir de comprendre quand j'aurais le niveau minimum de base.

Encore merci et bonne continuation !