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.

Utilisez les avis dans une autre application

PuzzleApp permet des interactions simples entre les applications. Il serait dommage que chaque application ai son système d'avis. Dans ce tutoriel vous allez découvrir comment la magie s’opère.

Pour notre tutoriel imaginons que vous souhaiteriez que vos visiteurs déposent des avis sur vos pages gérées par le CMS. Cette fonctionnalité n'est pas disponible de base dans l'application. Nous allors simplement utilisé une nouvelle fonctionnalité les Widget

 

1. Surchage du template 

Commencons par surchager le template de base du CMS. Créer donc un fichier View/Cms/Module/Page/View/showPage.tpl



{{content}}

{{GetWidget(Avis,Cms, {{page->IdEntite}} ) }}

 

2. Ajout de la méthode GetWidget dans votre application

dans Avis.php

/***
 * Retourne une widget listant les avis sur une entité et permattant d'en rajouter
 */
 function GetWidget($appName, $entityId)
 {
	$frontController = new FrontController($this->Core);
	return $frontController->GetWidget($appName, $entityId);
 }

 

3.Ajout de la méthode GetWidget dans le controller

/**
  * Ajout de commentaire sur une entité d'une App
  * @param $appName
  * @param $entityId
  */
  function GetWidget($appName, $entityId)
  {
   $view = new View(__DIR__."/View/getWidget.tpl", $this->Core);

   $avis = new AvisAvis($this->Core);
   $avis->AddArgument(new Argument("AppsAvisEntityAvisAvis", "AppName", EQUAL,  $appName));
   $avis->AddArgument(new Argument("AppsAvisEntityAvisAvis", "EntityId", EQUAL,  $entityId));
   $avis->AddArgument(new Argument("AppsAvisEntityAvisAvis", "Actif", EQUAL,  1));

   $view->AddElement(new ElementView("Avis", $avis->GetByArg()));

   $avisModel = new AvisModel($this->Core, "", $appName, $entityId );
   $view->SetModel($avisModel);

   return $view->Render();
  }

 

4.Création du nouveau template getWidget.tpl

<section>

        <h2>Les avis</h2>

        {{foreach Avis}}

          <i>{{element->DateCreated->Value}}</i>
            {{element->Name->Value}}

         <p>
            {{element->Avis->Value}}
         </p>
        {{/foreach Avis}}


    <h2>Dépose ton avis</h2>
        {{if Model->State = Init}}
            {{RenderModel()}}
        {{/if Model->State = Init}}

        {{if Model->State = Updated}}

        <div class='success'>
          Avis.AvisSaved
        </div>

        {{/if Model->State = Updated}}
   
</section>

 

4.Modification du modéle AviModel

Nous devons donc adapté le model pour qu'il enregistre le nom de l'application et l'entité concerné. Il suffit donc de modifier le constructeur

/*
 * Constructeur
 */
public function __construct($core, $avisId = "", $appName ="", $entityId="" )
{
	$this->Core = $core;

	$entityName = "AppsAvisEntityAvisAvis";
	$this->Entity = new $entityName($core);
	$this->Entity->AppName->Value = $appName;
	$this->Entity->EntityId->Value = $entityId;

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