[Résolu] Variable non interprétée dans class.plx.plugins.php

Dakin QueliaDakin Quelia Member
août 2019 modifié dans Entraide
Bonjour à toutes et à tous,

Voilà, je reviens à nouveau vers vous car j'ai un souci.

Chaque fichier du panneau d'administration inclut le fichier "common.php" où je fais appel à Twig.

Jusque là tout va bien pour le dossier templates dans "admin".

Mon souci est que je ne peux pas afficher les templates des plugins car la variable $loader n'est pas chargée.

Dans mon fichier common.php (dans le dossier "admin") :
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem(PLX_ROOT . 'admin/templates');
$tpl = new Twig_Environment($loader, array('cache' => false));


Mais voilà le hic : si j'utilise $tpl->render() dans le plugin que je crée, il n'arrive pas à trouver le template.
Ce qui est logique puisque chaque plugin est inclus dans le panneau admin et donc il utilise le dossier template défini.

De ce fait, j'ai créé une petite fonction :
	/**
	 * Méthode qui charge le(s) fichier(s) template(s)
	 *
	 * @return	template
	 * @author	Dakin Quelia
	 **/
	public function getPluginPathTemplate($plugName)
	{
		$this->templateDir = PLX_PLUGINS . $plugName . '/templates';
		
		return $this->loader->addPath($this->templateDir);
	}

Mais étant donné que $this->loader est vide, il retourne :
Twig_Error_Loader: Unable to find template "admin_myplugin.html" (looked into: ../admin/templates). in C:\wamp\www\WebsiteTwig\lib\Twig\Loader\Filesystem.php on line 215

Par contre, si je fais ça dans le fichier "admin.php" du plugin :
$templateDir = PLX_PLUGINS . $plugName . '/templates/';
$loader->addPath($templateDir);

Seulement, ici ça fonctionne CAR le plugin est inclus dans le fichier admin (qui lui charge déjà $loader).

Mais voilà j'aimerais que ce soit chargé de façon automatique via la classe plugins. Donc en gros, il faudrait que j'arrive à récupérer la valeur de $loader.

Bien à vous

Réponses

  • Dakin QueliaDakin Quelia Member
    février 2019 modifié
    Je reviens car il y a du progrès. Je m'explique.

    Dans le fichier "admin.php", si je fais ça :
    $loader->addPath($plxPlugin->templateDir);
    

    Et que dans la classe des plugins, cette méthode :
    /**
    	* Méthode qui charge le(s) fichier(s) template(s)
    	*
    	* @return	template
    	* @author	Dakin Quelia
    	*/
    	public function getPluginPathTemplate($plugName)
    	{
    		$this->templateDir = PLX_PLUGINS . $plugName . '/templates';
    
    		return $this->templateDir;
    	}
    

    Et dans le constructeur de la classe :
    $this->getPluginPathTemplate($plugName);
    

    Alors ça fonctionne plutôt bien. Mais le souci assez important reste l'appel à la variable $loader ! Car sans ça, je ne peux pas faire un système automatique.

    Bien à vous
  • Bonjour,

    Petite précision : $loader est défini lorsqu'on est dans une page admin du plugin car il est inclus dans la page principale "plugin.php" qui lui fait déjà appel à ladite variable puisque chaque page de l'admin fait appel à "common.php".

    Mais dans la classe class.plx.plugins.php elle n'est pas appelée donc pas définie. Une idée de comment faire pour que je puisse appeler la variable?

    Bien à vous
Connectez-vous ou Inscrivez-vous pour répondre.