Blame | Letzte Änderung | Log anzeigen | RSS feed
<com:TContent ID="Main"><h1>Création de la page nouveau message <tt>NewPost</tt></h1><p>La page <tt>NewPost</tt> permet aux utilisateurs authentifiés de créer des nouveaux messages. Elle doit afficher un formulaire permettant la saisie des informations du message.</p><p>Parce que la page <tt>NewPost</tt> ne peut être vue que par les utilisateurs authentifiés, nous ajoutons un fichier de configuration de page <tt>config.xml</tt> dans le dossier <tt>protected/pages/posts</tt>. Ce fichier indique que seuls les utilisateurs authentifiés peuvent voir les pages <tt>NewPost</tt> et <tt>EditPost</tt> qui sera implémentée dans la section suivante. Tous les autres utilisateurs n'ont accès qu'aux pages <tt>ListPost</tt> et <tt>ReadPost</tt>.</p><com:TTextHighlighter CssClass="source" Language="xml"><?xml version="1.0" encoding="utf-8"?><configuration><authorization><allow pages="NewPost,EditPost" users="@" /><allow pages="ListPost,ReadPost" /><deny users="*" /></authorization></configuration></com:TTextHighlighter><com:TipBox>Il est souvent utile de démarrer les règles d'autorisation par un <tt><deny users="*"></tt>, puis, de le compléter en donnant pas à pas les accès aux différentes pages à l'aides de règles <tt>allow</tt> supplémentaires</com:TipBox><p>Vu le nombre grandissant de pages, nous allons modifier le pied de page de notre <tt>gabarit principal</tt> pour qu'il inclus des liens vers : la page d'accueil, la page nouvel utilisateur <a href="?page=Day3.CreateNewUser">NewUser</a> (visible seulement par les administrateurs), et la page à venir : nouveau message <tt>NewPost</tt> (visible seulement par les utilisateurs authentifiés).</p><com:TTextHighlighter CssClass="source" Language="prado"><div id="footer"><com:THyperLink Text="Accueil"NavigateUrl="<%= $this->Service->DefaultPageUrl %>" /><com:THyperLink Text="Nouveau message"NavigateUrl="<%= $this->Service->constructUrl('posts.NewPost') %>"Visible="<%= !$this->User->IsGuest %>" /><com:THyperLink Text="Nouvel utilisateur"NavigateUrl="<%= $this->Service->constructUrl('users.NewUser') %>"Visible="<%= $this->User->IsAdmin %>" />...autres liens...</div></com:TTextHighlighter><p>Nous allons maintenant créer deux fichiers <tt>protected/pages/posts/NewPost.page</tt> et <tt>protected/pages/posts/NewPost.php</tt> contenant respectivement le gabarit et la classe de notre page.</p><h2>Création du gabarit</h2><p>Le gabarit de <tt>NewPost</tt> contient une référence à un <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.TextBox">TTextBox</a> pour saisir le titre de notre message et à un <a href="http://www.pradosoft.com/demos/quickstart/?page=Controls.HtmlArea">THtmlArea</a> pour saisir le contenu. Ce dernier est un éditeur WYSIWYG HTML. Pour contrôler les valeurs saisies, nous associons des validateurs aux contrôles précédents.</p><com:TTextHighlighter CssClass="source" Language="prado"><%@ Title="Mon Blog - Nouveau Message" %><com:TContent ID="Main"><h1>Création nouveau message</h1><span>Titre:</span><com:TRequiredFieldValidatorControlToValidate="TitleEdit"ErrorMessage="Veuillez indiquer un titre."Display="Dynamic" /><br/><com:TTextBox ID="TitleEdit" Columns="50" /><br/><span>Message:</span><com:TRequiredFieldValidatorControlToValidate="ContentEdit"ErrorMessage="Veuillez indiquer le contenu du message."Display="Dynamic" /><br/><com:THtmlArea ID="ContentEdit" /><br/><com:TButton Text="Ajouter" OnClick="createButtonClicked" /></com:TContent></com:TTextHighlighter><h2>Création du fichier de classe</h2><p>Dans le gabarit précédent, nous voyons que la fonction principale de notre page est l'appel de la méthode <tt>createButtonClicked()</tt> implémenté par un évènement <tt>OnClick</tt> attaché au bouton <tt>Ajouter</tt>.</p><com:TTextHighlighter CssClass="source" Language="php">class NewPost extends TPage{/*** création d'un nouveau message si toutes les données sont valides.* cette méthode est appelée par l'évènement OnClick du bouton "Ajouter".* @param mixed sender : celui qui a généré l'évènement* @param mixed param : paramètres de l'évènement*/public function createButtonClicked($sender,$param){if($this->IsValid) // tous les validateurs sont Ok ?{// créer un nouvel objet PostRecord avec les données du formulaire$postRecord=new PostRecord;// utiliser SafeText à la place de Text évite les attaques XSS$postRecord->title=$this->TitleEdit->SafeText;$postRecord->content=$this->ContentEdit->SafeText;$postRecord->author_id=$this->User->Name;$postRecord->create_time=time();$postRecord->status=0;// enregistre les données dans la BDD par la méthode save de l'Active Record$postRecord->save();// redirige le navigateur vers le message nouvellement créé$url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id));$this->Response->redirect($url);}}}</com:TTextHighlighter><h2>Test</h2><p>Pour tester notre page <tt>NewPost</tt>, identifiez-vous auparavant et cliquez sur le lien <tt>Nouveau message</tt> dans le pied de page. Le navigateur affiche le résultat suivant avec comme URL <tt>http://hostname/blog/index.php?page=NewPost</tt>.</p><com:InfoBox>Quand vous visitez la page <tt>NewPost</tt> pour la première fois, vous pourrez remarquer qu'elle mettra plusieurs secondes avant de s'afficher. Ceci est dû au fait que PRADO a besoin de décompresser et de publier le code javascript et les images pour l'éditeur WYSIWYG du contrôle <tt>THtmlArea</tt>. Ceci est fait une fois pour toutes.</com:InfoBox><com:TipBox>Pour tester la fonctionnalité de pagination que nous avons mise en place dans la page <a href="?page=Day4.CreateListPost">ListPost</a>, nous pouvons créer cinq messages ou plus et regardez ce qu'il se passe sur la page d'accueil. Le contrôle <tt>TPager</tt> de la page <tt>ListPost</tt> affiche cinq éléments par page.</com:TipBox><img src="<%~ output3.gif %>" class="output" /></com:TContent>