Carnet Wiki

Astuces SPIP

Version 28 — Décembre 2009 denisb

PLUGINS

| ? ’’,’ ’)
devient
|non)

PLUGINS


<
cadre class=« spip  »>
dites moi, vous avez une idée pour trouver si un plugin est là ? (dialogue via irc )
<code >
1.9.2 ou 1.9.3, php ou squelette ?
dans un squelette 1.9.2c
[(#EVALDIR_PLUGIN_PREFIX| ?’ ’,”) Mon action ]
ou _DIR...
arf, et en php ?...
if (defined(’_DIR_PLUGIN_XXX’)) ...
génial merci
pour 1.9.2
en 1.9.3, c’est un poil simplifié tout ça
ah ?
[(#PLUGINXXX) Mon action ]
</code </cadre >

Une syntaxe plus jolie avec SPIP 2 :
_
<code >| ? cadre class=« spip  »>
| ? ’,’’)</code > ’,’’)
devient < code>|oui)</code >
_ <code >| ?
|
oui ) ’’,’ ’) devient |non)

BALISES

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 de boucle du contexte, faut aller chercher dans la pile $p.
_ Voilà comment : $p->boucles[$p->id_boucle]->id_table

CRITÈRES

Mais quand on veut trouver le type de boucle du contexte, faut aller chercher dans la pile $p.

Voilà comment :
$p->boucles[$p->id_boucle]->id_table

CRITERES


Le critère < code>fusion</code > fusion permet de faire un GROUPBY  ; GROUPBY ,
exemple sur un fil RSS, pour éviter des articles de même nom, on peut faire :
<code >
<BOUCLE_syndic(SYNDIC_ARTICLES)fusion cadre><BOUCLE_syndic(SYNDIC_ARTICLES)fusion titre 0,10 >
</code 0,10 > </cadre >

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

Afficher les articles ayant le mot clef truc  : truc
<code cadre class=« spip »>#TITRE</cadre >
<BOUCLE_articles(ARTICLES ) titre_mot=truc >
#TITRE
</
BOUCLE_articles >
</code >
 !OUPS titre_mot étant obsolète on titre_mot est obsolète depuis qu’on peut désormais écrire :
<
code >
<BOUCLE_G(ARTICLES ) mots

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

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

&lt;BOUCLE_articles(ARTICLES) {branche ?}   {id_mot }{id_mot  ?}   {id_auteur }{id_auteur  ?}>
 } > 

