[Plugin] plxNbArt : afficher le nombre d'articles publiés par l'auteur

Bonjour à tous,


Je viens ici vous présenter mon premier plugin que j'ai développé pour pluXML ! Bon, vous allez voir, c'est tout rikiki, mais j'en avais besoin, du coup je le partage avec vous.


Le plugin permet tout simplement de connaitre le nombre d'articles publiés pour un auteur donné.



Pour utiliser le plugin, c'est simple, il suffit de placer ce code dans le code PHP de la page, à l'endroit où l'on veut voir apparaître le nombre d'articles rédigés par l'auteur :

[== PHP ==]
<?php eval($plxShow->callHook('NbArt', '001')) ?>

Dans cet exemple, on affichera le nombre d'articles publiés par l'auteur dont l'ID est '001'. Le plugin n'affiche que les articles publiés, donc pas les brouillons, ni les articles en attente de validation.


Ce plugin est téléchargeable à cette adresse : http://rock-anecdotes.fr/static5/plxnbart


N'hésitez pas à commenter, si vous pensez que le code est améliorable, ou si d'autres fonctionnalités peuvent venir améliorer ce plugin !


Thibaut

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut Tibawbaw


    Je vois deux problèmes avec ta fonction NbArt:


    1) le chemin codé en dur 'data/articles', qui peut être différent selon les utilisateurs car cela se paramètre dans l'admin. Il faut donc faire référence à $plxMotor->aConf pour être juste à tous les coups.


    2) Perso, j'excluerais les articles rédigés dans une catégorie inactive si on affiche le nombre d'articles coté visiteurs.


    Ma version de la fonction NbArt serait donc
    	public function NbArt ($IDAuteur) {
    	
    		$plxMotor = plxMotor::getInstance();
    		$plxGlob_arts = clone($plxMotor->plxGlob_arts);
    		$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$plxMotor->activeCats.'|home)(?:[0-9]|home|,)*).'.$IDAuteur.'.(.*).xml$/'; # Motif de recherche
    		if($aFiles = $plxGlob_arts->query($motif, 'art', 'sort', 0, false, 'before'))
    			echo sizeof($aFiles);
    		else
    			echo 0;
    		
    	}
    
    

    Voilà :)

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Ah ah, t'es trop fort ^^ Bon, bah j'ai plus qu'à copier coller ton code, et changer le nom de l'auteur, et puis c'est bon :D
  • C'est étrange, j'ai 4 auteurs : ta méthode marche pour les 3 premiers, mais pas pour le 4e ^^ Je vais essayer de voir ce qui cloche (c'est peut être de mon côté...)
  • StéphaneStéphane Member, Former PluXml Project Manager
    j'ai fait une modif car cela prenait en compte les articles avec une date future de publication
    if($aFiles = $plxGlob_arts->query($motif, 'art', 'sort', 0, false, 'before'))
    
    

    edit: oubli du paramètre 'sort'

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Avec ta dernière modif, ça me met 0 article pour tous les rédacteurs ^^
  • StéphaneStéphane Member, Former PluXml Project Manager
    oups j'ai oublié de recopier un paramètre
    if($aFiles = $plxGlob_arts->query($motif, 'art', 'sort', 0, false, 'before'))
    
    Voilà

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Oui, c'était ce que je venais de voir, tu m'as grillé de 20 secondes ^^
  • J'ai toujours un problème : un auteur avec 3 articles (parus, aucun article en brouillon, approbation, ou publication future) se retrouve avec 10 articles quand j'appelle la fonction. Pour les 3 autres auteurs, le compte est bon... C'est étrange !
  • Stéphane, je crois qu'il y a une erreur dans la construction de ton motif...


    J'ai un utilisateur pour qui ça merde (mon utilisateur 006), ça m'affiche des articles qui ne lui correspondent pas... Mais qui appartiennent à la catégorie 006 !


    Exemple des noms de fichiers qui sont récupérés pour cet utilisateur :


    0001.014,006.001.201302211238.lucy-l-australopitheque.xml
    0003.029,006.001.201302220948.y-a-t-il-un-pilote-dans-l-avion.xml
    0007.017,006.001.201302252216.7-status-quo-et-le-kangourou-a-lunettes.xml
    0008.013,018,020,006.001.201302261749.8-les-intellos-du-rock.xml


    Et il y en a 12 comme ça ! Je suppose que ça prend en compte le "006" qui se trouve derrière la virgule au lieu de prendre le "001" juste après... Mais j'ai un peu de mal à comprendre la construction du motif... Je vais chercher de mon côté, mais si tu as une idée... !
  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut
    Effectivement le problème vient du motif car l'id de l'auteur est identique à un id d'une catégorie.
    Je n'ai pas de solution pour le moment.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • J'ai mis à jour en une version 1.1, dans laquelle je gère l'emplacement réel des articles ainsi que la date de publication (mais pas encore les catégories inactives !) :


    http://rock-anecdotes.fr/static5/plxnbart


    ## Version 1.0 (15/04/2013) ##

    - Version initiale


    ## Version 1.1 (18/04/2013) ##

    - Répertoire des articles comme configuré par l'utilisateur (était codé en dur dans la version 1.0)
    - Exclusion des articles dont la date de publication est postérieure à la date actuelle
  • StéphaneStéphane Member, Former PluXml Project Manager
    Hello
    Par rapport à mon post #2, peux-tu essayer avec ce motif stp
    		$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$plxMotor->activeCats.'|home)(?:[0-9]|home|,)*)\.'.$IDAuteur.'\.(.*).xml$/'; # Motif de recherche
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Jerry WhamJerry Wham Member
    avril 2013 modifié
    Stéphane a écrit:
    Hello
    Par rapport à mon post #2, peux-tu essayer avec ce motif stp
    		$motif = '/^[0-9]{4}.((?:[0-9]|home|,)*(?:'.$plxMotor->activeCats.'|home)(?:[0-9]|home|,)*)\.'.$IDAuteur.'\.(.*).xml$/'; # Motif de recherche
    

    Je viens de tester et ça fonctionne. Le motif prend bien en compte si les articles appartiennent aux catégories actives. L'id de l'auteur est également respecté même s'il est égal à celui d'une catégorie.

    Je pense que le else echo 0 n'est pas nécessaire à la fin de la méthode et que l'on pourrait ajouter le nom de l'auteur avant le nombre d'articles en faisant :
    echo 'Nombre d\'articles de l\'auteur '.$plxMotor->aUsers[$IDAuteur]['name'].' : '.sizeof($aFiles);
    

    L'idéal serait d'avoir un fichier lang pour la traduction de "Nombre d\'articles de l\'auteur".
  • Ca marche pour moi aussi !

    Personnellement, je gèrerais l'affichage du "Nombre d'articles de l'auteur" dans le thème, le plugin ne retournant que le nombre d'articles. En gérant le multilangue avec la fonction directement disponible dans PluXML non ? Comme ça, ça évite d'obliger l'utilisateur à utiliser la phrase "Nombre d'articles de l'auteur" (par exemple, moi j'affiche "Nombre d'anecdotes", s'il faut à chaque fois aller bidouiller dans le code du plugin, c'est pas top, surtout s'il y a des mises à jour).


    Après on pourrait imaginer une page de configuration pour savoir quel phrase il faut afficher, et gérer en plus le cas où il n'y a aucun article, un seul article, plusieurs articles... Ca sera peut-être dans une prochaine mise à jour ;-)


    En tout cas, merci à Stéphane, encore du super boulot, super réactif !
  • StéphaneStéphane Member, Former PluXml Project Manager
    Si, il faut le echo 0, pace que s'il n'y aucun article sizeof va te retourner 1, et donc tu vas afficher qu'il y a 1 articles ce qui est faux

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Jerry WhamJerry Wham Member
    avril 2013 modifié
    Tibawbaw a écrit:
    Ca marche pour moi aussi !

    Personnellement, je gèrerais l'affichage du "Nombre d'articles de l'auteur" dans le thème, le plugin ne retournant que le nombre d'articles. En gérant le multilangue avec la fonction directement disponible dans PluXML non ? Comme ça, ça évite d'obliger l'utilisateur à utiliser la phrase "Nombre d'articles de l'auteur" (par exemple, moi j'affiche "Nombre d'anecdotes", s'il faut à chaque fois aller bidouiller dans le code du plugin, c'est pas top, surtout s'il y a des mises à jour).

    Ok, ça se tient.
    Stéphane a écrit:
    Si, il faut le echo 0, pace que s'il n'y aucun article sizeof va te retourner 1, et donc tu vas afficher qu'il y a 1 articles ce qui est faux

    Oui mais non. La condition se fait sur le fait que la query retourne true ou false. Donc si le motif ne correspond pas, le if retourne false et donc c'est le else qui est interprété. Le sizeof n'est pas lu.

    S'il n'y a pas le else, le script saute simplement ce qui suit le if. Et donc là aussi sizeof n'est pas interprété. Et donc rien n'est affiché.

    Après, le fait de ne rien afficher dépend de comment on souhaite gérer l'affichage : comme Tibawbaw (la phrase dans le thème), et là le echo 0 est nécessaire, ou comme moi (la phrase dans le plugin) et là le else est de trop.
  • Sur la page d'un article, est-il possible de récupérer de façon dynamique le id de l'auteur de l'article ? Car sur chaque page d'article, j'ai un petit encadré avec une photo de l'auteur, son nom, sa description et un lien vers les articles qu'il a publié. Je veux utiliser le plugin pour dynamiser le lien pour avoir quelque chose qui ressemble à ça : «bdube30 - 12 articles».

    J'ai regardé dans la documentation de pluxml, mais j'ai rien trouvé. J'ai aussi regardé dans quelques fichiers du core de pluxml pour trouvé une référence à l'id d'un auteur, mais je ne suis pas assez bon en PHP pour m'y retrouver.

    Merci,

    Benjamin
  • StéphaneStéphane Member, Former PluXml Project Manager
    @bdube30
    $plxMotor->plxRecord_arts->f('author')
    
    et pour connaitre son nom
    $plxMotor->aUsers[$plxMotor->plxRecord_arts->f('author')]['name'])
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Merci Stéphane :)
Connectez-vous ou Inscrivez-vous pour répondre.