La documentation de code PHP avec phpDoc - UmanIT

parce que j'oublie toujours

/**

  • Résumé.
  • @var Décrit un attribut de classe
  • @author Vincent Robic
  • @copyright UmanIT
  • @deprecated Indique que l'élément décrit est déprécié et sera supprimé dans une prochaine version.
  • @param type $param Description
  • @return type Description
  • @see Fait référence à quelque chose.
  • @since Indique depuis quelle version l'élément est présent.
  • @throws SomeExceptionType
  • @todo Terminer cette fonction/méthode. */

How to Create a Simple PHP Templating Function - Daggerhart

Mouais... le templating, au départ, c'est plutôt pour séparer le code PHP du HTML (l'objectif étant de permettre de bosser à plusieurs avec chacun sa spécialité sans se parasiter, déjà)

Du coup, je vois pas trop en quoi c'est du templating: ce sont des fichiers php avec des bouts de php dedans.

Pour y avoir réfléchi pas mal afin d'améliorer mon code, notamment dans mon «framework» perso, l'idée du templating est d'avoir des fichiers HTML que le PHP vient compléter selon une certaine logique, qui varie en fonction des frameworks.

Pour ma part, j'ai opté pour des fichiers HTML contenant des «balises» entre double accolades dont le contenu sera interprété selon certaines règles par la classe template:

  • {{$variable}} ou {{CONSTANTE}} : affiche le contenu de la variable ou de la constante
  • {{"texte"}} : affiche le texte si possible traduit (en fonction de la configuration de langue d'une autre classe si elle existe dans le projet)
  • {{objet->methode(parametres)}} : fait appel à la méthode en question si celle-ci est publique et que l'objet fait partie des dépendances injectées via une variable de contexte.

On peut également transmettre des données ponctuelles servant à «remplir» le template via un array passé en paramètre selon le principe "string_à_remplacer"=>"valeur".

... et c'est tout.

ça donne des fichiers tpl du genre:


header.html

<!DOCTYPE html> <html> <head> <title>{{APP_NAME}} - {{CURRENT_PAGE}}</title> <link rel="stylesheet" type="text/css" href="http://warriordudimanche.net/{{APP_CSS}}style.css"> <link rel="icon" type="image/svg" href="http://warriordudimanche.net/{{APP_IMG}}favicon.svg"> <link rel="favicon" type="image/svg" href="http://warriordudimanche.net/{{APP_IMG}}favicon.svg">

</head>

<body class="{{CURRENT_PAGE}} {{app->isMultiple()}}" id="top"> {{this->render('menu')}} <main>

menu.html

<nav class="classe{{CURRENT_PAGE}}"> <li><a href="http://warriordudimanche.net/?p=home">{{"Accueil"}}</a></li> <li><a href="http://warriordudimanche.net/?p=5eme">5eme</a></li> <li><a href="http://warriordudimanche.net/?p=4eme">4eme</a></li> <li><a href="http://warriordudimanche.net/?p=3eme">3eme</a></li> <li><a href="http://warriordudimanche.net/?p=fiches">{{"Fiches"}}</a></li>
<li><a href="http://warriordudimanche.net/tag/php#" id="fullscreen" >Plein écran</a></li>
</nav>

on voit que le template header.html appelle à son tour le template menu, ce qui permet d'avoir des templates imbriqués et donc une grande «réusabilité» de chaque élément.

Le templating permet également d'éviter la dispersion du code PHP: quand on place des bouts de trucs et de machins partout ça devient vite illisible (et j'en sais quelque-chose). Le templating te force à organiser l'ensemble selon une logique qui te permet de t'y retrouver (et de retrouver où ça couille quand ça couille) (et ça couille toujours) (en fait, ça couille de source)( gag)

Souvent  mon code est devenu tellement illisible à force de patcher à la scie sauteuse entre deux portes que je préfère tout reprendre du début .jpg

 Répéter  couille plusieurs fois d affilée gratuitement  check  .jpg

Je ne m'étends pas davantage dessus vu qu'on peut trouver plein de ressources sur le templating en PHP et que pour en dire plus, il faudrait que je m'étende davantage sur mon «framework»

Via https://nicolas-delsaux.hd.free.fr/Shaarli/?_D5cZQ

PHP: preg_split - Manual

OMAGAD Il existe une fonction comme explode mais qui utilise les regex : preg_split !


// scinde la phrase grâce aux virgules et espacements
// ce qui inclus les " ", \r, \t, \n et \f
$keywords = preg_split("/[\s,]+/", "langage hypertexte, programmation");
print_r($keywords);
// retour:
Array
(
    [0] => langage
    [1] => hypertexte
    [2] => programmation
)

et peut même renvoyer la position de chaque morceau dans la chaîne d'origine:


$str = 'langage hypertexte, programmation';
$chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
// retour:
Array
(
    [0] => Array
        (
            [0] => langage
            [1] => 0
        )
[1] => Array
    (
        [0] => hypertexte,
        [1] => 8
    )

[2] => Array
    (
        [0] => programmation
        [1] => 20
    )

)

