Nouveau champ XML et optimisation

Salut,
J'adore pluXML et je suis en train de customiser un petit CMS.

Je cherche une bonne méthode pour rajouter un champ de formulaire avec les coordonnées de position d'affichage d'articles.

soit deux champs par article:
X et Y

J'ai trouvé un plugin qui semble le faire très bien.
J'ai commencé de dév quelques plugin basique aussi donc je peu peut-etre en faire un.
Et j'ai vu public function parseArticle($filename) { dans class.plx.motor dans les lib

Je me dit que si je modifie la lib directement je gagne (très peu) en vitesse d'éxécution.
Pars-que si j'utilise des plugins j'ai peur d'être obligé de tout parsser deux fois en tout pour récupérer mes parametre dans les articles.xml.

Que pensez vous du gain de performances vis à vis des inconvénient lié au dev et a la maintenance ?

Merci de votre attention.

Réponses

  • newicnewic Member
    septembre 2015 modifié
    oups :
    public function parseArticle($filename) {

    # Mise en place du parseur XML
    $data = implode('',file($filename));
    $parser = xml_parser_create(PLX_CHARSET);
    xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
    xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
    xml_parse_into_struct($parser,$data,$values,$iTags);
    xml_parser_free($parser);
    # Recuperation des valeurs de nos champs XML
    $art = plxUtils::getValue($values[$iTags[0]]);
    $art = plxUtils::getValue($values[$iTags[0]]);
    $art = plxUtils::getValue($values[$iTags[0]],'article.php');
    $art = plxUtils::getValue($values[$iTags[0]]);
    $art = plxUtils::getValue($values[$iTags[0]]);
    $art = plxUtils::getValue($values[ $iTags[0] ]);
    $meta_description = plxUtils::getValue($iTags[0]);
    $art = plxUtils::getValue($values[$meta_description]);
    $meta_keywords = plxUtils::getValue($iTags[0]);
    $art = plxUtils::getValue($values[$meta_keywords]);
    $art = isset($iTags) ? plxUtils::getValue($values[$iTags[0]]) : '';
    # Informations obtenues en analysant le nom du fichier
    $art = $filename;
    $tmp = $this->artInfoFromFilename($filename);
    $art = $tmp;
    $art = $tmp;
    $art = $tmp;
    $art = $tmp;
    $art = $tmp;
    $art = $this->getNbCommentaires('/^'.$art.'.[0-9]{10}.[0-9]+.xml$/');

    # Hook plugins
    eval($this->plxPlugins->callHook('plxMotorParseArticle'));
    # On retourne le tableau
    return $art;
    }

    En fait oin a un appel au hook plxmotorparsearticle donc si j'ai bien compris je m'embête pas je fais un plugin qui pointe sur ce hook dans lequel j'ajoute :

    $art = plxUtils::getValue($values[$iTags[0]]);
    $art = plxUtils::getValue($values[$iTags[0]]);

    Tout simplement.
    Les dévelopeurs ont pensé à tout c'est génial :)

    Et du coup j'immagine que l'on peu fabriquer ses propres hook de la même manière ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour newic

    Je confirme, l'utilisation du hook plxMotorParseArticle est la bonne méthode pour récupérer des infos dans les fichiers xml des articles.
    De le même façon, il y a d'autres hooks pour aller écrire dedans

    Consultant PluXml

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

  • Merci je vais essayé d'implémenter mes idées quand j'en aurai une ébauche qui fonctionne :)
  • Je voulais rajouter deux fonctions dans plxshow mais je n'ai pas trouvé de hook pour les insérer.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Peux-tu expliquer ce que tu veux faire ? Les hooks que tu veux ajouter dans plxShow c'est pour faire quoi ?

    Consultant PluXml

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

  • newicnewic Member
    septembre 2015 modifié
    [== PHP ==]
            public function artX() {
                echo plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('x'));
    	    }
            public function artY() {
                echo plxUtils::strCheck($this->plxMotor->plxRecord_arts->f('y'));
        	}    
    

    Ca se sont mes deux fonction que je veux ajouter plx show. Elles me permettent de récupérer les coordonnées x et y des position de mes éléments que j'ai préalablement enregistré dans des nouveaux champs de mes articles.

    Et donc je veu appeler ces deux fonction ensuite pour repositionner mes éléments depuis le theme avec
    [== HTML ==]
    <article style="top:<?php $plxShow->artY(); ?>px;left:<?php $plxShow->artX(); ?>px" class="article" role="article" id="post-<?php echo $artnum; ?>">
    

    Donc dans ce cas je pensais pouvoir utiliser un hook mais a prioris dans plx show je n'ai vu aucun hook à l'extérieur des fonctions. Et si je crée un hook et bien ca ne fonctionne pas.

    Peut être est il question ici d'une extension de classe et que celà n'emploit pas les meme structure ou méthodes (je ne sais pas vraiment l'exprimer)?

    Visu du dev sans architecture avec des plugins ici : https://sphynxDOTouvatonDOTorg/
  • StéphaneStéphane Member, Former PluXml Project Manager
    Dans la classe de ton plugin, créez ton hook que tu appeleras à partir du thème

    exemple dans le constructeur de la classe de ton plugin, ajoute:
    		$this->addHook('MonHook', 'MonHook');
    

    le corps de la méthode dans la classe
            public function MonHook() {
                echo plxUtils::strCheck($plxMotor->plxRecord_arts->f('x'));
    	    }
    

    et l'appel du hook perso dans ton thème
    [== Indéfini ==]
    <?php eval($plxShow->callHook('MonHook')) ?>
    

    Consultant PluXml

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

  • Merci de répondre si rapidement je vais essayer.
  • Et du coup je dois récupérer l'instance plxmotor et plxrecord dans le constructeur de la classe puisque ces méthodes vont etre traités pendant l'execution du plugin ?
  • Fatal error: Call to a member function f() on a non-object in /var/www/vhosts/sphynx.ouvaton.org/httpdocs/plugins/xy/xy.php on line 26
  • StéphaneStéphane Member, Former PluXml Project Manager
    essaye avec quelque chose du genre
    public function MonHook() {
      $plxMotor = plxMotor::getInstance();   
      echo plxUtils::strCheck($plxMotor->plxRecord_arts->f('x'));
    }
    

    il y a d'autres façons de faire, mais tout dépend du reste de ton code

    Consultant PluXml

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

  • Bon je vais rester avec un codage en dur pour le moment merci quand meme. J'ai un peu du mal a visualiser le comportement et les moments d'instanciation ainsi que les relations entre les objets tout ca...

    Ca existe des méthodes en POO pour comprendre comment tout s'articule ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    as-tu déjà regardé le guide du développeur des plugins pour PluXml ?

    Consultant PluXml

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

  • Oui je l'ai trouvé très interessant. J'ai compris le système de hook comment créer mes propres plugins en injectant du code et en faisant appel a des classes.

    J'ai fait quelques ptites modifs sur des plugins existants ca fonctionne très bien si on veut faire quelques chose de simple.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Super. Je vais essayer de faire un tuto pour rajouter des champs dans un article et comment les exploiter

    Consultant PluXml

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

  • J'ai trouvé ce plugin http://forum.pluxml.org/viewtopic.php?id=3090&p=2 dont j'ai essayé de m'inspirer mais y a des trucs que j'ai pas compris et certains commentaires sur le thread ne sont pas trop clairs pour moi.
  • C'est bon j'avance Stéphane, merci du coup de main mes problèmes étaient liés à des lacunes en Php, j'ai retourné les solutions et les problèmes et ca avance bien :)
    Je repasserai plus tard, merci.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Si tu as des questions n'hésite pas. Sur le forum ou en privé, y a pas de soucis

    Consultant PluXml

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

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