Bonjour,
J'ai fais tout les tutos Développez de A à Z .... et mon projet fonctionne et j'aimerais maintenant intégrer un formulaire de contact "contact.php" (avec envoi de photo d'identité) dans ma structure MVC ...
1) Je suis vraiment perdu dans tout ça ... je ne sais pas ou enregistré ma page contact.php dans laquelle il y aura le formulaire de contact.
2) Je ne sais pas ou mettre la class.mail.php pour qu'elle soit le mieux rangé possible.
3) Je ne sais pas ou et mettre quoi dans les différents fichier (le controller, le model, la vue) pour que le tout fonctionne bien.
Existe t'il un tuto sur l'amélioration d'une MVC chez Grafikart avec l'ajout de formulaire etc ???
Je remercie d'avance ceux qui vont prendre le temps de me donner un coup de main pour me mettre dans le droit chemin.
Je ne demande pas les fichiers tout fait (et certains diront : "de toute manière je te les auraient pas filer" ... :-) ) je demande juste une explication clair et précise détaillée car sinon je risque de patauger un moment ...
D'avance merci
la premier chose a faire c'est d'ajouter une function contact dans pagescontroller.php
/**
* permet de récupérer les pages pour le menu
**/
function getMenu(){
$this->loadModel('Post');
return $this->Post->find(array(
'condition' => array('online' => 1, 'type' => 'page')
));
}
/*
* votre page contact.php
**/
function contact(){
}
ensuite dans site/view/pages/ créer votre page contact.php
et dans contact.php Mets votre formulaire bien sure avec le traitment du formulaire.
puis dans default.php
ajouter se ptit li
<li><a href="<?php echo Router::url('pages/contact'); ?>">Contact</a></li>
et dans votre conf.php
ajouter ça :
Router::connect('contact','pages/contact');
remarque
mets le apres
Router::connect('','posts/index');
Bonjour,
As tu bien rajouté le router pour ta page test ?
Router::connect('test','pages/test');
Cordialement
Bonjour,
Je pense que ton formulaire n'envoie pas la bonne action :
<form class="form-horizontal well" id="formulaire" method="post" action="test.php" name="formulaire" enctype="multipart/form-data">
A remplacer par :
<form class="form-horizontal well" id="formulaire" method="post" action="<?php echo Router::url('pages/test'); ?>" name="formulaire" enctype="multipart/form-data">
Cordialement
Je n'ai pas suivis le tutoriel MVC de Grafikart, mais je pense pouvoir te donner une piste :
Ton formulaire de contact, c'est une vue tout simplement, donc dans le dossier "view" .
Le traitement des informations , dans la partie controller. Je ne sais pas si tu as un controler global ou un par "morceau de site".A toi d'adapter .
Un modèle ne sera pas utile pour un formulaire de contact à part si tu comptes sauvegarder tes mails dans la BDD.
En ce qui concerne ta class mail.php, tu peux créer un dossier "third_party" ou "class" dans lequel tu ranges toutes les classes que tu va utiliser (à la racine du site) . Tu n'aura plus qu'a l'inclure .
Est ce que cela t'aide ?
Salut Salut
pour t'aider il y a ce tuto, Tuto MVC
je pense que ton problème viens du fait que tu n'as pas compris comment ca fonctionne le MVC (je te rassure il m'a fallut bcp de temps avant d'appréhender ce mode de fonctionnement.) car même si tout parait clair quand on te l'explique ca le deviens beaucoup moins quand tu dois le mettre en pratique.
Bon courage
Bonjour,
Désolé de la réponse tardive mais VIVE LE DOSSIER SPAM pfff.
Pour Benjamin, je te remercie de tes précisions je vais voir ce que je peux en faire et pour Djins tu as tout pigé c'est tout à fait ça je n'ai pas compris encore complètement (et le mot est faible) le fonctionnement du MVC ...
De plus le temps me manque pour me mettre pleinement dans des tutos pour bien assimilé ...
Et pour le lien du tuto merci bien.
Il est vrai qu'après je manque de pratique et c'st la première fois que je "développe" un tel système et du coup j'ignore encore ou je dois mettre tel ou tel formulaire ou livre d'or ou d'autre chose du genre .....
Voilà en tout cas merci pour les précisions et je vais m'y mettre doucement je vous tiendrai au courant surement dans un autre post quand j'aurai besoin de votre aide Héhé ...
Merci encore
Bonjour à tous,
Benjamin, je ne sais pas dans quel dossier mettre cette page formcontact.php dans le dossier VIEW ... Dois-je le mettre dans Pages ? Medias ? A la racine ?
J'aimerais le plus possible rester organisé comme lors du tuto "developpez de A à Z" pour m'y retrouver par la suite ...
Concernant l'appel de cette page, je pensais le mettre dans PagesController.php tout à la fin comme ci-dessous, qu'en dis-tu ?
<?php
class PagesController extends Controller{
function view($id){
$this->loadModel('Post');
$d'page'] = $this->Post->findFirst(array(
'conditions' => array('online' => 1,'id'=>$id,'type'=>'page')
));
if(empty($d'page'])){
$this->e404('Page introuvable');
}
$this->set($d);
}
/**
* Permet de récupérer les pages pour le menu
**/
function getMenu(){
$this->loadModel('Post');
return $this->Post->find(array(
'conditions' => array('online' => 1,'type'=>'page')
));
}
/**
* ADMIN ACTIONS
**/
/**
* Liste les différents articles
**/
function admin_index(){
$perPage = 10;
$this->loadModel('Post');
$condition = array('type'=>'page');
$d'posts'] = $this->Post->find(array(
'fields' => 'id,name,online',
'order' => 'created DESC',
'conditions' => $condition,
'limit' => ($perPage*($this->request->page-1)).','.$perPage
));
$d'total'] = $this->Post->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$this->set($d);
}
/**
* Permet d'éditer un article
**/
function admin_edit($id = null){
$this->loadModel('Post');
if($id === null){
$post = $this->Post->findFirst(array(
'conditions' => array('online' => -1),
));
if(!empty($post)){
$id = $post->id;
}else{
$this->Post->save(array(
'online' => -1,
'created' => date('Y-m-d')
));
$id = $this->Post->id;
}
}
$d'id'] = $id;
if($this->request->data){
if($this->Post->validates($this->request->data)){
$this->request->data->type = 'page';
$this->Post->save($this->request->data);
$this->Session->setFlash('Le contenu a bien été modifié');
$this->redirect('admin/pages/index');
}else{
$this->Session->setFlash('Merci de corriger vos informations','error');
}
}else{
$this->request->data = $this->Post->findFirst(array(
'conditions' => array('id'=>$id)
));
}
$this->set($d);
}
/**
* Permet de supprimer un article
**/
function admin_delete($id){
$this->loadModel('Post');
$this->Post->delete($id);
$this->Session->setFlash('Le contenu a bien été supprimé');
$this->redirect('admin/pages/index');
}
/**
* Permet de lister les contenus
**/
function admin_tinymce(){
$this->loadModel('Post');
$this->layout = 'modal';
$d'posts'] = $this->Post->find();
$this->set($d);
}
public function formcontact(){
// le code ici ????????
}
}
Merci d'avance.
Je te conseillerais plutôt de faire simplement une fonction appelée contact
function contact(){
/* code */
}
que tu n'as pas spécialement besoin de mettre à la fin, tu peux tout simplement la mettre après la fonction view , voir même avant, à toi de choisir.
Mais essaies de garder une logique en regroupant tes fonctions pour les pages publiques et celles d'administrations.
Pour ce qui concerne ton formulaire, tu le met dans le dossier Pages, vue que c'est sans doute le dossier regroupant les vues de ton <u>PagesController.php</u>.
Salut.
D'accord je vais aplliquer tes conseils pas a pas et essayer de rester logique. Faut juste que je saisisse bien le decoupage et le fonctionnement de chaque controller view et ca va surement le faire.
Et pour l'instant separer les fonctions admin des publics je crois que je suis incapable ... je verrai ca bien plus tard je pense hihi. Je ne saurais pas comment faire .
Concernant le dossier pages oui en effet c'est ca. Pour l'instant je n'ai pas toucher aux sources que j'ai telecharger.
Merci de m'avoir aidé.
Je reviens dès que j'ai avancé. Bye
---------EDIT----------
Question bete pour tous les bons codeurs.....
Dans la partie code je met uniquement le code du formulaire de contact ? Parceque apres faut que je l'envoi a une page de traitement et aussi phpmailer ....
Tu vas me trouver naze mais cette structure MVC et pour moi une grande nouveaute.
J'ai deja fait ca il y a quelques temps de facon basique avec toutes mes pages php au meme endroit et tout marchait nickel mais la je suis un peu desapointé.
J'ai besoin d'explications simples et claires pour bien assimiler les bases en fait.
Merci encore de votre comprehension.
Pour faire simple, au niveau structure c'est comme ceci en partant du principe que je détaille dans ce cas là pour un système d'articles qui utilise la table posts :
config (contient tous les fichiers de configuration de l'application MVC)
core (contient les principales classes permettant de "faciliter" le codage en réduisant les lignes de codes par la suite dans les controllers, model et vues)
controller (permet de faire le traitement principal en PHP)
=> PostsController.php (dans lequel tu crées des fonctions dont la majorité du code est pour du PHP, chacune des fonctions servira par exemple à une vue concernant tes articles) [index, view (pour les vues publiques), admin_index, admin_add, admin_edit, admin_delete (pour la partie administration)]
model (contient les différents fichiers qui permettront de faire les requêtes SQL)
=> Post.php, dans ce fichier, tu peux par exemple créer une fonction qui récupérera les derniers articles, une autre pour lister tous les articles, etc ...
view (contient les différentes vues, hiérarchisées par dossier, dont le nom est le même que le nom du controller référant
=> posts
=> index.php
=> view.php
=> admin_index.php
=> admin_add.php
=> admin_edit.php
=> admin_delete.php
webroot (contient les "ressources" pour les vues : fichiers CSS, JS, les images)
Pour résumer le principal
Pour ce qui concerne ta question pour ton système de contact :
Dans view/pages tu crées un fichier contact.php, dans celui-ci tu fais tout simplement le formulaire, en utilisant le helper form, comme tu as vu sur les vidéos
Tu crées une fonction contact après la fonction view dans le controller PagesController.php, pour ce qui concerne phpmailer, je ne saurais pas vraiment te dire, je ne me suis pas penché dessus, mais tu fais ton traitement dans la fonction que je t'ai dit juste avant, tu vérifies si des données sont récupérées, puis tu fais le nécessaire pour le mail (toujours dans la fonction bien sûr)
Salut.
Merci beaucoup Lartak11. C'est vraiment super d'avoir pris le temps de m'expliquer de cette manière là. Ca devrait bien m'aider à comprendre. Dès fois il ne faut pas grand chose pour saisir ou pas un truc et la ça devrait bien m'aider.
Pour les mails je verrai bien quand j'en serai là je vais bien arriver à qqchose avec toutes tes précisions.
Merci encore et bonne soirée.
---------EDIT---------
Je teste et si je m'en sors bien je valide la réponse.
J'aimerais une petite précision svp ...
J'ai plusieurs onglet sur mon projet ACCUEIL , FONCTIONNEMENT , PRISE DE RDV , ACTUALITES ... tout ces onglets fonctionnent de la meme maniere avec des articles en base de données, tout comme le tuto en fait.
Je suis entrain de voir pour afficher le formulaire de contact uniquement sur la page PRISE DE RENDEZ-VOUS mais le peu de code que je fais genre echo "test formulaire" s'affiche sur toutes les pages et je ne vois pas comment faire pour ne l'afficher QUE sur la page voulue ...
Sauriez-vous m'aider ?
Voici le début du code de la page PagesController.php:
<?php
class PagesController extends Controller{
function view($id){
$this->loadModel('Post');
$d'page'] = $this->Post->findFirst(array(
'conditions' => array('online' => 1,'id'=>$id,'type'=>'page')
));
if(empty($d'page'])){
$this->e404('Page introuvable');
}
$this->set($d);
}
/**
* Permet de contacter Andelko pour prendre un rendez-vous
**/
function contact(){
//Mon code;
}
?>
Dans ma page contact.php je mettrai:
Est-ce bien cela ?
Super merci bcp pour ces précisions.
Je vais tester ça tout doucement petit à petit je vais bien finir par réussir à faire ce formulaire :-)
Merci à tous pour votre patience .
Pfffiou bah déjà mon formulaire s'affiche .... super suis content.
Fallait vraiment pas grand chose qu'il apparaisse ... allez je passe à tout le reste (traitement, vérification) ça m'a remotivé .
Merci encore
Bonjour à tous,
Me revoici avec mon formulaire:
<form class="form-horizontal well" id="formulaire" method="post" action="test.php" name="formulaire" enctype="multipart/form-data">
Il est maintenant terminé et je souhaite envoyer mes données à la page " test.php" .
J'ai suivi le même principe que pour la page contact.php en ajoutant une function test dans pagescontroller.php
/**
* Permet de récupérer les pages pour le menu
**/
function getMenu(){
$this->loadModel('Post');
return $this->Post->find(array(
'conditions' => array('online' => 1,'type'=>'page')
));
}
function contact(){
//Mon code;
}
function test(){
//Mon code;
}
J'ai créer la page test.php dans le même dossier que contact.php (site/view/pages/) ...
<u>Mais je me retrouve avec cette erreur</u>:
Page introuvable
Le controller test.php n'existe pas
---------RE-EDIT----------
J'accède à la page contact.php depuis view/layout/default.php par ce lien :
<li><a href="<?php echo Router::url('posts/index'); ?>">Actualités</a></li>
<li><a href="<?php echo Router::url('pages/contact'); ?>">Me Contacter</a></li>
<u>Voici ma page contact.php</u>:
<FORM Method="POST" Action="test.php">
Nom : <INPUT type=text size=20 name=nom><BR>
Prénom : <INPUT type=text size=20 name=prenom><BR>
Age : <INPUT type=text size=2 name=age><BR>
<INPUT type=submit value=Envoyer>
<INPUT type=hidden name=afficher value=ok>
</FORM>
<u>Voici ma page test.php</u>:
<HTML>
<HEAD>
<TITLE>Test: Affichage des données utilisateur</TITLE>
</HEAD>
<BODY>
<?php
if ($_POST'entregistrer']=="ok") {
if (($nom=="")||($prenom=="")||($age=="")){
if($nom=="") print("Veuillez saisir le nom de l'utilisateur<BR>\n");
if($prenom=="") print("Veuillez saisir le prénom de l'utilisateur<BR>\n");
if($age=="") print("Veuillez saisir l'age de l'utilisateur<BR>\n");
}
else {
echo "Récapitulatif des informations saisies<BR>\n
<UL>
<LI>Nom: $nom</LI>
<LI>Prenom: $prenom</LI>
<LI>Age: $age</LI>
</UL>
";
}
}
else {
echo "<p>Vous n'avez pas demandé que les informations soient affichées.<p>";
}
?>
</BODY>
</HTML>
---------FIN RE-EDIT----------
Pourriez-vous me dire ou j'ai commis des erreurs svp ?
Bonne journée.
---------EDIT----------
Suite à commentaire de Bahamut
J'ai également mis ce code dans conf.php :
Router::connect('test','pages/test');
Peux être ne l'ai je pas mis au bon endroit ???
Router::connect('contact','pages/contact');
Router::connect('test','pages/test');
Router::connect('cockpit','cockpit/posts/index');
Router::connect('page/:slug-:id','pages/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect('blog/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect('blog/category/:slug','posts/category/slug:([a-z0-9\-]+)');
Router::connect('blog/*','posts/*');
---------FIN EDIT----------
Bahamut, je viens de rajouter pas mal de bout de code et commentaires qui permettront peut etre de trouver une piste exploitable .
Merci encore
Bonjour,
Super merci l'envoi des données marche nickel ... du coup maintenant je suis sur l'affichage des données envoyées et ça se présente plutôt bien ...
Merci pour l'aide