Création de la page nouveau message NewPost

La page NewPost permet aux utilisateurs authentifiés de créer des nouveaux messages. Elle doit afficher un formulaire permettant la saisie des informations du message.

Parce que la page NewPost ne peut être vue que par les utilisateurs authentifiés, nous ajoutons un fichier de configuration de page config.xml dans le dossier protected/pages/posts. Ce fichier indique que seuls les utilisateurs authentifiés peuvent voir les pages NewPost et EditPost qui sera implémentée dans la section suivante. Tous les autres utilisateurs n'ont accès qu'aux pages ListPost et ReadPost.

Il est souvent utile de démarrer les règles d'autorisation par un <deny users="*">, puis, de le compléter en donnant pas à pas les accès aux différentes pages à l'aides de règles allow supplémentaires

Vu le nombre grandissant de pages, nous allons modifier le pied de page de notre gabarit principal pour qu'il inclus des liens vers : la page d'accueil, la page nouvel utilisateur NewUser (visible seulement par les administrateurs), et la page à venir : nouveau message NewPost (visible seulement par les utilisateurs authentifiés).

Nous allons maintenant créer deux fichiers protected/pages/posts/NewPost.page et protected/pages/posts/NewPost.php contenant respectivement le gabarit et la classe de notre page.

Création du gabarit

Le gabarit de NewPost contient une référence à un TTextBox pour saisir le titre de notre message et à un THtmlArea 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.

<%@ Title="Mon Blog - Nouveau Message" %> <com:TContent ID="Main">

Création nouveau message

Titre: <com:TRequiredFieldValidator ControlToValidate="TitleEdit" ErrorMessage="Veuillez indiquer un titre." Display="Dynamic" />
<com:TTextBox ID="TitleEdit" Columns="50" />
Message: <com:TRequiredFieldValidator ControlToValidate="ContentEdit" ErrorMessage="Veuillez indiquer le contenu du message." Display="Dynamic" />
<com:THtmlArea ID="ContentEdit" />
<com:TButton Text="Ajouter" OnClick="createButtonClicked" /> </com:TContent>

Création du fichier de classe

Dans le gabarit précédent, nous voyons que la fonction principale de notre page est l'appel de la méthode createButtonClicked() implémenté par un évènement OnClick attaché au bouton Ajouter.

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); } } }

Test

Pour tester notre page NewPost, identifiez-vous auparavant et cliquez sur le lien Nouveau message dans le pied de page. Le navigateur affiche le résultat suivant avec comme URL http://hostname/blog/index.php?page=NewPost.

Quand vous visitez la page NewPost 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 THtmlArea. Ceci est fait une fois pour toutes. Pour tester la fonctionnalité de pagination que nous avons mise en place dans la page ListPost, nous pouvons créer cinq messages ou plus et regardez ce qu'il se passe sur la page d'accueil. Le contrôle TPager de la page ListPost affiche cinq éléments par page.