Version 38 — Octobre 2010 — Noplay
?exec=convert_sql_utf8
A utiliser pour une recherche alphabétique exacte ou pour avoir une jolie base dans PHPMyadmin
Passer par un code caché ;) pour convertir sa base en UTF-8, vraiment !
voir
bah bah bah...
plutôt utiliser le critère {collecte...}
voir sur le glossaire de spip.net
• dites moi, vous avez une idée pour trouver si un plugin est là ? (dialogue via irc)
<marcimat> 1.9.2 ou 1.9.3, php ou squelette ?
<touti> dans un squelette 1.9.2c
<marcimat> [(#EVAL{DIR_PLUGIN_PREFIX}|?{' ',”}) Mon action ]
<marcimat> ou _DIR...
<touti> arf, et en php ?...
<marcimat> if (defined('_DIR_PLUGIN_XXX')){ ... }
<touti> génial merci
<marcimat> pour 1.9.2
<marcimat> en 1.9.3, c'est un poil simplifié tout ça
<touti> ah?
<marcimat> [(#PLUGIN{XXX}) Mon action ]
Pour récupérer le chemin d’un plugin dans un squelette
< code >
[(#SETcheminmonplugin,[(#EVAL_DIR_PLUGIN_MONPLUGIN
[(# SETcheminmonplugin,[(#EVAL_DIR_PLUGIN_MONPLUGIN )])]
#GETcheminmonplugin
</ code >
• Une syntaxe plus jolie avec SPIP 2 :|?{' ',''})
devient |oui)
|?{'',' '})
devient |non)
Pipeline automatique de css dans un plugin
style_public_plugin_xxx.html
et pour l’espace privé
prive/style_prive_plugin_xxx.html
seront prises en compte automatiquement par SPIP
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
• 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è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 les articles ayant le mot clef truc :
<BOUCLE_articles(ARTICLES) {titre_mot=truc}>
#TITRE
</BOUCLE_articles>
!OUPS titre_mot étant obsolète on peut désormais écrire :
<BOUCLE_G(ARTICLES) {mots.titre}>
• 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}>
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 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}
• Utiliser un critère optionnel, et demander le critère via l’url :
<BOUCLE_articles(ARTICLES) {branche ?} {id_mot ?} {id_auteur ?}>
• [(#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, ''})]
• 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>
• Le calendrier ICAL ne fonctionne pas ? 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 la suite par autre chose :
[(#TEXTE|couper{110, <a href="#URL_RUBRIQUE"><em>autre chose ...</em></a>})]
• 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 avec la variable id_syndic=xx
(à mettre dans une boucle de syndication) : [(#URL_PAGE{site}|parametre_url{id_syndic})]
• Le critère {ajax}
permet de recharger uniquement le morceau de noisette appellé ; utilisé en SPIP 2 avec pagination
:
<INCLURE{fond=inc-manoisette} {ajax}>
Mais comment faire fonctionner le callback ? et hop :
$(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);
});
});
• Empêcher l’apparition des boutons de recalcul sur une page en particulier (à plaçer sur la première ligne du squelette) :
[(#HTTP_HEADER{Content-type: text/html[; charset=(#CHARSET)]})]
• Se servir de #NOOP
par exemple pour image_typo cela donnerait une image (avec la police victor.ttf) du mot Actuellement :
[(#NOOP|=={''}|?{Actuellement}|image_typo{police=Victor.ttf,taille=14,largeur=150})]
On peut désormais faire :
[(#VAL{"Actuellement"}|image_typo{police=Victor.ttf,taille=14,largeur=150})]
• Créer un lien vers l’article 54 en se passant de boucle :
<a href="#URL_ARTICLE{54}">lien</a>
Avec #MODELE, définir plusieurs paramètres dans un array :
[(#MODELE{nuage} {notid=5|6|7})]
définira les groupes à exclure dans la boucle du modèle
{id_groupe!==^((#ENV{notid, -1}))$}
(voir le plugin nuage)
Utiliser un array, le déclarer précédemment, puis le remplir dans une boucle incrémenté par le compteur.
#SET{articles, #ARRAY}
<BOUCLE_articles_rub(ARTICLES) {id_rubrique}>
#SET{articles, #GET{articles}|array_merge{#ARRAY{#COMPTEUR_BOUCLE, #ID_ARTICLE}}}
</BOUCLE_articles_rub>
[(#REM) test du tableau faire [(#GET{articles}|print_r)] ]
cela permet de récupérer des variables.
[(#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;
})]
}
Concernant les #HTTP_HEADER
(et la disparition des boutons admin) voir http://www.spip.net/fr_article4631....
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>
[(#AUTORISER{modifier,article,#ENV{id_article}}) vous pouvez modifier l'article ]
Voir la doc
classiquement et sans variable on utilise
<INCLURE{fond=monsquelette}> ou les [(#INCLURE{fond=monsquelette})]
pour envoyer et récupérer la variable
#SET{mavariable,#INCLURE{fond=monsquelette}{monparam=#ENV{monparam}}}
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
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'
Déplacer tous les articles d’une rubrique 39 à une 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
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
- http://www.weblog.eliaz.fr/rubrique...
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¶metre=valeur
... Remarquez comment Spip jongle automatiquement avec les &
et les ?
...
- <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.