Projet

Général

Profil

Evolution #24186

Mettre en place dossier template local

Ajouté par Renaud Dussol il y a presque 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
Début:
11/06/2018
Echéance:
% réalisé:

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

Révisions associées

Révision b44baac4 (diff)
Ajouté par Christophe LEON il y a plus de 5 ans

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

Révision 5e76332b (diff)
Ajouté par Christophe LEON il y a plus de 5 ans

fixes #24186 : Mettre en place dossier template local

Révision 980e72d4 (diff)
Ajouté par Renaud Dussol il y a plus de 5 ans

Ref #24186 :
Mettre en place dossier template local

Historique

#1 Mis à jour par Renaud Dussol il y a presque 6 ans

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 Mis à jour par Renaud Dussol il y a presque 6 ans

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

#3 Mis à jour par Renaud Dussol il y a presque 6 ans

  • Sujet changé de Mettre en place un paramètre "Dossier templates" à 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 Mis à jour par Renaud Dussol il y a presque 6 ans

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 Mis à jour par Renaud Dussol il y a presque 6 ans

  • % réalisé changé de 0 à 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 Mis à jour par Christophe LEON il y a plus de 5 ans

  • Statut changé de Nouveau à 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 Mis à jour par Christophe LEON il y a plus de 5 ans

  • Statut changé de En attente d'informations à Résolu
  • % réalisé changé de 80 à 100

#8 Mis à jour par Renaud Dussol il y a plus de 5 ans

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 Mis à jour par Arnaud FORNEROT il y a plus de 5 ans

  • Version cible mis à Envole 5.10

#10 Mis à jour par Arnaud FORNEROT il y a plus de 5 ans

  • Statut changé de Résolu à Fermé

Formats disponibles : Atom PDF