Aide pour débuter dans la création d'un plugin

cpalocpalo Member
Bonjour,

Je me suis enfin bousculer pour écrire mon premier plugin. Je le mettrai dans la page plugin dès qu'il est finalisé ( rien d'orignal ).
Tout d'abord une petite précision:
parfois au lieu d'avoir
[== PHP ==]
$this->addHook('AdminFootEndBody	','AdminFootEndBody');
public function ThemeEndBody(){}
on peut trouver:
[== PHP ==]
$this->addHook('AdminFootEndBody	','addMyFunction');
public function addMyFunction(){}
Y-a-t-il une différence réelle ou une syntaxe "imposée?

Ensuite un besoin d'aide. Dans le dossier du plugin j'ai trois fichiers css correspondant à des thèmes différents. Je souhaiterai donc que le fichier config.php puisse permettre de choisir l'un de ces trois thèmes. Qu'est-ce que je pourrai utiliser comme hook pour cela?

Merci

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    1) le 1er parametre de la fonction addHook est le nom du hook connu de PluXml parmi tous les hooks prédéfinis. Le 2ieme paramètre est le nom de la méthode à appeler dans le code de ton plugin. Ce nom c'est toi qui le choisi, peut importe son nom. Perso, j'ai pris l'habitude de donner le meme nom que le hook, ce qui me permet en lisant le code de mes plugins de savoir par quel hook est appelé chaque méthode. Mais libre à toi de faire comme tu veux. Il n'y a pas de règle

    2) Si je comprends bien ce que tu veux faire: sur l'écran de config du plugin, tu veux choisir le fichier css à appliquer dans le thème, parmi une liste dispo. Dans ce cas j'utiliserais ThemeEndHead pour déclarer le fichier css à charger coté client.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • cpalocpalo Member
    juin 2015 modifié
    Bonjour,

    Pour la dénomination je suivrai ta recommandation.
    Pour mon plugin j'avais déjà fait cela dans le cas d'un seul thème.
    [== PHP ==]
    #  Méthode qui ajoute les déclarations pour la coloration syntaxique dans la partie </body>	
    	public function ThemeEndBody(){
    	echo '<link rel="stylesheet" href="'.PLX_PLUGINS.'prism/prism.css" media="screen"/>'."\n";
    	echo '<script type="text/javascript" src="'.PLX_PLUGINS.'prism/prism.js"></script>'."\n";
    	}
    
    Mais j'aurai souhaité proposer le choix entre plusieurs thèmes. Donc manuellement ( mais il aurait fallu que ce soit dynamique)
    [== Indéfini ==]
    <form id="form_pluprism" action="parametres_plugin.php?p=pluPrism" method="post">
    	<fieldset>
    		<label><?php $plxPlugin->lang('L_THEMEPLUGIN') ?>&nbsp;:</label>
    		<select>
    			<option>prism-defaut.css</option>
    			<option>prism-coy.css</option>
    			<option>prism-okaida.css</option>
    		</select>
    	</fieldset>
    	<input type="submit" name="submit" value="Enregistrer"/>
    </form>
    

    et donc modifier le hook précédent par celui-ci:
    [== PHP ==]
           public function ThemeEndBody(){
    	echo '<link rel="stylesheet" href="'.PLX_PLUGINS.'prism/$var['themePlugin']" media="screen"/>'."\n ";
    	echo '<script type="text/javascript" src="'.PLX_PLUGINS.'prism/prism.js"></script>'."\n";
    	}
    
    en ayant déclaré la variable:
    [== PHP ==]
    $var['themePlugin'] = $plxPlugin->getParam('themePlugin')=='' ? 'prism-defaut.css' : $plxPlugin->getParam('themePlugin');
    
  • pour créer dynamiquement le choix du fichier CSS, tu peux t'inspirer de ce qui est utilisé dans PluXml :
    pour préparer la liste essaye ça :
    [== PHP ==]
    $aCss = array();
    $files = plxGlob::getInstance(PLX_ROOT.$plxAdmin->aConf['racine_themes'].$plxAdmin->aConf['style']);
    if ($array = $files->query('/^prism(-[a-z0-9-_]+)?\.css$/')) {
    	foreach($array as $k=>$v)
    		$aCss[$v] = $v; 
    }
    

    et ensuite pour afficher le menu déroulant :
    [== PHP ==]
    plxUtils::printSelect("choixCss", $aCss, $choixActuel);
    
  • cpalocpalo Member
    oui j'avais bien vu cela
    Mais les css en question sont dans le dossier du plugin d'où comment remplacer
  • StéphaneStéphane Member, Former PluXml Project Manager
    pas besoin de les déplacer. suffit de spécifier le bon chemin qui va vers le css dans le dossier de ton plugin

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • le chemin vers le répertoire de l'extension c'est ça alors :
    PLX_ROOT . $plxAdmin->aConf['racine_plugins'] . "prism"
    

    et en fait tu n'as pas besoin du "foreach" donc au final tu peux simplifier le code comme ça :
    $aCss = array();
    $files = plxGlob::getInstance(PLX_ROOT . $plxAdmin->aConf['racine_plugins'] . "prism");
    if ($array = $files->query('/^prism(-[a-z0-9-_]+)?\.css$/')) {
        $aCss = $array;
    }
    
  • StéphaneStéphane Member, Former PluXml Project Manager
    tu peux meme remplacer
    PLX_ROOT . $plxAdmin->aConf['racine_plugins'] 
    

    par
    PLX_PLUGINS
    

    edit: une liste des constantes connues dans PluXml est dispo ici:
    http://pluxopolis.net/article59/liste-des-constantes-dans-pluxml

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

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