03
mai 2013

Koken et formulaire de contact

En standard Koken ne propose pas de formulaire de contact, étonnant mais c'est la réalité et l'équipe de dev n'a pas l'air d'avoir envie d'en créer un. Donc sur le forum ça a bougé un peu...

Marc Becher à donner une modification de template qui marche en plus, j'y ai juste apporté une petite modification pour supprimer les balises php et html qu'une personne un peu joueuse aurait pu essayé de vous envoyer et traduit en français.

info.json

    "templates": {
        "contact": {
            "name": "contact",
            "source": "page"
        }
    },

    "routes": {
        [...]
        "/contact": {
            "template": "contact",
            "navigation": {
                "label": "Contact",
                "in_primary": "true"
            }
        }
    },

inc/contact.php

<?php
if(isset($_POST['submitted'])) {
    if(trim($_POST['contactName']) === '') {
        $nameError = 'Obligatoire !';
        $hasError = true;
    } else {
        $name = trim($_POST['contactName']);
        $name = strip_tags($name);
    }

    if(trim($_POST['email']) === '') {
        $emailError = 'Obligatoire !';
        $hasError = true;
    } elseif (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+.[A-Z]{2,4}$", trim($_POST['email']))) {
        $emailError = 'Adresse e-mail invalide';
        $hasError = true;
    } else {
        $email = trim($_POST['email']);
        $email = strip_tags($email);
    }

    $tel = trim($_POST['tel']);
    $tel = strip_tags($tel);
   
    if(trim($_POST['comments']) === '') {
        $commentError = 'Obligatoire !';
        $hasError = true;
    } else {
        if(function_exists('stripslashes')) {
            $comments = stripslashes(trim($_POST['comments']));
            $comments = strip_tags($comments);
        } else {
            $comments = trim($_POST['comments']);
            $comments = strip_tags($comments);
        }
    }

    if(!isset($hasError)) {
        $emailTo = "votre@adresse.fr";
        $subject = '[votre site] Message de '.$name;
        $body = "Nom : $name \nEmail : $email \nTéléphone : $tel \n\nMessage :\n$comments";
        $headers = 'From: '.$name.' <'.$email.'>' . "\n" . 'Reply-To: ' . $email;
        mail($emailTo, $subject, $body, $headers);
        $emailSent = true;
    }
}
?>

<koken:load>
    <article>
        <div class="content-row">
            <div class="essay-body">
                <?php if(isset($emailSent) && $emailSent == true) { ?>
                <h2 id="form">Votre message a bien été envoyé.</h2>
                <?php } else { ?>
                <h2><?php if ( isset($hasError) ) { echo 'Erreur !'; } ?></h2>

                <form action="/contact" id="form" method="post" class="contactform">
                    <p class="input">
                        <label for="contactName">Votre nom et prénom</label>
                        <input<?php if ( isset($nameError) ) { echo ' class="error"'; } ?> type="text" name="contactName" id="contactName" value="<?php if ( isset($hasError) ) { echo trim($_POST['contactName']); } ?>" placeholder="<?php if ( isset($nameError) ) { echo $nameError; } ?>" />
                    </p>

                    <p class="input">
                        <label for="email">Votre adresse e-mail</label>
                        <input<?php if ( isset($emailError) ) { echo ' class="error"'; } ?> type="email" name="email" id="email" value="<?php if ( isset($hasError) && (!isset($emailError) ) ) { echo trim($_POST['email']); } ?>" placeholder="<?php if ( isset($emailError) ) { echo $emailError; } ?>" />
                    </p>

                    <p class="input">
                        <label for="tel">Votre numéro de téléphone</label>
                        <input type="text" name="tel" id="tel" value="<?php if ( isset($hasError) ) { echo trim($_POST['tel']); } ?>" placeholder="" />
                    </p>

                    <p class="textarea">
                        <label for="commentsText">Votre commentaire</label><br />
                        <textarea<?php if ( isset($commentError) ) { echo ' class="error"'; } ?> name="comments" id="commentsText" rows="10" cols="100%" placeholder="<?php if ( isset($commentError) ) { echo $commentError; } ?>" ><?php if ( isset($hasError) ) { echo trim($_POST['comments']); } ?></textarea>
                    </p>

                    <p class="button">
                        <button type="submit">Envoyer</button>
                    </p>

                    <input type="hidden" name="submitted" id="submitted" value="true" />
                </form>
                <?php } ?>
            </div>
        </div>
    </article>
