Dans ce tutoriel vous apprendrez à créer votre application compléte avec les pages de front et l'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
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
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');
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();
}
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');
};
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();
}
}
}