|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
gtraxx Smarty Regular
Joined: 08 Jan 2008 Posts: 56
|
Posted: Fri Dec 11, 2009 9:18 pm Post subject: definir un nommage perso pour plugins |
|
|
Bonsoir, j'ai une question très particulière.
Je créer une série de plugin pour smarty 3, j'en ai une bonne trentaine .
MAis je souhaite pourvoir redéfinir le nom des fonctions (templates) plugins perso.
Comme vous le savez, un plugin de base se nomme:
Code: | function smarty_function_monplug |
Je souhaite avoir un dossier perso avec des plugins pour smarty mais nommé à ma sauce du genre :
Code: | function machin_function_monplug |
Est il possible de réaliser ce genre de chose sachant que je souhaite continuer à pouvoir définir des plugins de manière classique.
en bref j'ai un dossier contenant tous mes plugins avec la syntaxe par défaut et un autre pouvant contenir les personnalisés. |
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Sun Dec 13, 2009 10:38 am Post subject: |
|
|
Bonjour,
Il suffit d'autopsier le fichier Smarty.class.php, plus précisément la fonction loadPlugin :
Code: |
public function loadPlugin($plugin_name)
{
// if class exists, exit silently (already loaded)
if (class_exists($plugin_name, false))
return true;
// if callable as function, exit silently (already loaded)
if (is_callable($plugin_name))
return true;
// Plugin name is expected to be: Smarty_[Type]_[Name]
$_plugin_name = strtolower($plugin_name);
$_name_parts = explode('_', $_plugin_name, 3);
// class name must have three parts to be valid plugin
if (count($_name_parts) < 3 || $_name_parts[0] !== 'smarty') {
throw new Exception("plugin {$plugin_name} is not a valid name format");
return false;
}
// if type is "internal", get plugin from sysplugins
if ($_name_parts[1] == 'internal') {
if (file_exists(SMARTY_SYSPLUGINS_DIR . $_plugin_name . '.php')) {
require_once(SMARTY_SYSPLUGINS_DIR . $_plugin_name . '.php');
return true;
} else {
return false;
}
}
// plugin filename is expected to be: [type].[name].php
$_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}.php";
// loop through plugin dirs and find the plugin
foreach((array)$this->plugins_dir as $_plugin_dir) {
if (strpos('/\\', substr($_plugin_dir, -1)) === false) {
$_plugin_dir .= DS;
}
if (file_exists($_plugin_dir . $_plugin_filename)) {
require_once($_plugin_dir . $_plugin_filename);
return true;
}
}
// no plugin loaded
return false;
}
|
On y voit dès le début qu'on a pas trop le choix :
Code: |
// Plugin name is expected to be: Smarty_[Type]_[Name]
$_plugin_name = strtolower($plugin_name);
$_name_parts = explode('_', $_plugin_name, 3);
// class name must have three parts to be valid plugin
if (count($_name_parts) < 3 || $_name_parts[0] !== 'smarty') {
throw new Exception("plugin {$plugin_name} is not a valid name format");
return false;
}
|
Voilou, on a pas besoin d'épiloguer du coup
Cordialement
Last edited by Gowser on Sun Dec 13, 2009 10:57 am; edited 1 time in total |
|
Back to top |
|
gtraxx Smarty Regular
Joined: 08 Jan 2008 Posts: 56
|
Posted: Sun Dec 13, 2009 10:56 am Post subject: |
|
|
Merci,
et si je fais une extension de la class smarty en reprenant la fonction loadplugin et en y ajoutant ma propre fonction de nommage avec un dossier défini, ben j'ai une petite idée mais je ne sais pas si c'est possible.
En gros j'ajoute une fonction supplémentaire afin de charger les plugin qui on un nom comme monplug_function_... |
|
Back to top |
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|