plxShowConstruct et plugin

flipflipflipflip Member
novembre 2012 modifié dans Entraide
Bonjour,

Pour mon plugin StaticGalerie j'essai de faire en sorte que mes pages générées par le plugin soit concidérer comme étant créé par le core. Pour ce faire je m'inspire du plugin de Stéphane plxMyContact mais je bloc sur la fonction plxShowConstruct


L'original
public function plxShowConstruct() {

		# infos sur la page statique
		$string  = "if(\$this->plxMotor->mode=='contact') {";
		$string .= "	\$array = array();";
		$string .= "	\$array[\$this->plxMotor->cible] = array(
			'name'		=> '".$this->getParam('mnuName')."',
			'menu'		=> '',
			'url'		=> 'contact',
			'readable'	=> 1,
			'active'	=> 1,
			'group'		=> ''
		);";
		$string .= "	\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);";
		$string .= "}";
		echo "<?php ".$string." ?>";
    }


Ma version
public function plxShowConstruct() {
    	foreach($this->aGaleries as $galerie_id => $galerie) {
			# infos sur la page statique
			$string  = "	\$array = array();";
			$string .= "	\$array[\$this->plxMotor->cible] = array(
				'name'		=> '".$galerie['name']."',
				'menu'		=> '',
				'url'		=> '".$galerie['name']."',
				'readable'	=> '',
				'active'	=> '".$galerie['active']."',
				'group'		=> ''
			);";
			$string .= "	\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);";			
		}

		echo "<?php ".$string." ?>";
    }

La différence ce trouve dans le foreach car je peux avoir plusieurs galeries donc plusieurs pages statiques. Dans le header.php de mon thème j'ai ajouté un print_r($plxMotor->aStats); et voila le résultat :
Array
(
    [001] => Array
        (
            [name] => Profil
            [title_htmltag] => 
            [meta_description] => 
            [meta_keywords] => 
            [group] => 
            [url] => profil
            [active] => 1
            [menu] => oui
            [template] => static.php
            [readable] => 1
        )

    [002] => Array
        (
            [name] => Boutique
            [title_htmltag] => 
            [meta_description] => 
            [meta_keywords] => 
            [group] => 
            [url] => boutique
            [active] => 1
            [menu] => oui
            [template] => static.php
            [readable] => 0
        )

    [0] => Array
        (
            [name] => autre-gal
            [menu] => 
            [url] => autre-gal
            [readable] => 
            [active] => 1
            [group] => 
        )
)


Il y a bien les deux pages statiques que j'ai généré via pluxml (001 et 002) et une généré via mon plugin (0). Sauf qu'il y a deux problèmes :
- via mon plugin j'ai généré deux pages, mais une seul est dans le tableau;
- les id du array pour la partie créé avec mon plugin, je voudrais que ça reprenne le vrai id de ma galerie, pour mes tests les deux galeries ont les id 0001 et 0003. J'ai essayé de remplacer \$this->plxMotor->cible par ".$galerie_id." mais pas mieux.


J'ai fais le test en enlevant le if dans le plxShowConstruct de plxMyContact et l'histoire des id est identiques. Je suis tombé sur un comportement bizarre au niveau des id de l'array. Si vous cliquez sur la page qui correspond au plugin plxMyContact le tableau devient :
Array
(
    [001] => Array
        (
            [name] => Profil
            [title_htmltag] => 
            [meta_description] => 
            [meta_keywords] => 
            [group] => 
            [url] => profil
            [active] => 1
            [menu] => oui
            [template] => static.php
            [readable] => 1
        )

    [002] => Array
        (
            [name] => Boutique
            [title_htmltag] => 
            [meta_description] => 
            [meta_keywords] => 
            [group] => 
            [url] => boutique
            [active] => 1
            [menu] => oui
            [template] => static.php
            [readable] => 0
        )

    [../../plugins/plxMyContact/form] => Array
        (
            [name] => autre-gal
            [menu] => 
            [url] => autre-gal
            [readable] => 
            [active] => 1
            [group] => 
        )
)

Tout ce mélange dans le dernier élément, il prend un id "spécial" de plxMyContact avec les éléments de mon plugin.

