Erreur quand je clique sur une catégorie

cpalocpalo Member
6 mai modifié dans Entraide

Notice: Undefined index: date_creation in /pluGeek/core/lib/class.plx.motor.php on line 742

Notice: Trying to access array offset on value of type null in /pluGeek/core/lib/class.plx.motor.php on line 742

Notice: Undefined index: date_update in /pluGeek/core/lib/class.plx.motor.php on line 743

Notice: Trying to access array offset on value of type null in /pluGeek/core/lib/class.plx.motor.php on line 743

J'utilise la version en cours de développement 5.8.7 du 20 avril et avec seulement deux plugins TinyMce et kzSkinSelect

Réponses

  • bazooka07bazooka07 Member

    Bonjour,

    Je suppose que l'erreur survient côté site.
    D'après les numéros de lignes, il semble qu'un fichier article au format xml ne contient pas les balises <date_update> et <date_creation> ou que le contenu d'une de ces balises est vide.
    De plus, pour analyser les contenus des fichiers XML on utilise massivement la fonction plxUtils::getValue() qui ne convient pas pour la cellule d'un tableau multi-dimensionnel.

    Tu travailles sur la mise à jour d'un site ou d'une installation neuve ?

    Si tu n'as pas trop d'articles, vérifie que tous les fichiers articles ont ces deux balises. Tu peux peut-être filtrer les articles par catégorie.

  • bazooka07bazooka07 Member

    Si tu trouves l'article défectueux, tu peux me passer une copie ?
    Je regarderai pour que PluXml soit plus résilient quand une balise XML fait défaut

  • cpalocpalo Member
    6 mai modifié

    @see plugeek.fr
    Le site n'est pas abouti mais je l'ai mis en ligne sans attendre.; donc indulgence demandé.
    Pour avoir le message d'erreur, tu cliques sur l'une des catégories dans la sidebar/ catégories
    Par contre contre si je clique sur un article dans derniers articles, je n'i pas cette notification d'erreur

    J'étais parti sur une mise à jour..
    Mais là ce qui est en ligne est une installation neuve mais j'ai récupéré les anciens articles

  • bazooka07bazooka07 Member

    Apparemment la mise à jour s'est mal passée.
    Tu as des articles de 2015 et 2014 qui mettent le bazar. Ils doient leur manqué ces fameuses balises

    Pour gagner du temps, tu peux regarder les articles qui sont seuls dans une catégorie :

    • "le thème de base"

      • article n° 0007
    • article n° 0032

    • ...

    Donne moi une copie de l'article 0007 avant correction

  • cpalocpalo Member
    6 mai modifié

    0007.004,001.001.201504021412.premier-article.xml

    <?xml version='1.0' encoding='UTF-8'?>
    <document>
        <title><![CDATA[Premier edito]]></title>
        <allow_com>1</allow_com>
        <template><![CDATA[article.php]]></template>
    
        <chapo><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></chapo>
    
    <content><![CDATA[<p>Procedente igitur mox tempore cum adventicium nihil inveniretur, relicta ora maritima in Lycaoniam adnexam Isauriae se contulerunt ibique densis intersaepientes itinera praetenturis provincialium et viatorum opibus pascebantur.</p>
    
    <p><a href="http://www.skyminds.net/jquery-script-utilisant-la-fonction-toggle-pour-affichercacher-un-bloc-html/">http://www.skyminds.net/jquery-script-utilisant-la-fonction-toggle-pour-affichercacher-un-bloc-html/</a></p>]]></content>
    
        <tags><![CDATA[PluXml]]></tags>
        <meta_description><![CDATA[]]></meta_description>
        <meta_keywords><![CDATA[]]></meta_keywords>
        <title_htmltag><![CDATA[]]></title_htmltag>
        <vignette><![CDATA[]]></vignette>
    </document>
    
  • bazooka07bazooka07 Member

    Une solution à tester :

    Dans core/lib/class.plx.utils.php, créer la fonction suivante après l'autre fonction getValue :

        public static function getTagValue(&$tag, &$values, $default='') {
            if(!isset($tag) or !is_array($tag) or empty($tag) or !isset($values) or !isset($values[$tag[0]]['value'])) {
                return $default;
            }
    
            return $values[$tag[0]]['value'];
        }
    

    Ensuite dans core/lib/class.plx.motor.php, modifier la fonction parseArticle comme suit :

        public function parseArticle($filename) {
    
            # Informations obtenues en analysant le nom du fichier
            $tmp = $this->artInfoFromFilename($filename);
            if(!empty($tmp)) {
                # 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);
    
                $art = array(
                    'filename'          => $filename,
                    # Recuperation des valeurs de nos champs XML
                    'title'             => plxUtils::getTagValue($iTags['title'], $values),
                    'allow_com'         => plxUtils::getTagValue($iTags['allow_com'], $values, 0),
                    'template'          => plxUtils::getTagValue($iTags['template'], $values, 'article.php'),
                    'chapo'             => plxUtils::getTagValue($iTags['chapo'], $values),
                    'content'           => plxUtils::getTagValue($iTags['content'], $values),
                    'tags'              => plxUtils::getTagValue($iTags['tags'], $values),
                    'meta_description'  => plxUtils::getTagValue($iTags['meta_description'], $values),
                    'meta_keywords'     => plxUtils::getTagValue($iTags['meta_keywords'], $values),
                    'title_htmltag'     => plxUtils::getTagValue($iTags['title_htmltag'], $values),
                    'thumbnail'         => plxUtils::getTagValue($iTags['thumbnail'], $values),
                    'thumbnail_title'   => plxUtils::getTagValue($iTags['thumbnail_title'], $values),
                    'thumbnail_alt'     => plxUtils::getTagValue($iTags['thumbnail_alt'], $values),
                    'numero'            => $tmp['artId'],
                    'author'            => $tmp['usrId'],
                    'categorie'         => $tmp['catId'],
                    'url'               => $tmp['artUrl'],
                    'date'              => $tmp['artDate'],
                    'nb_com'            => $this->getNbCommentaires('#^' . $tmp['artId'] . '.\d{10}.\d+.xml$#'),
                    'date_creation'     => plxUtils::getTagValue($iTags['date_creation'], $values, $tmp['artDate']),
                    'date_update'       => plxUtils::getTagValue($iTags['date_update'], $values, $tmp['artDate']),
                );
    
                # Hook plugins
                eval($this->plxPlugins->callHook('plxMotorParseArticle'));
    
                # On retourne le tableau
                return $art;
            } else {
                # le nom du fichier article est incorrect !!
                if(defined('PLX_ADMIN') and class_exists('plxMsg')) {
                    plxMsg::Error('Invalid filename "' . $filename . '" from plxMotor::parseArticle()');
                }
                return false;
            }
        }
    

    Si on a un éditeur de code digne de ce nom (Geany par exemple) et qu'on sait manipuler les expressions régulières, on peut mettre à jour parseArticle par la méthode rechercher/remplacer de son éditeur avec comme motif de recherche :

    getValue\(\$values\[(\$iTags\['\w+'\])\[0\]\]\['value'\]
    

    et valeur de remplacement :

    getTagValue(\1, $values
    

    Il me faudrait un jeu d'essais pour vérifier mais je suis assez serein sur le résultat du test.

    Il faut faire la même chose pour les fonctions qui parsent un fichier xml (catégorie, users, stats, parameters, ... )

  • Pour infos, on retrouve la même erreur lorsque l'on tente de remettre sommairement à jour les plugins lesfables ou loremipsum https://forum.pluxml.org/discussion/6953/resolu-plxmyloremipsum-remplissage ;)

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

  • bazooka07bazooka07 Member

    Intéressant !
    Je vais tester avec ce plugin.
    Je mettrai le plugin à jour après le test.

  • bazooka07bazooka07 Member

    @cpalo,

    Super, ma boule de cristal fonctionne à merveille, les balises sont absentes !

    Pour résoudre le problème, il y a 3 options :

    • regarder à quel stade la mise à jour des données de PluXml part de travers. Mais j'ai d'autres chats à fouetter.
    • augmenter la résilience de PluXml lorsque des balises manquent dans les fichiers xml
    • avancer sur ma version 6.0 de PluXml qui utilise de préférence SimpleXml et gère l'absence des balises. Dans la version officielle 6.0, il y a une perpétuelle mixture dans l'indentation du code entre les tabulations et les espaces. Et chaque "git rebase" vire au chemin de croix. Dur pour un athée.
  • cpalocpalo Member

    Ce sont les articles de 2014 et 2015 qui posent problèmes.
    Alors comme tu as du voir c'est un site qui était en cours de refonte, avec beaucoup d'article de test. Donc pas trop grave.
    En attendant j'ai trouvé une solution.
    J'ai créé une catégorie qui ne s'affiche pas et j'y ai mis tous les articles ( en mode brouillon) qui posaient problème.
    Ensuite les articles que je voudrai re-publier à nouveau je les créerai comme nouvel article.

  • 6 mai modifié

    Bonsoir,

    en principe en enregistrant à nouveau ces articles (en prenant garde de remplir les champs date vides au préalable), tout rentre dans l'ordre, si il y en a des centaines , l'idéal serait d'automatiser, voir de lancer une mise à jour des articles si ces champs/balises sont manquant(es) ;)

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

  • bazooka07bazooka07 Member

    Bonsoir,

    En parallèle de la fonction plxUtils::getValue(), j'ai créé 2 fonctions pour que PluXml soit plus résiliant quand des balises manquent dans les fichiers xml des catégories, users, articles, ... :

    • plxUtils::getTagValue() (pour articles et commentaires)
    • plxUtils::getTagIndexValue() ( _pour categories, statics, users, ...)

    Pour tester utiliser git :

    git clone https://github.com/kazimentou/PluXml.git -b plxutils-gettagvalue --depth 1
    

    @cpalo,
    Tes articles de 2014 et 2015 devraient passer sans broncher. Les balises manquantes s'ajouteront silencieusement quand les articles seront mis à jour. Elles ne servent que côté admin. Pas d'effet côté site si elles sont manquantes.

    @gcyrillus-nomade ,
    J'ai testé avec le plugin lesfables. Cela passe sans souci.
    Mais le plugin a besoin d'être dépoussiéré. (pas multi-auteurs, catégories plus gérées avec la dernière version de PluXml, ...)

    J'enverrai un pull-request plus tard pour la prochaine mise à jour de PluXml ( A faire : commenter les nouvelles fonctions, vérifier plxMotor::getConfiguration, ...)

    Eviter d'utiliser plxUtils::getValue pour analyser un fichier xml.

  • 7 mai modifié

    @bazooka07 Merci pour nous ;)

    Pour le plugin les fables par exemple, je m'en suis servis pour faire une demo/test pour mon le plugin mère/filles que je me suis bricolé. J'avais le choix pour les 240 articles sortis de la boite soit de

    • faire un script qui boucle sur tout les articles pour y remettre les champs manquants, les tags et les catégories (en utilisant au max le core de ¨PluXml)
    • reprendre sommairement le plugin pour que cela passe, j'ai choisi la deuxième option bien sur
      c’était le plus simple et rapide à faire ;) http://gcyrillus.alwaysdata.net/ , bizarrement, ça plait de trouver toutes ces fables ensemble en lignes et ça va très bien à PluXml ;)

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

  • cpalocpalo Member

    Merci

  • P3terP3ter PluXml Project Manager

    Hello, merci @bazooka07, j'intègrerai la pull request à la version 5.8.7.

    Concernant ton point sur l'indentation et le formatage sur la version 6.0, j'ai moi même le soucis quand je merge la 5.8 dans la 6.0. C'est lié au fait que j'avais commencé, sur la 6.0, à passer le code sur le standard PHP PSR-12 (qui, entre autre, remplace les tabulations par des espaces). Quand la 5.8.7 sera publiée, je formaterai en masse le code sur PSR-12.

  • bazooka07bazooka07 Member
    8 mai modifié

    Bonsoir,

    Je n'ai pas eu le temps aujourd'hui de finaliser la branche pour envoyer un pull-request. Je ferai cela dès que possible.
    D'autres pull-requests sont dignes d'intérêt pour être intégrés à la version 5.8.7 de PluXml :

    • plxShow-userList qui permet de gérer le cas où un blog est géré par plusieurs auteurs
    • PHPMailer a plusieurs dépendances qui dépendent de PHP >= 7.0 :
    foo@smartteck:/var/www/test/PluXml-5.8.7$ grep -i '"php"' core/vendor/*/*/composer.json 
    core/vendor/guzzlehttp/guzzle/composer.json:        "php": "^7.2.5 || ^8.0",
    core/vendor/guzzlehttp/promises/composer.json:        "php": ">=5.5"
    core/vendor/guzzlehttp/psr7/composer.json:        "php": ">=5.4.0",
    core/vendor/league/oauth2-client/composer.json:        "php": "^5.6 || ^7.0 || ^8.0",
    core/vendor/paragonie/random_compat/composer.json:    "php": ">= 7"
    core/vendor/phpmailer/phpmailer/composer.json:        "php": ">=5.5.0",
    core/vendor/psr/http-client/composer.json:        "php": "^7.0 || ^8.0",
    core/vendor/psr/http-message/composer.json:        "php": ">=5.3.0"
    core/vendor/ralouphie/getallheaders/composer.json:      "php": ">=5.6"
    

    Alors que PluXml sans PHPMailer tourne encore avec PHP 5.6 et donc chez Free.fr.
    Voir discussion suivante :
    https://forum.pluxml.org/discussion/comment/61880#Comment_61880

    • Il y a des soucis quand on veut imprimer un article ou le sauvegarder dans un fichier pdf. La branche style-default-print-21028

    Quant à PSR-12, cela apporte plus de soucis que d'améliorations :

    • il y a le mélange de tabulations et d'espaces qui complique beaucoup les "git rebase". Même avec l'option --ignore-whitespace
    • On se retrouve avec "public" sur une ligne et "function nom-de-la-fonction()" sur la ligne suivante
    • les tags "<?php" et "?>" ne sont plus systématiquement en début de ligne. ce qui casse le bon ordonnancement du code HTML dans la page générée.

    Il semble que l'éditeur utilisé pour formatter en PSR-12 ne soit pas bien au point.

    Autre souci :
    Sur Github, on se retrouve avec 3 branches officielles :

    • master
    • 5.8
    • 6.0

    La branche master devrait être la branche par défaut car elle suit la version officielle et prépare les corrections pour la version suivante.
    La branche 5.8 n'a aucune raison d'être. Il doit juste y avoir un tag sur la branche master à chaque publication officielle de PluXml
    La branche 6.0 devrait suivre la branche master pour intégrer les dernières modifications.

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