fonction plxGet

Pour faire les choses correctement, je choisis cette section du forum pour vous faire part d'une modification qui devient pour moi un automatisme quand je démarre un nouveau site, la toute simple ré-écriture de la méga-fonction plxShow pour la travestir sous la forme de plxGet. Vous aurez compris que l'exercice consiste essentiellement à remplacer quelques lignes qui commencent par "echo" et les remplacer par la fonction "return". Un petit ajout à l'index et le tout fonctionne. À noter que c'est souvent la seule modification nécessaire, je ne veux pas donner l'impression de passer mes grandes journées à modifier un produit aussi solide et fiable.

L'explication est un peu grossière mais les experts ont compris que je ne ré-invente pas la roue mais transforme des fonctions qui disent grosso modo "affiche-moi une suite de résultats" par "retourne-moi la même liste de résultats et je déciderai quoi en faire". Cette matrice de résultats devient une matière première qui est alors filtrée, triée et souvent comparée à une autre liste extraite de la même façon.

Mes amis "crochetistes" auraient vite fait de trouver une solution respectant cette discipline qui m'échappe, mais ma méthode a le mérite de répondre rapidement à des besoins qui reviennent à chacun de mes projets. Je démarre toujours avec une version brute toute neuve de Pluxml avec quelques plugins mais cette modification sous le capot arrive quelques heures (pour ne pas dire minutes) plus tard, à la première embûche.

Je confesse que beaucoup de mes situations épineuses viennent de mon refus d'utiliser le plugin "ChampArt" qui pourrait honnêtement ajouter ce niveau supplémentaire de traitement. Je préfère garder l'intégrité des fichiers d'articles, permettant même de réutiliser une base de catégories et d'articles d'un thème à l'autre. La seule exception est le plugin "Vignette" qui est carrément le premier ajouté quelques secondes après l'installation. Il est de mon avis que ce plugin ne devrait même plus en être un mais ça, c'est pour une prochaine aventure...

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Pierre

    Peux-tu me dire comment tu as implémenté tes modifs ?

    J'avais déjà un peu réfléchi à ce que tu décris, et j'en étais resté à faire une classe qui s’appellerait par exemple plxShowCore qui ne ferait que des returns et une classe dérivée, la fameuse plxShow qui ferait les echos.

    Le sujet est intéressant

    Consultant PluXml

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

  • En fait, la modification de la classe complète n'est même jamais nécessaire, c'est pourquoi mon réflexe a été de simplement sauvegarder le fichier plxShow au complet sous plxGet et ne faire que les changements dont j'ai besoin au fur et à mesure. Après avoir renommé la classe en entête de fichier pour ce nouveau nom, aucun conflit ne se pose avec plxShow qui fonctionne toujours dans les cas ou son résultat fait notre affaire. Par contre, si une fonction affiche "trop vite" quelque chose, il suffit très souvent de remplacer le echo par return, parfois avec une petite structure matricielle pour éviter la multiplication des appels.

    Si j'étais celui qui avait eu le culot et le courage de bâtir Pluxml, toutes mes fonctions produiraient des listes de id ou de résultats mais j'aurais laissé le codeur décider de ce qu'il en ferait. Mais bon, j'accepte mon ignorance devant les hook, les eval et les je-ne-sais-quoi-d'autres qu'on enseigne à l'école de sorcellerie.

    Dans ma religion de la simplicité d'esprit, la construction ressemblerait à:

    fonction qui génère une liste de id
    boucle effectuée sur chacun des items
    -opération effectuée sur l'item i de la boucle
    - test de résultat de mon opération précédente
    - si oui, affichage de quelque chose se rapportant à l'item
    fin de la boucle

    ça a le mérite de se comprendre, même par un auditoire qui n'y connaît pas grand chose. Je n'ai pas mes exemples sous la main mais je pourrai en fournir quelques-uns pour illustrer.
  • je comprends la demande et la trouve intéressante.
    Après faut savoir que plxShow n'est qu'une classe d'affichage

    artTags affiche la liste des mots-clefs sous un format personnalisé,
    mais du template on peut facilement appeler cette liste
    [== PHP ==]
    $tagList = $plxShow->plxMotor->plxRecord_arts->f('tags');
    

    J'imagine qu'un $plxGet->f('noeud'); serait plus simple et parlant ;)
    Quoiqu'il en soit il faudrait que cette class soit facilement accessible par plxPlugin
  • bonjour,

    @Pierre, peux-tu nous donner tes changements ?

    @Stéphane, est ce prévue pour les futures versions ?
    Je viens de WP et c'est vraie que c'est assez déroutant de ne pas avoir la possibilité d'avoir de get du titre, du corps et autre de l’article.

    J'ai pallié via de l'ob, mais ça fait pas très clean.
    par example pour un carrousel
    [== PHP ==]
    <?php
    ob_start();
    	$plxShow->lastArtList('<article><a href="#art_url" title="#art_title">#art_title</a></h2>#art_content(100)</article>',10,1); 
    	$article = ob_get_contents();
    	preg_match_all('#<article>(.*?)<\/article>#s', $article, $articles);
    ob_get_clean();
    		
    $num = 0;
    foreach ($articles[1] as $val) {
    	preg_match('/<img.*(src=[\"|\'].*?[\"|\'])/', $val, $photo);
    	preg_match('/<a.*title=[\"|\'](.*?)[\"|\']/', $val, $titre);
    	preg_match('/<a.*href=[\"|\'](.*?)[\"|\']/', $val, $link);
    	
    	if(empty($photo[1]))
    		continue;
    	?>
    	<div class="item <?php if ($num == 0) echo 'active'; ?>">
    		<a href="<?php echo $link[1]; ?>" title="<?php echo $titre[1]; ?>"><img <?php echo $photo[1];?>></a>
    	        <div class="container">
    			<div class="carousel-caption">
    				<?php echo $titre[1]; ?>
    			</div>
    		 </div>
    	</div>
    <?php
    $num++;
    }
    ?>
    

    A+
  • PierrePierre Member
    Au fil du temps j'ai tenté d'utiliser le core de plus en plus "clean" pour ne pas en prendre l'habitude. Ce genre de corrections sauvages issues de frustrations passagères devraient toujours être réduites au maximum. En plus, nos amis du forum peuvent presque toujours nous trouver des moyens d'arriver à nos fins sans jouer sous le capot. Parce qu'ils connaissent très bien les méthodes d'extraction et de constructions utilisées par PluXml, ils nous sortent du pétrin avec le core laissé intact.

    Mais, pour répondre à la question de "comment faire", c'est souvent aussi simple que de copier une fonction dans class.plx.show, la renommer quelque chose de facile et de remplacer les ECHO par des RETURN à l'intérieur de ladite fonction.

    Encore une fois, je recommande de n'utiliser qu'en dernier recours, c'est beaucoup mieux d'exposer son problème ici et quelqu'un va se faire un plaisir de nous épater.
Connectez-vous ou Inscrivez-vous pour répondre.