Tutoriel : Créer votre première application

Dans ce tutoriel vous apprendrez à créer votre application compléte avec les pages de front et l'administration.

Administration

Vous avez recueillis des avis pour votre site, mais vous n'allez pas tous les afficher. Il faut donc les administrer. Nous allons donc rajouter cette fonctionnalité dans le AdminController

1.Ajout de l'EntityGrid 

Nous allons utiliser le contrôle EntityGrid qui permet d'afficher simplement un tableau des entités.

Modifiez le fichier AdminController.php et la fonction Index :

/*
    * Get the home page
    */
   function Index()
   {
       $view = new View(__DIR__."/View/index.tpl", $this->Core);

	   $gdAvis = new EntityGrid("gdAvis", $this->Core);
	   $gdAvis->Entity = "AppsAvisEntityAvisAvis";
	   $gdAvis->App = "Avis";
	   $gdAvis->Action = "GetAvis";

	   $gdAvis->AddColumn(new EntityColumn("Name", "Name"));
	   $gdAvis->AddColumn(new EntityColumn("Email", "Email"));
	   $gdAvis->AddColumn(new EntityColumn("DateCreated", "DateCreated"));
	   $gdAvis->AddColumn(new EntityColumn("Avis", "Avis"));
	   $gdAvis->AddColumn(new EntityIconColumn("",
		   array(array("EditIcone", "Avis.EditTheAvis", "AvisAction.EditAvis"),
		   )
	   ));

	   $view->AddElement($gdAvis);

	   return $view->Render();
   }

 

Ajouter la grille dans le template index.tpl

<div id="dvAvis">

{{gdAvis}}


</div>

Relancer l'application et la grille s'affiche avec une pagination.

 

Astuce : je vous conseil d'ajouter votre application depuis le menu de gauche "Ajouter une application" et le bouton "Ajouter une application".

Ainsi vous pouvez faire F5 sur votre page et tester vos application directement depuis le menu de gauche

2. Un peu d'interaction avec du javascript

Il faut initialiser la grille pour pouvoir profiter de toutes ces fonctionnalités comme la pagination ou le clique sur les icones

EntityGrid.Initialise('gdAvis');

 

3.Récupération des données triés ou paginés.

Dans l'application de base il faut maintenant ajouter une fonction qui va récupérer les données triées. Ajotuer la fonction dans Avis.php

 

Cela correspond à la propriété Action de l'entityGrid 

 

/***
 * Obtient les avis
 * @return bool|mixed|string
 */
 function GetAvis()
 {
	 $adminController = new AdminController($this->Core);
	 return $adminController->Index();
 }

4. Ouverture d'une popup pour éditer l'avis

Le clique sur l'icone va appeler la fonction javascript AvisAction.EditAvis.  

Il faut donc la définir dans le fichiers javascript

/**
 *  Gestion des Events
 * @constructor
 */
AvisAction = function(){};

/**
  * Edite un avis
  * @constructor
  */
  AvisAction.EditAvis = function(avisId)
  {
	var param = Array();
		param['App'] = 'Avis';
		param['Title'] = 'Avis.EditAvis';
		param['avisId'] = avisId;

		Dashboard.OpenPopUp('Blog','EditAvis', '','','', 'AvisAction.RefreshAvis()', serialization.Encode(param));
	};

/***
 *  Rafraichit la liste des avis
 * @constructor
 */
 AvisAction.RefreshAvis = function()
 { 
	//Rafrachit le tchat
	var data = "Class=Avis&Methode=GetAvis&App=Avis";
	Dashboard.LoadControl("dvAvis", data, "","div", "Avis");

	EntityGrid.Initialise('gdAvis');
};

 

5. Affichage et enregistrement de l'avis

Ajout de la fonction EditAvis dans Avis.php

/**
 * Edite l'avis
 */
 function EditAvis()
 {
	 $adminController = new AdminController($this->Core);
	 return $adminController->EditAvis(Request::GetPost("avisId"));
 }

 

Ajout de la fonction de la AdminController

 /**
  * @param $avisId
  */
  function EditAvis($avisId)
  {
    $view = new View(__DIR__."/View/editAvis.tpl", $this->Core);

    $avisModel = new AvisModel($this->Core, $avisId);
    $view->SetModel($avisModel, true);
    $view->SetApp("Avis");
    $view->SetAction("EditAvis");

	   return $view->Render();
  }

 

Comme vous pouvez le constater nous utilisons le même model AvisModel.

Nous passons le deuxième Argument de SetModel true afin que l'enregistrement se fasse en AJAX

Il faut alors définir la classe et la méthode.  

Modification à apporter dans le model afin de gérer l'ajour et la modification

<?php

/*
 * PuzzleApp
 * Webemyos
 * Jérôme Oliva
 * GNU Licence
 */
namespace AppsAvisModel;

use CoreCoreRequest;
use CoreModelModel;
use CoreUtilityDateDate;

class AvisModel extends Model
{
	/*
	 * Constructeur
	 */
	public function __construct($core, $avisId = "")
	{
		$this->Core = $core;

		$entityName = "AppsAvisEntityAvisAvis";
		$this->Entity = new $entityName($core);

		if($avisId != "")
		{
			$this->Entity->GetById($avisId);
		}
	}

	/*
	 * Prepare the form
	 */
	public function Prepare()
	{
		$excludes = array("AppName", "AppId","EntityName","EntityId", "DateCreated");

		if($this->Entity->IdEntite == null)
		{
			$excludes[] = "Actif";
		}

		$this->Exclude($excludes);
	}

	/*
	 * Save/update the entity
	 */
	public function Updated()
	{
		if(Request::GetPost("Name"))
		{
			//Get The Defaul blog
			$this->Entity->DateCreated->Value = Date::Now();
			$this->Entity->Actif->Value = false;

			parent::Updated();
		}
	}
}