[(#SELF|parametre_url{'id_mot[]',#ID_MOT})] ne marche pas encore,

[(#SELF|parametre_url{'id_mot[]', #ID_MOT})]&lt;/code > ne fonctionne pas ; il faut donc écrire : &lt; code>&#91;(#SELF faire<code>&#91;(#SELF )]&id_mot[]=#ID_MOT et pour vider l’url on écrira  : demandera &#91;(#SELF|parametre_url{id_mot, ''})] ,''})]

• 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>

SQUELETTES

SQUELETTES


Remplaçer lire la suite par autre chose :
<code >
[(#TEXTE|couper110 , <a code>[(#TEXTE|couper110,<a href=« #URL_RUBRIQUE »>autre chose ...)]

Une syntaxe plus jolie pour tester l’existence d’un élément, la ligne + indique la modification (merci kent1)

-[(#PLUGIN{ABONNEMENT}|?{' ',''})
+[(#PLUGIN{ABONNEMENT}|oui)
 		#INCLURE{fond=inc/menu_abonnement}	
 ]
 
-[(#PLUGIN{ABONNEMENT}|?{'',' '})
+[(#PLUGIN{ABONNEMENT}|non)
 #INCLURE{fond=prive/menu_inscription2}	
 ]

Créer un lien vers la page site «  site  » avec la variable < code>id_syndic=xx</code > id_syndic=xx , à mettre dans une boucle de syndication)  :

&#91;(#URL_PAGE{site}|parametre_url{id_syndic 
&lt; cadre  class="spip">&#91;(#URL_PAGE{site}|parametre_url{id_syndic })]&lt;/code &lt;/cadre >


 Le critère &lt; code>{ajax}&lt;/code >  ajax  permet de recharger uniquement le morceau de noisette appellé ;   ,  utilisé en SPIP  2  SPIPV2  avecpagination  &lt;code>pagination&lt;/code code><INCLURE{fond=inc-manoisette}{ajax}>&lt;/code > :
 &lt;code >
 &lt;INCLURE{fond=inc-manoisette}   {ajax }>
 &lt;/code >
 {Mais comment faire fonctionner le callback ?  et hop :}
&lt; cadre  class="spip ">
 &lt;cadre >
 $(document).ready(function() {
var fonction_a_rappeller=function(){
...
}
if(typeof onAjaxLoad=='function')onAjaxLoad(fonction_a_rappeller);
if(window.jQuery)jQuery(document).ready(function(){
  fonction_a_rappeller.apply(document);
 });


});
</cadre>


 Empêcher l'apparition des boutons de recalcul sur une page en particulier ( ,  à plaçer sur  la  {{première  ligne}}   du  squelette )  en  première  ligne :
&lt;code >
 &lt;cadre  class="html ">
 [(#HTTP_HEADER{Content-type: text/html[; charset=(#CHARSET)]})]
&lt;/code &lt;/cadre >


 Se servir de <code>#NOOP

par exemple pour image_typo cela donnerait une image ( avec la police victor. de Actuellement
<
cadre class=« spip »>[(#NOOP |==’’| ? ttf) du mot Actuellement :

&#91;(#NOOP|=={''}|?{Actuellement}|image_typo{police=Victor.ttf,taille=14,largeur=150})]
&lt;/code &lt;/cadre >


 Créer un lien vers l'article 54 en se passant de boucle : 
&lt;code cadre  class="spip">&lt;a  href="#URL_ARTICLE{54}" >
&lt;a  href="#URL_ARTICLE{54}">lien&lt;/a lien&lt;/a >
&lt;/code &lt;/cadre >


{{{Balise #MODELE}}}


{{{BALISE  # MODELE}}} 
 Avec #MODELE, définir plusieurs paramètres dans un array : 
&lt; code >
 &#91;(#MODELE{nuage}   {notid=5|6|7 })]
 .
 <cadre class="spip">[(#MODELE{nuage}{notid=5|6|7})]&lt;/code &lt;/cadre >
définira les groupes à exclure dans la boucle du modèle
&lt;code >
 cadre  class="spip ">  {id_groupe!==^((#ENV{notid ,  -1 }))$}
 &lt;/code ==^((#ENV{notid,-1}))$}&lt;/cadre >
(voir  voir  le plugin nuage) 


{{{ARRAY}}}


Utiliser un array, le déclarer précédemment, puis le remplir dans une boucle incrémenté par le compteur.
&lt;code >
 #SET{articles ,  #ARRAY} &lt;cadre  class="spip ">
 #SET{articles,#ARRAY} 
&lt;BOUCLE_articles_rub(ARTICLES )  {id_rubrique BOUCLE_articles_rub(ARTICLES){id_rubrique }>
#SET{articles ,  #GET{articles}|array_merge{#ARRAY{#COMPTEUR_BOUCLE ,  #ID_ARTICLE}}} #SET{articles,#GET{articles}|array_merge{#ARRAY{#COMPTEUR_BOUCLE,#ID_ARTICLE}}} 
</BOUCLE_articles_rub>
[(#REM) test du tableau faire [(#GET{articles}|print_r)] ]
 &lt;/code &lt;/cadre >


{{{Faire  <h4>Faire  un CSS qui soit un squelette}}} squelette&lt;/h4 > 


cela permet de récupérer des variables.
<cadre class=spip>


[(#REM) dans la page monstyle.html  et en première ligne ]
#HTTP_HEADER{'Content-Type: text/css'}


.couleurdefond{
background-color:green;
  [(#ENV{id_article}|={33}|?{
  background-color:pink;
  })]
}


</cadre>


Appeler la CSS dans une page SPIP
<cadre class=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>
</cadre>


{{{Tester  <h4>Tester  les autorisations d'écriture ou de modification d'un auteur SPIP >=1.9.3</h4>
<cadre class="spip">
[(#AUTORISER{modifier,article,#ENV{id_article}})  vous pouvez modifier l'article ] 
3}}} &lt;/cadre > 


<cadre class="spip">
[(#AUTORISER{modifier,article,#ENV{id_article}})  vous pouvez modifier l'article ] 
</cadre>


Voir [la doc->http://doc.spip.org/@balise_AUTORISER_dist]


<h4>Inclure une variable calculée par une noisette.</h4>


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

pour envoyer et récupérer la variable

#SET{mavariable,#INCLURE{fond=monsquelette}{monparam=#ENV{monparam}}}

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

MYSQL

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 lançer 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> = CONVERT(_utf8 'prop' USING latin1) COLLATE latin1_swedish_ci

Supprimer les sites en proposition

DELETE FROM <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF9zeW5kaWM8L2NvZGU+"></span> WHERE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3RhdHV0PC9jb2RlPg=="></span> = CONVERT(_utf8 'prop' USING latin1) COLLATE latin1_swedish_ci

Supprimer les syndications trop anciennes
Vous avez beaucoup de sites syndiqués et ils ne possèdent pas toutes l’option effacer au bout de 2 mois

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

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

APPELS PARTICULIERS

http://adresse_spip/?var_profile

(SPIP V2) 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/?var_mode=inclure

(SPIP V2) Afficher les noisettes d’un squelette SPIP

SITES D’ASTUCES


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

Raccourcis typo

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

-  <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.

Retour à la version courante

Toutes les versions