Carnet Wiki

Astuces SPIP

Version 62 — Mai 2011 denisb

---- opérateur ou

----

UTF8

- Convertir sa base en UTF-8 :

- convertir sa base en UTF-8  :
_
À utiliser pour une recherche alphabétique exacte ou pour avoir une jolie base dans PHPMyadmin. Passer par un code caché  ;) < code > ? Passer par un code caché :

?exec=convert_sql_utf8&lt;/code>  >}}
  pour convertir sa base en UTF-8 (&#91;-> ,  vraiment  !  http://archives . (&#91;-> http://archives.rezo.net/archives/spip-dev.mbox/DOMZDGTKPJ5IKEQI7MZXZ3APF35ZM3I3/])
<quote>
plutôt utiliser le critère {{<code>{collecte...}

. À voir sur le [glossaire de spip.net->http://www.spip . ) net/fr_article4028.html]

</blockquote>

----

<blockquote class="spip">

bah bah bah...
plutôt utiliser le critère {collecte...}. À voir sur le glossaire de spip.net

</blockquote>

----

PLUGINS

- Trouver si un plugin est là (dialogue via irc) :

- dites moi, vous avez une idée pour trouver si un plugin est là ? (dialogue via irc) :

  <marcimat>  1.2 ou 1.9.3, php ou squelette ?
  &lt;touti >      dans un squelette 1.9.9.2  : 2c  &lt;code>&#91;(#EVAL{DIR_PLUGIN_PREFIX marcimat >   &#91;(#EVAL{DIR_PLUGIN_PREFIX }|?{' ',”}) Mon action ]
   <marcimat>  ou _DIR...
  <touti>     arf, et en php ?...
  }
  <touti>     génial merci
  <marcimat>  pour 1.9.2
  <marcimat>  en 1.9.3, c'est un poil simplifié tout ça
  <touti>     ah?
  &lt;/code &lt;marcimat >
_  depuis  SPIP  2  :  &lt; code>&#91;(#PLUGIN{XXX &#91;(#PLUGIN{XXX }) Mon action ]
 &lt;/code &lt;marcimat >
_  en  php  :  &lt; code>if if  (defined('_DIR_PLUGIN_XXX')){ ... }&lt;/code &lt;/code >


- {{Récupérer le chemin d'un plugin dans un squelette}} :


&lt;code -  Pour  récupérer  le  chemin  d'un  plugin  dans  un  squelette  :&lt; code >
#SET{cheminmonplugin, #EVAL{_DIR_PLUGIN_MONPLUGIN}}
#GET{cheminmonplugin}

----

----

CSS

- Pipeline automatique de CSS dans un plugin :

- Pipeline automatique de css dans un plugin  :
_
style_public_plugin_xxx.html
_
et, pour l’espace privé :
_
prive/style_prive_plugin_xxx.htmlhtml
seront prises en compte automatiquement par SPIP

- Faire un CSS qui soit un squelette (cela permet de récupérer des variables) :

<code - Faire un CSS qui soit un squelette ( cela permet de récupérer des variables )  :<code >
[(#REM) dans la page monstyle.html et en première ligne ]
#HTTP_HEADER’Content-Type : text/css’
.couleurdefond
background-color:green ;
[(#ENVid_article|=33| ?background-color:pink ;)]


Appeler la CSS dans une page SPIP

[(#REM) dans la page article.html par exemple cela retournera /?page=styles&id_article=33]
<link rel="stylesheet" type="text/css" href="[(#URL_PAGE{monstyle}|parametre_url{id_article,[(#ENV{id_article})] )]" />
...
<div class="couleurdefond">
change ici la couleur de fond en rose si article=33
</div>

----

----

BALISES

Quand on crée une balise, on peut vouloir récupérer des variables du contexte (il y a un article déjà sur contrib qui explique cela) ; mais quand on veut trouver le «  type  » type de boucle du contexte, il faut aller le chercher dans la pile $p :

$p->boucles[$p->id_boucle]->id_table

----

----

FILTRES

- Utiliser |textebrut pour compter la chaine correctement, sinon l’apostrophe compte 5 :

- Utiliser textebrut pour compter la chaine correctement, sinon l’apostrophe compte 5, ça par exemple !
<code >
<cadre class=’spip ’>
[(#TITRE|textebrut|strlen|>30

et[(#TITRE textebrut strlen <60)] oui)
[(#INTRODUCTION
PtoBR couper85)]
]
</code </cadre >

Donc pour ces besoins, on utilisera un « unique nommé », avec un nom généré dynamiquement de manière ... unique à chaque fois.

#SET{ident, #REM|uniquid}

-
|unique&lt;/code puis  utiliser  &lt; code > |unique{#GET{ident}}&lt;/code > dans  un  modèle}}  : 


-  {{|unique  dans  un  modèle}} 
_   Un modèle inséré dans un texte ne peut pas  simplement appeler le filtre &lt; code>|unique&lt;/code >   | unique  car il arrive que SPIP  spip  calcule plusieurs fois le  #TEXTE ( ,  par exemple pour les besoins de #INTRODUCTION)  ,  et l'environnement de &lt; code>|unique&lt;/code >   | unique  n'est pas réinitialisé à chaque fois...
_ Pour ces besoins, on utilisera un  «unique nommé», avec un nom généré dynamiquement de manière ... unique à chaque fois : <code>#SET{ident, #REM|uniquid}

 ; puis utiliser |unique{#GET{ident}}.

- Utiliser < un < code>

replace</code> > pour créer l’équivalent d’un sprintf sprintf
_
dans la définition d’un #SET utilisé dans une
_
boucle itérateurs (_fil_ et BoOz sur irc) :
#SET{req, #VAL{"
  SELECT a.truc_1,
         s.truc_2,
         s.truc_x
    FROM spip_matable s,
         spip_auteurs a
   WHERE a.id_auteur = s.id_auteur
     AND date_format(s.truc_x, '%Y %m %d') = '%s'
ORDER BY s.truc_x desc
   LIMIT , 100
"}|replace{'%s', #ENV{ladate}}}


<BOUCLE_rech(DATA) {source sql, #GET{req}}>
  ...



----

</code >
----

CRITÈRES



- Critère Critère conditionnel, sans parenthèses ni crochets, , seulement des bisoux, euh, des accolades...  :

<BOUCLE_seulement_pour_la_rubrique_dix(RUBRIQUES) {id_rubrique=#ID_RUBRIQUE|=={10}|?{10}}>
   Mon code ....
</BOUCLE_seulement_pour_la_rubrique_dix>



- Afficher Afficher les articles ayant le mot clef «  truc  »  :
<code truc  :< code >
<BOUCLE_g(ARTICLES <BOUCLE_articles(ARTICLES ) titre_mot=truc>
#TITRE
</BOUCLE_g BOUCLE_articles >

<blockquote class="spip">


{titre_mot}&lt;/code >  étant  {{obsolète}}   on  peut  écrit  désormais  :&lt; code >
 &lt;BOUCLE_g(ARTICLES )  {mots . ! OUPS <code>{titre_mot}

étant obsolète on peut désormais écrire :

&lt;BOUCLE_G(ARTICLES) {mots.titre}>


</blockquote>



- Le Le critère {par multi titre} permet de trier les titres alphabétiquement alphabétiquement quand ils utilisent la balise multi pour le multilinguisme.

- Le critère {fusion} permet de faire un « GROUPBY » :

- Le critère {fusion} permet de faire un GROUPBY ; exemple sur un fil RSS, pour éviter des articles de même nom, on peut faire :

<BOUCLE_syndic(SYNDIC_ARTICLES) {fusion titre} {0, 10}>



exemple sur un fil RSS , pour éviter des articles de même nom , on peut faire  :< code >
<BOUCLE_syndic(SYNDIC_ARTICLES ) fusion titre 0 , 10 >
</code >
On peut également faire une fusion pour avoir les articles tous issus de sites différents :

<BOUCLE_syndic(SYNDIC_ARTICLES) {fusion syndic_articles.id_syndic}>



- Un Un simple {statut?} dans une boucle annule la restriction de statut statut sur la boucle document (comme sur une boucle article), on peut aussi demander {statut=prepa}

- Utiliser un critère optionnel, et demander le critère via l’url :

<code - Utiliser un critère optionnel , et demander le critère via l’url  :< code >



- N’afficher que les articles dont le « num titre » est pair :

- n’afficher que les articles dont le num titre est pair ( ou impair )  :
_ on considère que tous les titres des articles sont préfixés avec un nombre suivi d’un point suivi d’un espace (« 123. Le titre ») :

<BOUCLE_art_pair(ARTICLES) {par num titre} {titre==^[[:digit:]]*[02468][.][[:space:]]} {"<br />"}>
#TITRE
</BOUCLE_art_pair>
<hr>
<BOUCLE_art_impair(ARTICLES) {par num titre} {titre==^[[:digit:]]*[13579][.][[:space:]]} {"<br />"}>
#TITRE
</BOUCLE_art_impair>



[form_crit_opt<-]

-  un un formulaire simple (pas cvt) qui boucle sur la page et y renseigne un critère de boucle
_
par exemple un < code>select</code > de boucle
 : mots-clefs (< code>name=« avec_mot »</code >) dont chaque < code>value</code > est un id_mot mais avec une option tous les mots

par exemple un select de mots-clefs (name="avec_mot") dont chaque value est un « id_mot » mais avec une option « tous les mots »

la boucle ARTICLES correspondante (au retour du formulaire) utilisera donc le critère {id_mot ...}.

mais comment ? puisque la boucle doit retourner les articles liés soit à un id_mot unique soit à n’importe quel id_mot

pour la boucle on utilisera les REGEXP de mysql avec comme critère :

   {id_mot == ^#ENV{avec_mot}$}

dans le select, on passera comme value pour l’option ’tous les mots’
 :

pour un formulaire en method get :

   <option value=".%2B">tous les mots</option>

pour un formulaire en method post :

   <option value=".+">tous les mots</option>

[exclu_flv<-]

-  Afficher nous voulons afficher les articles «  sauf  » sauf ceux qui ont un flash dans le corps de leur texte  : texte

on travaille en 2 boucles. la première va extraire les id_articles depuis la table spip_documents_liens des articles (objet) liés à un document (id_document) inséré dans le corps du texte (vu) et d’extension .flv :

#SET{noflash, #ARRAY}
<BOUCLE_noflash(spip_documents_liens) {objet = article} {vu = oui} {spip_documents.extension = flv}>
#SET{noflash, #GET{noflash}|push{#ID_OBJET}}
</BOUCLE_noflash>


la seconde boucle exclue ces articles (!IN) de sa recherche :

<BOUCLE_a(ARTICLES) {id_article !IN #GET{noflash}} {"<br />"}>
#TITRE
</BOUCLE_a>



[pos_crit<-]

-  N’afficher que les articles dont le surtitre contient la lettre « x » à une certaine position, position fournie dans une variable d’environnement (par exemple, passée en url).


[pos_crit<-]
- nous voudrions n’afficher que les articles dont le surtitre contient la lettre « x » à une certaine position, position fournie dans une variable d’environnement (par exemple, passée en url).
SPIP _ spip ne permettant pas d’utiliser la fonction « SUBSTRING » de mysql comme critère de boucle, nous utiliserons les expressions régulières (REGEXP) de mysql.

tout d’abord, construire la regexp :

#SET{reg, #VAL{.}|str_repeat{#ENV{position}|moins{1}}}


deux cas de figure :

  • si la position où rechercher la lettre « x » est 1 (c’est à dire au début du surtitre) ; la regexp sera vide «   »
  • si la position n’est pas 1, par exemple si #ENV{position} est égale à 4, nous aurons « ... »



il ne reste plus qu’à écrire le critère de boucle en ajoutant ^  commence par ») et le x final :

<BOUCLE_p(ARTICLES) {surtitre == ^#GET{reg}x}>
  #SURTITRE  -- (x en #ENV{position}e position)
  ...



----

MES_OPTIONS



----

MES_OPTIONS


Dans config/mes_options.php

- Éviter Pour éviter de voir les numéros ou les balises multis des titres dans l’espace privé privé (par exemple sur médiathèque)  :
<code >
<cadre class=’spip ’>
$table_des_traitements[’TITRE’][] = test_espace_prive() ? ’typo(%s)’ : ’typo(supprimer_numero(%s))’ ;
</code </cadre >

- Changer Changer la qualité par défaut de compression jpg  : jpg
<code >
cadre class=’spip ’>
define(’_IMG_GD_QUALITE’, 95) ;
</code </cadre >

- En En local, interdire le compactage des js et css dans le privé, , et tout envoi de mails par facteur
<code >
cadre class=’spip ’>
if ($_SERVER[« HTTP_HOST »] == « 127...1 »)
define(’_INTERDIRE_COMPACTE_HEAD ’, true define(’_INTERDIRE_COMPACTE_HEAD’,true ) ;
define(’_TEST_EMAIL_DEST’, ’’) ; // Facteur n’envoie jamais rien
rien

</code cadre >----

SQUELETTES



----

SQUELETTES



- Utiliser le filtre |ou :

<code >
<cadre class=’spip ’>
[(#ENVid_article

ou#ENVid_rubrique ou#ENVid_article ou#ENVid_breve
) alors afficher ce texte ]
</code </cadre >

- Variable -Variable dans une chaine de langue en squelettes  : squelettes
<code >
<:ma_chainenom=Charles code><:ma_chainenom=Charles Martin, age=37 :> permet de passer deux paramètres 'ma_chaine'=>"Bonjour, je suis @nom@ et j'ai @age@ ans".
-  Variable dans une chaine de langue en php , utilisé par le plugin medias
"._T("medias:erreurs_voir",array('nb'=>count($erreurs))).&lt;/code "&lt;/code >


- {{Variable dans une chaine de langue en php}} (utilisé par le plugin medias) :
<code>
"._T("medias:erreurs_voir", array('nb'=>count($erreurs)))"



- Des chaînes de langue dynamiques :

dans un fichier de langue nous avons :

'chaine_a' => 'traduction un',
'chaine_b' => 'traduction deux',
'chaine_c' => 'traduction trois',
...


dans le squelette, <:prefixe:chaine_#VARIABLE:> ne fonctionnera pas. Il faut alors utiliser :[(#VAL{prefixe:chaine_#VARIABLE}|_T)] qui affichera la bonne traduction en fonction de la valeur de #VARIABLE.

- Le calendrier ICAL ne fonctionne pas ? Assurez-vous Assurez vous dans le fichier généré que la première ligne n’est pas vide ! Pour ma part la ligne 1 est devenue #HTTP_HEADER{Content-Type: text/calendar; charset:#CHARSET}BEGIN:VCALENDAR

- Remplaçer «  lire Remplaçer lire la suite  » suite par «  autre chose  »  :
<code autre chose  :< code >
[(#TEXTE

couper110, autre chose ...)]


- Une Une syntaxeplus jolie (à partir de SPIP avec spip 2) pour tester l’existence d’un élément  :
<
élément  :< code>
[(#PLUGINABONNEMENT
oui)
#INCLUREfond=inc/menu_abonnement]
[(#PLUGINABONNEMENT
non)
#INCLUREfond=prive/menu_inscription2]


- Le critère {ajax} permet de recharger uniquement le morceau de noisette appellé :

- Le critère < code>ajax</code > permet de recharger uniquement le morceau de noisette appellé  ; utilisé en SPIP 2 avec pagination :
&lt;INCLURE{fond=inc-manoisette ,  ajax &lt;INCLURE{fond=inc-manoisette}   {ajax }>



Mais comment faire fonctionner le callback ? et hop :

$(document).ready(function() {
  var fonction_a_rappeler=function fonction_a_rappeller=function () {
    ...
  }
  if (typeof onAjaxLoad == 'function') onAjaxLoad(fonction_a_rappeller);
  if (window.jQuery) jQuery(document).ready(function() {
    fonction_a_rappeler fonction_a_rappeller .apply(document);
  });
});



- Empêcher l’apparition des boutons de recalcul sur une page en particulier :

- Empêcher l’apparition des boutons de recalcul sur une page en particulier ( à plaçer sur la première ligne première ligne du squelette)  :

&#91;(#HTTP_HEADER{Content-type :&lt;code >
 &#91;(#HTTP_HEADER{Content-type : text/html[; charset=(#CHARSET)]})]

(voir voir http://www.spip.net/fr_article4631....).

- Se servir de #VAL :

- Se servir de < code>#VAL</code > par exemple pour < code>

image_typo</code > image_typo cela donnerait une image (avec la police victor.ttf) du mot «  Actuellement  »  :<code Actuellement  :< code >
[(#VALActuellement
image_typopolice=Victor.ttf, taille=14, largeur=150)]


- Tester Tester les autorisations d’écriture ou de modification d’un auteur auteur (à partir de SPIP 2 )  :
<code >
[(#AUTORISERmodifier , article , #ENVid_article ) vous pouvez modifier l’article ] >=
1 . 9.3) :
[(#AUTORISER{modifier, article, #ENV{id_article}}) vous pouvez modifier l'article ] 


Voir la doc
----

----

CONFIG



CONFIG

- Accèder Accèder aux données contenues dans les metas du site ( ( attention serialize voir doc)  :

#CONFIG{meta::descriptif_site}&lt;/code >
 ----
 {{{#MODELE}}} 


<code>#CONFIG{meta::descriptif_site}



----

MODELE



- Le raccourci sera <charte|typo> si le fichier se nomme modeles/charte_typo.html

- Le raccourci sera <charte|typo> si le fichier se nomme

modeles/charte_typo.html&lt;/code >
 - {{Avec Avec  #MODELE, définir plusieurs paramètres dans un array}}  : 
&lt; array  :&lt; code>
[(#MODELE{nuage} {notid=5|6|7})]


définira les groupes à exclure dans la boucle du modèle

{id_groupe !==  ^((#ENV{notid ==^((#ENV{notid , -1}))$}


(voir le plugin nuage)

----

----

ARRAY



- Déclarer Utiliser un ARRAY array , le déclarer précédemment , puis le remplir dans une boucle incrémentée par le compteur  :
<
compteur  :< code>
#SETarticles, #ARRAY

#SETarticles, #GETarticles

array_merge#ARRAY#COMPTEUR_BOUCLE, #ID_ARTICLE

</code > [(#REM ) test du tableau faire [(# GETarticles
print_r )] ]

-  Encore plus court
#SET{arraymot,#ARRAY}
 <BOUCLE_mot(MOTS){id_groupe}>
#SET{arraymot, #GET{arraymot}|push{#ID_MOT}}
 </BOUCLE_mot>



Encore plus court :

#SET{arraymot, #ARRAY}
 <BOUCLE_mot(MOTS) {id_groupe}>
#SET{arraymot, #GET{arraymot}|push{#ID_MOT}}
 </BOUCLE_mot>



----

----

MYSQL



- Faire le ménage en base de données :

- faire le ménage en base de données  :
_
Aller directement dans la base pour modifier ou supprimer ; par exemple lorsque vous avez 2000 sites qui encombrent, un gros coup de balai peut être nécessaire ! La méthode rapide est donc de lancer une commande directement depuis MYSQL (par exemple via l’interface phpmyadmin)

  • sélectionner les sites en proposition :
    SELECT * FROM <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9zeW5kaWM8L2NvZGU+"></span> WHERE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3RhdHV0PC9jb2RlPg=="></span> =  'prop'
  • Supprimer les sites en proposition :
    DELETE FROM <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9zeW5kaWM8L2NvZGU+"></span> WHERE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3RhdHV0PC9jb2RlPg=="></span> =  'prop'



- Supprimer les syndications trop anciennes

Vous avez beaucoup de sites syndiqués et ils ne possèdent pas tous l’option effacer au bout de 2 mois

Voici la requête pour effacer toutes les vieux articles syndiqués (modifier la date selon vos besoins) :

DELETE FROM <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9zeW5kaWNfYXJ0aWNsZXM8L2NvZGU+"></span> WHERE date <  '2007-12-31 10:00:00'



- Déplacer tous les articles de la rubrique 39 à la rubrique 12 :

UPDATE spip_articles SET id_rubrique = 12 WHERE id_rubrique = 39;

attention : si les deux rubriques ne sont pas dans le même secteur, il faut aussi mettre à jour id_secteur

- Transférer les données crées avec EXTRA2 (mettre en réserve vos spip_metas, iextras et les champs créés) :

En ligne :

  • créer les champs supplémentaires dans phpmyadmin, du style
    ALTER TABLE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9hdXRldXJzPC9jb2RlPg=="></span> ADD  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bm9tX2NoYW1wX25vdXZlYXU8L2NvZGU+"></span> text NOT NULL;
  • Le plus important : supprimer tmp/meta_cache.php
  • MODIFIER spip_metas, iextras dans la base en collant le contenu précédemment sauvegardé
  • vider le cache, voila



----

----

URLS et LIENS



- Passer passer un tableau de variables en url  :
<
url  :< code>
[(#SELF

parametre_url’id_mot[]’, #ID_MOT)] ne fonctionne pas ; il faut donc écrire : [(#SELF)]&id_mot[]=#ID_MOT

et pour vider l’url on écrira : [(#SELF|parametre_url{id_mot, ''})]

- Créer un lien vers la page site avec la variable id_syndic=xx (à mettre dans une boucle de syndication) corrige également l’erreur produite par generer_url_site (maj SPIP) :

[(#URL_PAGE{site}|parametre_url{id_syndic,#ID_SYNDIC})]



- Créer un lien vers l’article 54 en se passant de boucle :

<a href="#URL_ARTICLE{54}">lien</a>



- URL propres arborescentes

cf http://comments.gmane.org/gmane.com...

$type_urls = 'arbo';
define('_SET_HTML_BASE', 1); // ajoute aux pages html une directive  
<base..> et traite les ancres des pages produites



- Afficher les requêtes SQL ( SPIP 2 )  :
<code >
http://adresse_spip http://adresse_spip /?var_profile (SPIP 2 ) permet d’afficher les requêtes SQL que fait SPIP pour créer la page ainsi que les temps de calcul pour chaque boucle et inclusion.

-

http://adresse_spip/?-  {{Afficher  var_mode=inclure&lt;/code >  (SPIP  2 )  Afficher  les noisettes d’un squelette}}  ( squelette  SPIP 2 )  :
 <code>http://adresse_spip /? var_mode=inclure



<blockquote class="spip">

voir voir Les aides au débuggage de squelettes

</blockquote>



----

----

SITES D’ASTUCES



-http://www.weblog.eliaz.fr/rubrique...

----

----

RACCOURCIS TYPOS



Pour faire un lien dans un texte, on utilise le raccourci [->artXX] ou [->rubXX] ou [->motXX], etc.

Mais comment fait-on si on veut pointer vers une page en lui transmettant des paramètres ? Un nom d’onglet par exemple : l’onglet des sites sur une page de mots-clés...

C’est simple il suffit d’écrire [->motXX?parametre=valeur] (dans notre ex. ce pourrait être [->mot33?onglet=sites]) Spip transforme alors le raccourci en URL cliquable du type spip.php?motxx&parametre=valeur

Remarquez comment Spip jongle automatiquement avec les & et les ?.

----

INCLURE dans un squelette



- <INCLURE{fond=../../ma_noisette}> ou encore #INCLURE{fond=../../ma_noisette} pour afficher le html (évalué) de « ma_noisette.html » placé 2 répertoires au-dessus de la racine du spip ;

- <INCLURE(../../ma_noisette.html)> pour afficher le texte brut de « ma_noisette.html » placé 2 répertoires au-dessus de la racine du spip ;

- <INCLURE(../../mon_script.php)> pour exécuter le script php de « mon_script.php » placé 2 répertoires au-dessus de la racine du spip.

- Définir une variable calculée par une noisette

sans variable on utilise <INCLURE{fond=monsquelette}> ou [(#INCLURE{fond=monsquelette})]

pour définir la variable calculée :#SET{mavariable, #INCLURE{fond=monsquelette}{monparam=#ENV{monparam}}}

INCLURE dans un formulaire


$date_recolte = recuperer_fond('formulaires/inc-date_recolte', $flux['args']['contexte']);


$code = recuperer_fond("inclure/inc-liste-articles", array( 'id_rubrique' => $id_rubrique));


Voir http://programmer.spip.org/recupere...



DATE DU JOUR



dans un squelette, afficher la date du jour (la date courante) n’est pas toujours aisé.

deux variables peuvent entrer en jeu :

  • la date retournée par la boucle dans laquelle on veut afficher notre date du jour
  • une variable nommée date passée en url ou par le biais d’un formulaire



pour chaque cas, néanmoins, il existe une possibilité d’afficher la date du jour et ce sans que cette date soit tributaire du cache du squelette (ce sera toujours la date courante qui sera affichée)

dans une boucle dont la table possède

un champ date ou date_redac

hors boucle
pas de date ni de date_redac en url

ni passées par formulaire

#ENV{date_redac}

ou

#ENV{date}

#DATE_REDAC

ou

#DATE

variable date passée en url ou par formulaire #ENV{date_redac} #DATE_REDAC
variable date_redac passée en url ou par formulaire #ENV{date} #DATE
variables date et date_redac passées

en url ou par formulaire

définir en début de squelette la date courante avec par exemple :

#SET{cur_date, #VAL{Y-m-d h:i:s}|date}

puis l’utiliser dans le squelette avec :

#GET{cur_date}

JOUONS AVEC LES DATES

-  la date du prochain jeudi qui suit #DATE :

[(#VAL{Y-m-d}|date{#VAL{next Thursday}|strtotime{#DATE|affdate{U}}})]

-  le nom du jour de l’avant-veille de #DATE :

[(#VAL{Y-m-d}|date{#VAL{-2 days}|strtotime{#DATE|affdate{U}}}|nom_jour)]

-  la date de lundi prochain :

[(#SET{lundi_prochain, #VAL{Y-m-d 00:00:00}|date{#VAL{next Monday}|strtotime{#DATE|affdate{U}}}})]
#GET{lundi_prochain}

-  la date du dimanche d’après lundi prochain :

[(#SET{dimanche_apres, #VAL{Y-m-d 23:59:59}|date{#VAL{+6days}|strtotime{#GET{lundi_prochain}|affdate{U}}}})]
#GET{dimanche_apres}

-  afficher le label nouveau ! pour un article publié ou modifié il y a moins de 10 jours :

#SET{periode, -10days}
#TITRE[ (#DATE_MODIF|>{#VAL{Y-m-d H:i:s}|date{#GET{periode}|strtotime}}|oui) nouveau !]

et _fil_ (sur irc) propose encore plus simple :

#TITRE[ (#DATE|strtotime|>{#VAL{-10days}|strtotime}|?{nouveau !, ''})]

Retour à la version courante

Toutes les versions