Les pages statiques issues des plugins n'ont pas d'Id

GzygGzyg Member
Bonjour,

Pas sûr que ce soit un "bug", c'est peut-être volontaire, mais.

Pour attribuer automatiquement une classe aux pages statiques (en vue de les CSS-iser séparément - je teste), j'ai attribuer au conteneur principal du fichier static php cette classe :
[== PHP ==]
<article role="article" id="static-page-<?php echo $plxShow->staticId(); ?>" class="page_<?php echo $plxShow->staticId(); ?>">

.../...

</article>

Ça fonctionne bien pour les pages créées depuis l'administration qui renvoient bien class="page_1" mais pas pour les pages issues des plugins (page Contact par exemple) qui renvoeint : class="page_ "

J'avais d'abord essayé avec :
[== PHP ==]<article .../...  class="page_<?php echo $plxShow->staticTitle(); ?>">

Ça fonctionne bien à condition qu'il n'y ait pas d'espace dans le nom de la page :

Contact renvoie : class="page_Contact"

Le Contact : renvoie class="Le "


L'idée de l'Id me semble plus judicieuse et peut-être plus facile à "résoudre" ? :D


Merci, à plus,

Gzyg

Réponses

  • L'Id de la page statique courante est créé par :
    [== Indéfini ==]
    	public function staticId() {
    
    		# On va verifier que la categorie existe en mode categorie
    		if($this->plxMotor->mode == 'static' AND isset($this->plxMotor->aStats[ $this->plxMotor->cible ]))
    			return intval($this->plxMotor->cible);
    	}
    
    

    Il faut donc que "mode" soit à 'static' pour que plxMotor->cible soit renvoyé.

    Or, lorsqu'un plugin créé une "fausse" page statique pour ses besoins d'afficher des données, il a tendance à modifier le "mode" de manière à ce que pluXml cesse de s'intéresser à ce qui se passe (en gros, si on laisse 'static', pluXml va continuer à vouloir considérer cette page comme étant réellement une page statique, alors que c'est juste une astuce du plugin pour afficher une page).
    Dans mon plugin plxCalendrier, je passe mode à 'plxCalendrier' (je suis super inventif).
    [== Indéfini ==]
    			$string="
    				\$this->mode = 'plxCalendrier';
    				\$this->cible = '../../".$NomFichier."';
    				\$this->template = '".$template."';
    				return true;
    			";
    
    

    plxMyContact fait la même chose :
    [== Indéfini ==]
    		$string = "
    		if(\$this->get && preg_match('/^contact\/?/',\$this->get)) {
    			\$this->mode = 'contact';
    			\$this->cible = '../../plugins/plxMyContact/form';
    			\$this->template = '".$template."';
    			return true;
    		}
    		";
    

    Le développeur de plugin, lorsqu'il utilise cette astuce pour afficher une page, ne peut pas se passer de ce changement de mode.

    Plusieurs propositions de solutions donc :
    - Modifier pluXml pour offrir aux plugins une sorte de "page statique officielle pour les plugin", permettant aux développeurs d'utiliser un système "officiel" plusieurs qu'une astuce de code,
    - étudier la possibilité de retirer le test $this->plxMotor->mode == 'static' dans la fonction staticId (je n'ai aucune idée de l'impact, je laisse ce joyeux travail à l'équipe)
    - se baser sur autre chose que l'id.

    En l'occurrence, le staticTitle n'est pas pertinent non plus car il peut être vide (c'est le cas pour plxCalendrier).
    Je n'ai pas de solution simple à te proposer, sachant que staticUrl ne devrait pas non plus fonctionner, puisqu'il se base sur staticId...
  • Merci de cette explication Gari. :)

    Je n'ai pas compris grand chose (je ne suis pas développeur) mais quand j'essaye de changer les lignes du fichier plxMyContact.php - au niveau de la fonction plxMotorPreChauffageBegin() - ça me renvoie une "page not found"...

    J'ai bien respecté les ', les ^, les / et les \ comme dans ton exemple.


    à plus,

    Gzyg
  • Je ne comprends pas ce que tu as tenté de faire.

    J'ai réfléchi depuis tout à l'heure, et comme tu as déjà modifié static.php je propose que tu es prêt à aller plus loin...

    Voilà ce que je te propose de rajouter en haut du fichier static.php :
    [== PHP ==]
    function getStaticUrl()
    {
    	$plxMotor = plxMotor::getInstance();
    	if(isset($plxMotor->aStats[$plxMotor->cible]))
    		return $plxMotor->aStats[ $plxMotor->cible ]['url'];
    }
    ?>
    

    Et ensuite, dans la ligne "<article>" tu n'appelles plus l'ancienne fonction mais la nouvelle, ce qui donne :
    [== HTML ==]
    <article role="article" id="static-page-<?php echo getStaticUrl(); ?>">
    

    Ca te renvoie non pas l'id (j'ai essayé mais le numéro n'est pas bon, plus exactement dans le cas d'un plugin ça peut être le numéro d'une page statique "réelle") mais un autre champ, en l'occurrence "URL". Je te laisse tester :)
  • Plutôt que de retirer le test $this->plxMotor->mode == 'static', je vérifierai que le mode contient le mot static.

    Cela permettrait quand on développe un plugin (il suffirait que cela devienne une convention), que le mode du plugin contienne lui aussi le mot static. Ainsi, pour plxCalendrier (au passage, les plugins commençant par plx, sont normalement réservés aux plugins officiels), le mode deviendrait "static-plxCalendrier".

    Il faudrait donc modifier la fonction staticId comme suit :
     
    if(strpos($this->plxMotor->mode,'static') !== false AND isset($this->plxMotor->aStats[ $this->plxMotor->cible ])) 
    etc...
    
    

    mais cela devra attendre une prochaine version.

    Je ne pense pas que cela engendrera d'effets inattendus.
    Il faudra bien sûr mettre à jour les plugins qui fonctionnent selon ce principe, ainsi que la documentation du développeur.
  • - Oups pour le "plx", je ne savais pas... Je trouvais ça chouette comme préfixe. Y'a un préfixe pour les plugins non-officiels ?
    - Comme indiqué dans mon message précédent (mais on s'est croisé), l'id ne serait de toute façon pas bon, parce que les plugins qui créent des fausses pages statiques "jouent" également avec aStats, mettant un joyeux bordel dans les clés. Lorsque j'ai testé dans plxCalendrier, j'ai obtenu le numéro "0", et je pense que j'aurais obtenu le même numéro en testant avec plxMyContact...
    Avec 'url' comme proposé, on obtient des trucs comme "statique-1" pour une vraie page statique et un truc plus spécifique au plugin pour les plugins ("contact" pour plxMyContact et "plxCalendrier" pour le calendrier).

    Pour ta proposition, effectivement ça pourrait éventuellement fonctionner (je n'ai pas assez de recul pour voir les impacts et éventuels effets de bords), cependant ne serait-il pas plus logique de proposer un "mode" spécifique aux plugins ? J'ai réellement la sensation de profiter d'une astuce pas très carrée lorsque je construis une fausse page statique...
  • Je suis assez d'accord avec toi.

    C'est à Stephane de voir dans ces conditions.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Je vous propose cette solution.
    Pouvez-vous svp la tester pour me confirmer si c'est ok.
    Si c'est bon je l’intégrerai en natif

    Fichier à modifier: core/lib/class.plx.show.php
    Remplacer la fonction staticId() par le code suivant
    	public function staticId() {
    
    		# On va verifier que la categorie existe en mode categorie
    		if($this->plxMotor->mode == 'static' AND isset($this->plxMotor->aStats[ $this->plxMotor->cible ]))
    			return intval($this->plxMotor->cible);
    		else
    			return plxUtils::strCheck($this->plxMotor->mode);
    	}
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • GzygGzyg Member
    février 2015 modifié
    J'ai testé et :

    Côté class="" ça renvoie le numéro pour les pages statiques générées depuis PluXml et le titre de la page pour les pages statiques générées par le plugin.

    Et le titre en question est celui par défaut du plugin pas forcément celui que l'on a attribué (par exemple la page allarchive je l'ai appelé Intégrale et la class est : class="static-allarchive".

    C'est un moindre mal, au moins elle existe.

    Problème collatéral : (mais ça vient peut-être de mon design) le menu de navigation affiche aussi le titre original du plugin en plus du lien créé par le menu mais sans bénéficier justement du design de ce lien...


    Voilà, voilà :)

    [edit] : ça ne vient pas de mon design, le thème par défaut affiche aussi ce titre surnuméraire :
    [== XHTML ==]
    <ul id="static-nav">
    			allarchive
    <li id="static-home"><a href="http://localhost/~ericj/LCM/pluxml/" class="noactive" title="Accueil">Accueil</a></li>
    ...
    


    à plus,

    Gzyg
  • Hum Stéphane, plutôt que
    echo plxUtils::strCheck($this->plxMotor->mode);
    
    Ne faudrait-il pas plutôt mettre :
    return plxUtils::strCheck($this->plxMotor->mode);
    
  • StéphaneStéphane Member, Former PluXml Project Manager
    @Gari: oui tout a fait. bien vu

    edit: j'ai corrigé le code donné précédemment.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Nickel. Merci les gars ! :)


    à plus,

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