SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 238 visiteurs en ce moment

Accueil > Documentation > Tutoriaux pour le code de SPIP > Archives tutoriaux code SPIP > ccmCacheDeSquelettes

ccmCacheDeSquelettes

21 septembre 2005

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

comment ça marche : le cache de squelettes

Cette partie du code sert à trouver un fichier squelette source (sqS) et un squelette compilé associé (sqC). Cette partie n’est pas constituée d’un module à part entière mais est incluse au milieu de la fonction cherche_page. Un déplacement de quelques lignes du code serait bienvenue d’ailleurs, ça serait plus clair.

On commence par l’appel à chercher_squelette. Cette fonction est définie par défaut dans inc-chercher mais l’utilisateur peut la surcharger dans mes_fonctions afin d’utiliser son propre système d’organisation des squelettes. Cela peut être pratique, par exemple, si on veut changer de squelette en fonction d’autre chose que la rubrique et la langue (par exemple, pour personnaliser selon l’utilisateur connecté ou un cookie, ou la date du jour ;-)

  • appel de chercher_squelette :
    • La fonction cherche d’abord un fichier de même nom que le fond, avec l’extension html (ou plus exactement l’extension définie dans $extension_squelette, sauf que dans inc version, y’a marqué que ça marche pas, si qq’un peut confirmer ?).
    • Si elle n’en trouve pas, on ne cherche pas plus loin (ça signifie que si vous définissez une série de machin-idSecteur.html, il faut quand même un machin.html, même si personne ne l’utilise !).
    • On cherche ensuite s’il y a un fond=idRub, sinon un fond-idRub avec les id successifs de la rubrique et de ses parentes
    • enfin, s’il y a un fondqqchose.langue, il prend la place.
    • on retourne donc un nom de fichier à prendre comme sqS (sans l’extension)
  • appel de charger_squelette :
    • détermine le nom des fichiers sqS et sqC.
      • le sqS, c’est le fond trouvé (avec les éventuels -rub et .langue) suivi de l’extension
      • le sqC, c’est CACHE/skel_html_MD5 du nom du sqS sans extension.php
      • ce sqC doit définir une fonction nommée html_MD5 du nom du sqS sans extension
    • Si la fonction existe, c’est que le squelette à déjà été chargé. Dans ce cas, on retourne son nom.
    • sinon, si le sqC est invalidé (appel de squelette_obsolete) on essaye de le lire (lire_fichier)
      puis de l’évaluer (pourquoi pas via un include ?)
      • un sqC est obsolete s’il n’existe pas, si on a demandé le recalcul, s’il est plus vieux que le sqS ou plus vieux que mes_fonctions ou mes_options.
    • si on n’a toujours pas de fonction du nom attendu de définie, on lit le sqS puis le fichier _fonction de même nom (pour y définir des
      filtres particuliers par exemple).
    • si la fonction attendue existe, on retourne son nom (ce qui signifie qu’on peut définir manuellement la fonction principale d’un squelette,
      plutôt que de laisser le compilateur de squelettes la générer, why not ...).
    • appel de calculer_squelette : passe la main au compilateur de squelette
    • si la compil échoue, retour d’erreur
    • si la fonction n’existe toujours pas, idem
    • sinon, on retourne le nom de la fonction.

remarque : ça serait pas mal de réorganiser un minimum ce code, en concentrant la transformation fond -> fonction dans un fichier à part, quite à ce qu’il inclue lui même l’actuel inc-chercher. Comme cela, on pourrait plus facilement définir ses propres règles de recherche d’un squelette, mais aussi ses règles d’invalidation (par exemple pour recompiler un squelette quand on a changé certains meta globaux ou qu’on a ajouté un plugin (pour le jour ou il y aura un admin de plugins ;-) )

Plus généralement, certaines fonctions standard pourraient être encadrées d’un if(!function_exists) afin de pouvoir les surcharger plus facilement. Une variante consisterait à définir des classes php et à permettre de les surcharger en définissant quelque part le nom de la classe à utiliser pour telle ou telle fonctionnalité. Par exemple, on pourrait définir une classe [->[->[->CacheDeSquelette]]] et avoir dans les meta une entrée classe_cacheDeSquelette qui soit par défaut à [->[->[->CacheDeSquelette]]] mais qu’on puisse modifier en [->MonCacheDeSquelette], qui extends [->[->[->CacheDeSquelette]]] et redéfinit les morceaux qu’on veut personnaliser.
Grace à la possibilité d’appeler la fonction super, cela serait plus souple que des fonctions avant/apres comme c’est fait dans propre().

Bien sur, c’est pas rien comme chantier, mais si ça vous botte ... ;-)

Dernière modification de cette page le 17 octobre 2007

Retour en haut de la page

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Mailshot

    16 janvier 2013 – 254 commentaires

    Ce plugin prend en charge l’envoi en nombre d’info-lettres par email. Mailshot permet l’envoi en nombre d’emails au moyen d’un SMTP (ou d’un service externe) dédié à cet effet. Il permet de limiter la cadence d’envoi. Enfin, ce plugin implémente la (...)

  • bigfoot

    16 juin 2015 – 56 commentaires

    Un plugin qui facilite l’utilisation des notes de bas de page en les affichant dans des infobulles à l’aide d’un peu de javascript. Le constat de l’auteur du script : Les notes de bas de page sur le web sont une plaie. Tu dois d’abord essayer de (...)

  • SkelEditor 2.0

    1er mars 2010 – 74 commentaires

    La version remaniée et enrichie du plugin, pour SPIP 2.1, qui vous permet d’éditer votre squelette directement en ligne sans passer dans le FTP Ce plugin vous permet d’éditer les fichiers du squelette courant depuis l’interface privé. Cela peut (...)

  • CKeditor 3.0

    4 octobre 2009 – 1218 commentaires

    CKeditor est l’évolution de l’éditeur WYSIWYG : FCKeditor, avec ce plugin vous pourrez utiliser cet éditeur à la place de l’éditeur de spip tout en laissant le choix à vos auteurs de l’éditeur qu’ils préfèrent utiliser. Attention : cet éditeur WYSIWYG (...)

  • GIS 4

    11 août 2012 – 1344 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)