J'ai un string de l'array

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour
    Je peux déjà expliquer pourquoi avec ton foreach tu n'as qu'une page créée malgré la boucle.
    Le tableau $array est indexé dans la boucle par $this->plxMotor->cible
    $string .= "	\$array[\$this->plxMotor->cible] = array(
    
    $this->plxMotor->cible ne change pas dans la boucle, donc a chaque itération tu écrases l'occurrence précédente

    Consultant PluXml

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

  • Donc jusque là normale.

    J'ai un string de l'array

  • Jerry WhamJerry Wham Member
    novembre 2012 modifié
    Le ../../plugins/plxMyContact/form vient de la méthode plxMotorPreChauffageBegin que tu as dû recopier du plugin de Stéphane.

    Il faudrait aussi que tu définisses aussi un mode "gallerie" pour que le comportement que tu veux obtenir ne se fasse que quand tu es sur la bonne page, comme le fait Stéphane avec le mode contact.
  • Bonjour,

    Mon objectif est de faire en sorte que n'importe quelle page généré par mon plugin sois considérer comme une page statique à part entière du core de pluxml afin de pouvoir en définir une comme étant la page d'accueil, ce que j'ai commencé à faire ici : http://forum.pluxml.org/viewtopic.php?id=3646

    Le ../../plugins/plxMyContact/form vient de la méthode plxMotorPreChauffageBegin que tu as dû recopier du plugin de Stéphane.

    Ca aurait pu mais non :
    public function plxMotorPreChauffageBegin() {
    
    		$template = $this->getParam('template')==''?'static.php':$this->getParam('template');
    
    		$string = "
    		if(\$this->get && preg_match('/^galerie\/?/',\$this->get)) {
    			\$this->mode = 'galerie';
    			\$this->cible = '../../plugins/staticgaleries/galerie';
    			\$this->template = 'static.php';
    			return true;
    		}
    		";
    
    		echo "<?php ".$string." ?>";
        }
    

    J'ai un string de l'array

  • danielsandanielsan Member
    novembre 2012 modifié
    Hello flipflip,


    peux-tu me donner un lien vers le DL de ton plugin que je vois mieux ce que tu cherches ?


    Perso j'ai créé un plugin qui crée automatiquement un dossier d'images pour chaque article créé.
    Il reste à glisser par le gestionnaire média les images dans le dossier voulu puis dans le template un bout de code qui va chercher la liste des images pour les réinjecter dans un plugin de diapo ou autre.


    On a donc un diapo par article.


    Cordialement,
  • C'est vrai qu'on a pas toutes les infos. Ce qui n'est pas évident pour t'aider.
  • Voila une version packagé à la volé : http://www.blogoflip.fr/data/documents/plugins/staticgaleries/staticgaleries-06-dev.tar.gz dans l'état ou je l'ai laissé hier soir lors de mon dernier post.

    Merci pour l'aide :)

    J'ai un string de l'array

  • flipflipflipflip Member
    novembre 2012 modifié
    Bonjour,

    J'ai continué à chercher et maintenant mes pages statiques sont visible dans aStats avec le bon index de tableau. Dans la class de mon plugin :
    /**
    	 * Méthode de traitement du hook plxShowConstruct
    	 *
    	 * @return	stdio
    	 * @author	Stephane F
    	 * @adapte  Philippe M
    	 **/
    	public function plxShowConstruct() {
    		# infos sur la page statique
    		$string  = "\$StaticGaleries = \$this->plxMotor->plxPlugins->getInstance('staticgaleries');";
    		$string .= "foreach(\$StaticGaleries->aGaleries as \$galerie_id => \$galerie) {";
    		$string .= "	\$array = array();";
    		$string .= "	\$array[\$galerie_id] = array(
    			'name'		=> \$galerie['name'],
    			'menu'		=> '',
    			'url'		=> \$galerie['name'],
    			'readable'	=> '',
    			'active'	=> \$galerie['active'],
    			'group'		=> ''
    			);";
    		$string .= "	\$this->plxMotor->aStats = array_merge(\$this->plxMotor->aStats, \$array);";
    		$string .= "}";
    
    		echo "<?php ".$string." ?>";
    	}
    


    Maintenant faire prendre en compte la paramètre de page d'accueil.

    J'ai un string de l'array

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