</koken:load>

contact.lens

<koken:include file="inc/header.html" />
<koken:include file="inc/contact.php" />
<koken:include file="inc/footer.html" />

 

Administrateur système de métier mais surtout curieux de découvrir de nouvelles technos très orientées DIY. A mes heures perdues je fais de la photo avec toujours une petite envie d'intégrer des DIY sous forme de timelaps à base de raspberry.

10 commentaires

flipflip a dit

@Pierre : Lorsque je vais sur votre page http://www.funtchat.fr/doudou/contact/ le formulaire s'affiche bien pour moi. Est-ce que c'est lorsque vous cliquer sur le bouton Envoyer ? Si oui il faut désactiver le cache de koken. De plus cette modification a été réalisé pour koken en version 0.8 de mémoire donc une ancienne version.

Répondre

Pierre a dit

Bonjour,

Merci pour ce tuto, le seul que j'ai trouver pour m'aider :)
J'ai bien suivi le tuto mais lorsque j'essaye de visiter la page "contact" je n'ai qu'une page blanche...

http://www.funtchat.fr/doudou/contact

Répondre

flipflip a dit

@Martin : routes et templates n'existaient pas dans mon thème c'est moi qui les ai ajouté. Pour ce qui est de la dernière version je ne sais pas car je l'ai mis en place sur une version plus ancienne ou il n'est pas prévue de mise à jour pour le moment.

Pour que les valeurs soit envoyés j'ai été obligé de désactiver le cache de koken, pas top mais je ne pense pas qu'il soit possible d'exclure une page du cache.

Répondre

Martin a dit

J'ai essayé moi aussi cette solution avec le thème "Axis", qui n'a dans son info.json ni "routes", ni "templates". Pour que le thème propose une page "Contact", je n'ai eu qu'à ajouter "contact.lens" à la racine du répertoire du thème. Mais ça s'arrête là. Les valeurs du formulaires ne "passent pas". J'ai aussi essayé en ajoutant ces "routes" et autres infos dans info.json, en vain. Est-ce que le "core" de koken, encore mis à jour récemment, a brisé votre solution?

Répondre

flipflip a dit

@Baptiste : Bonjour,

Si votre fichier info.json possède déjà une section "templates" il faut juste lui ajouter :

"contact": {
"name": "contact",
"source": "page"
}

Pareil pour "routes". Si votre fichier info.json ne contient pas de sections "templates" ou "routes" il faut les ajouter après l'entête du fichier qui définit les informations de base du thème (auteur, version...). Ce soir j'essaie de compléter le tutorial.

Répondre

Baptiste a dit

Bonjour,

je voudrait savoir ou je doit placer précisément dans "info.json":
"templates": {
"contact": {
"name": "contact",
"source": "page"
}
},

"routes": {
[...]
"/contact": {
"template": "contact",
"navigation": {
"label": "Contact",
"in_primary": "true"
}
}
},
Merci.

Répondre

flipflip a dit

@Régis : Bonjour, de mémoire ces fichiers sont à mettre dans le répertoire correspondant à votre thème storage/themes/VOTRETHEME/

Répondre

Régis a dit

Bonjour,

Pouvez-vous me confirmer la localisation des 3 fichiers ?
J'utilise le theme AXIS, donc j'ai essayé de :
- modifier info.json dans storage/themes/axis
- créer contact.php dans app/site/themes/inc
- créer contact.lens dans app/site/themes

mais ça ne semble pas être pris en compte.
Est-ce que les path sont corrects ?

Merci

Régis

Répondre

flipflip a dit

@Alexis : les [...] représentes éventuellement un code déjà présent sur votre installation.

Répondre

Alexis a dit

Bonjour, est-ce que vous pouvez m'indiquer ce que l'on doit mettre à la place de [...] ici:
"routes": {
[...]
"/contact": {
"template": "contact",
"navigation": {
"label": "Contact",
"in_primary": "true"
}
}
},
?>
Merci d'avance

Répondre

Écrire un commentaire

Quelle est la première lettre du mot usuwbx ? :

Koken et formulaire de contact - Philippe Maladjian - Péripéties bucoliques d'un administrateur systèmes au royaume de la virtualisation, du stockage et accessoirement photographe à ses heures perdues