Project

General

Profile

Evolution #24186

Mettre en place dossier template local

Added by Renaud Dussol over 4 years ago. Updated about 4 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Target version:
Start date:
06/11/2018
Due date:
% Done:

100%

Distribution:

Description

Le but serait de pouvoir bénéficier d'un paramètre facultatif correspondant à un répertoire local de templates
Pour l'instant seul le template principal peut être modifié, il faut le faire manuellement en créant un dossier perso (chez nous "nice") dans ng/views/hub
L'idée serait de proposer l'option d'un dossier local qui viendrait prendre le pas si un template est présent à l'intérieur
Par exemple : ng/views/hub/local
On y mettrait les templates de l'affichage du bureau, cela serait moyennement intéressant pour cela, puisque cela peut déjà être défini dans le gen_config, mais je pense surtout à certaines vues qui ne sont pour l'instant pas personnalisables, notamment le logout dont on a récemment parlé
A ce moment-là, tout template inséré à l'intérieur de ce répertoire serait pris comme template par défaut et ne serait pas écrasé par une MAJ
Si on met un logout.html/twig dans /local, il sera pris par défaut
Mais cela peut être aussi intéressant par exemple si l'on souhaite modifier certaines vues du app manager...
Bien entendu il faudrait modifier les contrôleurs pour variabiliser les fonctions "render" pour prendre en compte ce paramètre

Associated revisions

Revision b44baac4 (diff)
Added by Christophe LEON over 4 years ago

ref #24186 maj composer json update twig-view 2.1.0 => 2.4.0

Revision 5e76332b (diff)
Added by Christophe LEON over 4 years ago

fixes #24186 : Mettre en place dossier template local

Revision 980e72d4 (diff)
Added by Renaud Dussol over 4 years ago

Ref #24186 :
Mettre en place dossier template local

History

#1 Updated by Renaud Dussol over 4 years ago

Je pense que le mieux serait un répertoire ng/views/local
Il faudrait que dans toutes les fonctions render, la possibilité de ce répertoire soit présente

Surcharger la fonction render ou créer une nouvelle fonction :

function returnfile ($file) {

 if file_exists(CONSTANTE."/ng/views/local/".$file) {   
  return CONSTANTE/ng/views/local/".$file;
 }
 else {
  return $file;
 }
}

Et dans les contrôleurs :
return $this->ci["view"]->render($response, $returnfile('app/urlList.html.twig'),$this->genParams(["urls"=>$urls]));
...
return $this->ci["view"]->render($response, $returnfile('default/logout.html.twig'),$params);

Evidemment cela demande un boulot de réécriture sur les controleurs... (on peut se contenter des plus utiles, du moins au début)

Si l'on arrive à surcharger la fonction render(), pas besoin de réécrire les contrôleurs