... voire même virer automatiquement les chaînes vides avec le flag PREG_SPLIT_NO_EMPTY

Reste plus qu'à benchmarquer pour voir si c'est pas trop gourmand par rapport à explode.

Googol v3.0: ya encore des fils qui pendent...

Je tiens au courant les quelques uns qui utilisent googol sur l'avancement des travaux.

J'ai entièrement refait la structure en abandonnant l'aspect «one file» au profit d'une répartition plus ... académique et surtout plus lisible.

En restructurant le tout, j'ai prévu l'implémentation future de solutions de fallback lors des bannissements par google (par exemple en allant interroger framabee.org pour récupérer temporairement les résultats en attendant que google nous oublie)

Je réfléchis encore à une solution permettant de «distribuer» les nouvelles regexes en cas de changement de la part de google... sans succès pour le moment.

J'ai ajouté des liens pour renvoyer la requête vers les moteurs de recherche alternatifs.

A vous de tester, là j'ai pas le temps de faire plus long http://googol.warriordudimanche.net/

Bisous !

Googol, des hoooo et des Bahhh...

Certains peuvent s'interroger sur le fait que googol cesse parfois tout bonnement de fonctionner... Et bien c'est simplement dû au fait que Google transforme sa page. Parfois complètement. Du coup la regex de parsage ne fait plus son taf. Mais quand il faut cibler des données sur leur page, faut voir à quoi on se heurte:


 <div class="ZINbbc xpd O9g5cc uUPGi">
   <div>
    <div class="jfp3ef">
     <a href="https://google.fr/url?q=https://trendy.letudiant.fr/tests-et-quiz.html&sa=U&ved=2ahUKEwjSntHNjsbiAhVCA4gKHWpRARwQFjAGegQIZBAB&usg=AOvVaw2mXT_9o0gy-P8Mb8zpR-pZ">
      <div class="BNeawe vvjwJb AP7Wnd">
       500 tests et quizz gratuits en ligne : personnalité, psycho et culture ...
      </div>
      <div class="BNeawe UPmit AP7Wnd">
       https://trendy.letudiant.fr › tests-et-quiz
      </div></a>
    </div>
    <div class="NJM3tb"></div>
    <div class="jfp3ef">
     <div>
      <div class="BNeawe s3v9rd AP7Wnd">
       <div>
        <div>
         <div class="BNeawe s3v9rd AP7Wnd">
          Psycho, sexo, love : tous nos tests et quiz pour en découvrir plus sur ta personnalité !
         </div>
        </div>
       </div>
      </div>
     </div>
    </div>
   </div>
  </div>

C'est pas beau ces noms de classe ? Ça sent les classes aléatoires dont les noms sont générés en début de session, ou bien je suis parano ?!

Pour cibler ça, surtout de façon pérenne, bonjour.

J'ai réfléchi à la solution d'un parseur xml mais bon:

  1. lesdits parseurs se foutent en PLS quand on leur file à bouffer une page google
  2. ce sera fatalement moins rapide et moins concis qu'avec une bonne regex bien faite (qui renvoie des données presqu'immédiatement utilisables)
  3. ça ne résoudra pas le problème de changement de contenu de la page.

    parseur et google

    Donc, je réfléchis à une alternative viable qui évite de remplacer l'url en dur dans le code... un fichier ini, peut-être ? En même temps, une fois sur deux changer la regex ne suffit pas, il y a une ou deux retouches de code à faire...

Et là, je vous parle même pas de la page images dans laquelle les liens vers les images semblent ... avoir disparu.

fontchier

[EDIT] Pour les images, ils utilisent de l'ajax, ce qui explique la disparition des images «en dur» exemple de requête (attention, ça pique): www.google.fr/async/imgrc?ei=YVTxXIPULPWj1fAP0Z-EwAM&hl=fr&yv=3&iact=rc&ved=0ahUKEwjDiMGulsbiAhX1URUIHdEPATgQMwhOKAMwAw&vet=10ahUKEwjDiMGulsbiAhX1URUIHdEPATgQMwhOKAMwAw..i&imgrt=0&q=test&imgurl=https://www.uhs.umich.edu/files/uhs/field/image/TEST.jpg&imgrefurl=https://www.uhs.umich.edu/testanxiety&tbnid=_Kh4MPtGrJjSRM:&docid=j4YSDljFZKmg5M&uact=3&ictx=1&csi=VJS.0,VOS.5&ri=3&bih=747&biw=1600&imgdii=_Kh4MPtGrJjSRM:&tbm=isch&tbs=&imgwo=1526&land=1&async=cidx:0,saved:0,iu:0,lp:0,_fmt:prog,_id:irc_imgrc0

Voilà... Je vais devoir me lancer dans de l'ajax... tant qu'à faire, je vais reprendre un peu le code et l'améliorer.

alt

Fil RSS des articles