function render($response, $file, $data) {
if file_exists(CONSTANTE."/ng/views/local/".$file) {   
 return $this->ci["view"]->render($response,CONSTANTE."/ng/views/local/".$file, $data);   
//le pb est dans le $this->ci, cela sera surement autre chose

}
else {
 return $this->ci["view"]->render($response,$file, $data);
}

Mais je ne sais pas si c'est possible...

#2 Updated by Renaud Dussol over 4 years ago

ds apps-inc.php
l. 90 environ
chemin des templates : metttre local en premier

#3 Updated by Renaud Dussol over 4 years ago

  • Subject changed from Mettre en place un paramètre "Dossier templates" to Mettre en place dossier template local

A priori cela ne foncionne pas
Mais bon j'ai fait vite, peut-être il faut modifier 2/3 autres trucs...

$templatesPath=["__main__"=>DIR_VIEW];
$templatesPath["local"]=DIR_VIEW."/local";   //  ===> ligne que j'ai ajoutée
$templatesPath["hub"]=DIR_VIEW."/hub";

#4 Updated by Renaud Dussol over 4 years ago

Je ne sais pas si j'ai tout compris, mais apparemment dans notre version de Slim on ne peut pas utiliser plusieurs paths par namespace

https://github.com/slimphp/Twig-View/issues/52

Corrigé dans :

https://github.com/slimphp/Twig-View/blob/16fded26a44b8e8e0e041f1cff32afa21daeb284/src/Twig.php

J'ai vérifié dans notre slim/twig-view/src/Twig.php, l. 120, on n'a pas le test sur if (is_string($namespace))

Or, si j'ai bien compris, c'est précisément cela que l'on veut faire : avoir la possibilité d'utiliser plusieurs paths pour un même namespace (en l'occurrence le "__main__")

Car si on n'a pas cette possibilité, on est obligé de déclarer à chaque fois le nom du namespace dans les fonctions de render dans les controleurs, c'est ce que l'on veut éviter ?

#5 Updated by Renaud Dussol over 4 years ago

  • % Done changed from 0 to 80

CA MAAAAAAAARCHE !

je viens de modifier le fichier slim/twig-view/src/Twig.php (j'ai simplement copié-collé la fonction corrective du github)

Dans apps-inc.php, je déclare :

$templatesPath['__main__'] = [
DIR_VIEW."/local",
DIR_VIEW
];

Ce qui fait que là on est bien dans le même namespace ("__main__")

NB : il faut absolument déclarer le local d'abord parce que sinon il lira d'abord dans le général

Si je crée maintenant un fichier default/logout.html.twig dans "local", il prend celui-ci par défaut
Si je le vire, il revient bien sur la version présente dans "view"

Alors maintenant question : est-ce qu'on met à jour l'ensemble du slim (qui visiblement est un peu vieux) ou est-ce qu'on modifie directement ces lignes dans le fichier Twig.php comme j'ai fait ?

Si on ne modifie pas, ça ne fonctionne pas car il se met alors à chercher un répertoire qui s'appelle "Array" et on a une Slim Error...

#6 Updated by Christophe LEON over 4 years ago

  • Status changed from Nouveau to En attente d'informations

Super, merci d'avoir investiguer
Dans ce cas, si c'est une fonctionnalité déjà ajoutée

On pourrait dans le composer.json updater la version de twig-view
et mettre slim/twig-view à 2.4.*

Faire un composer update pour
- prendre les vendors
- et génerer le point lock qui sera mis sur le dépot ( qui lors du reconfigure va faire un php composer.phar install pour prendre la bonne version de twig-view )

et du coup dans apps-inc.php, on pourrait faire
ligne 92, remplacer

$templatesPath=["__main__"=>DIR_VIEW];

par

$dirs=DIR_VIEW;
if (is_dir(DIR_VIEW."/local")) { $dirs=[DIR_VIEW."/local",DIR_VIEW]; }
$templatesPath=["__main__"=>$dirs];

Testé en dev chez nous, c'est OK

#7 Updated by Christophe LEON over 4 years ago

  • Status changed from En attente d'informations to Résolu
  • % Done changed from 80 to 100

#8 Updated by Renaud Dussol over 4 years ago

Pb quand je lance le php composer.phar install

Your requirements could not be resolved to an installable set of packages.

Problem 1
- Installation request for mpociot/botman 1.5.x-dev -> satisfiable by mpociot/botman[1.5.x-dev].
- mpociot/botman 1.5.x-dev requires php >=5.6.0 -> your PHP version (5.5.9) does not satisfy that requirement.
Problem 2
- Installation request for tightenco/collect v5.4.33 -> satisfiable by tightenco/collect[v5.4.33].
- tightenco/collect v5.4.33 requires php >=5.6.4 -> your PHP version (5.5.9) does not satisfy that requirement.

#9 Updated by Arnaud FORNEROT about 4 years ago

  • Target version set to Envole 5.10

#10 Updated by Arnaud FORNEROT about 4 years ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF