<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://lapsuske.brubel.net/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>LapSuske</title>
	<link>https://lapsuske.brubel.net/</link>
	<description>Dans LapSuske, il y a Lapsus et Suske, tu saisis ?Suske, 36 ans en 2004 et toutes ses dents (moins une mais il y a prescription). Le lapsus est un peu plus ancien (situation dentaire inconnue).</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://lapsuske.brubel.net/spip.php?id_mot=43&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Afficher directement l'article unique d'une rubrique</title>
		<link>https://lapsuske.brubel.net/Afficher-directement-l-article-unique-d-une-rubrique</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/Afficher-directement-l-article-unique-d-une-rubrique</guid>
		<dc:date>2012-03-24T16:21:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Trucs en SPIP</dc:subject>

		<description>&lt;p&gt;C'est parfois un probl&#232;me avec SPIP : on cr&#233;e une rubrique pour un seul article, afin que les choses soient bien rang&#233;es. Mais du coup, les visiteurs doivent cliquer et recliquer pour rien. Sur SPIP-Contrib, dans ce cas-l&#224;, la page de l'article unique est affich&#233;e directement. Voici comment.&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/SPIP,30" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;C'est parfois un probl&#232;me avec SPIP : on cr&#233;e une rubrique pour un seul article, afin que les choses soient bien rang&#233;es. Mais du coup, les visiteurs doivent cliquer et recliquer pour rien. Sur SPIP-Contrib, dans ce cas-l&#224;, la page de l'article unique est affich&#233;e directement. Voici comment.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Le code utilis&#233; sur SPIP-Contrib est visible sur la zone : &lt;a href=&#034;http://zone.spip.org/trac/spip-zone/browser/_galaxie_/www.spip-contrib.net/squelettes/2012/rubrique.html?order=date&amp;desc=1&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://zone.spip.org/trac/spip-zone...&lt;/a&gt;. Il contient quelques crit&#232;res dont nous n'avons pas besoin pour un cas g&#233;n&#233;ral. Nous les enlevons donc, ce qui donne :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='23' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#SET{normale,' '} [(#REM) test sur presence sous-rubriques] &lt;BOUCLE_test_sousrubrique(RUBRIQUES){id_parent}{0,1}&gt; &lt;/BOUCLE_test_sousrubrique&gt; &lt;BOUCLE_articles_unseul(ARTICLES){id_rubrique}{pagination 1}&gt; [(#GRAND_TOTAL|=={1}|oui) &lt;?php include_spip('inc/headers'); redirige_par_entete('[(#URL_ARTICLE|texte_script)]'); ?&gt; [(#SET{normale,''})] [(#REM) reinjecter l'id_article dans le contexte pour les stats] ] &lt;?php if ('#GRAND_TOTAL'=='1') $GLOBALS['contexte']['id_article'] = intval('[(#ID_ARTICLE)]'); ?&gt; &lt;/BOUCLE_articles_unseul&gt; &lt;//B_test_sousrubrique&gt; &lt;BOUCLE_principale_rubrique(RUBRIQUES){id_rubrique}&gt;[(#GET{normale}|oui)&lt;INCLURE{fond=structure}{env}{type=rubrique}{composition} /&gt;]&lt;/BOUCLE_principale_rubrique&gt;&lt;/textarea&gt;
&lt;p&gt;Explication :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; lignes 1 : on d&#233;finit une variable locale &#034;normale&#034;, qui servira a lancer le squelette &#034;normal&#034; si la rubrique appel&#233;e contient au moins une sous-rubrique ou plus d'un article.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; lignes 3 : tester s'il existe au moins une sous-rubrique de la rubrique appel&#233;e. Si c'est le cas, la BOUCLE_articles_unseul ne sera pas ex&#233;cut&#233;e vu qu'elle est dans la partie alternative de la BOUCLE_test_sousrubrique.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ligne 4 &#224; 12 si la BOUCLE_test_sousrubrique est vide, BOUCLE_articles_unseul est ex&#233;cut&#233;e. Elle liste les articles de la rubrique. Si leur nombre est &#233;gal &#224; 1 (l.5), la fonction SPIP &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;redirige_par_entete&lt;/code&gt; est appel&#233;e et le navigateur est renvoy&#233; directement sur la page d'article (code 302). On vide la variable &#034;normale&#034; et on s'occupe des statistiques de visite.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ligne 13 : voici le marqueur qui indique que ce qui pr&#233;c&#232;de est &#224; ex&#233;cuter si la boucle principale ne renvoie rien
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ligne suivante : une derni&#232;re boucle sur la rubrique appel&#233;e, qui lance en l'occurrence la m&#233;canique de ZPIP si et et seulement si la variable &#034;normale&#034; est positionn&#233;e (donc, qu'on a au moins une sous-rubrique ou plus d'un article).&lt;/p&gt;
&lt;p&gt;De mani&#232;re g&#233;n&#233;rale, le php n'est pas &#224; utiliser dans les squelettes. On constate ici qu'il est utilis&#233; uniquement pour faire appel &#224; des fonctions ou globales de SPIP, je suppose que c'est ce qui rend cet usage acceptable.&lt;/p&gt;
&lt;p&gt;Voil&#224;, voil&#224;. Bon SPIP !&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Chapitre 1er : plugin.xml, pipelines, CFG</title>
		<link>https://lapsuske.brubel.net/Chapitre-1er-plugin-xml-pipelines-CFG</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/Chapitre-1er-plugin-xml-pipelines-CFG</guid>
		<dc:date>2012-03-23T19:03:55Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Trucs en SPIP</dc:subject>
		<dc:subject>auto-formation</dc:subject>

		<description>&lt;p&gt;Adapter SPIP Bisous &#224; SPIP 3... Premier &#233;tape du chantier, en regarder les bases : les fichiers situ&#233;s &#224; la racine du plugin. Je vais regarder, et toucher (mais peu, je ne sais m&#234;me pas vraiment o&#249; je vais).&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/Adapter-SPIP-Bisous-a-SPIP-3" rel="directory"&gt;Adapter SPIP Bisous &#224; SPIP 3&lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/SPIP,30" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/auto-formation" rel="tag"&gt;auto-formation&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Premier &#233;tape du chantier, en regarder les bases : les fichiers situ&#233;s &#224; la racine du plugin. Je vais regarder, et toucher (mais peu, je ne sais m&#234;me pas vraiment o&#249; je vais). On va donc commencer par les fichiers &#224; la racine : plugin.xml et bisous_pipelines.php&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Plugin.xml&lt;/h2&gt;
&lt;p&gt;SPIP 3 marquera l'abandon progressif de ce fichier de d&#233;claration de plugins, au profit d'un autre nomm&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;paquet.xml&lt;/code&gt;. Le plugin &#034;Plugonet&#034; facilite la cr&#233;ation de paquet.xml, nous y reviendrons plus tard. Dans l'imm&#233;diat, regardons de quoi se compose le plugin.xml de Bisous pour SPIP 2 et voyons ce qu'il y a &#224; y changer.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='32' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;plugin&gt; &lt;nom&gt;SPIP Bisous !&lt;/nom&gt; &lt;auteur&gt;RastaPopoulos&lt;/auteur&gt; &lt;licence&gt;GPL&lt;/licence&gt; &lt;version&gt;0.2.0&lt;/version&gt; &lt;version_base&gt;0.2&lt;/version_base&gt; &lt;etat&gt;dev&lt;/etat&gt; &lt;description&gt;Vous &#234;tes en col&#232;re ? Il vous faut des bisous ! Vous &#234;tes content ? Il vous faut des bisous !&lt;/description&gt; &lt;lien&gt;&lt;/lien&gt; &lt;!-- URI de documentation --&gt; &lt;prefix&gt;bisous&lt;/prefix&gt; &lt;icon&gt;images/amour.png&lt;/icon&gt; &lt;install&gt;base/bisous_installation.php&lt;/install&gt; &lt;pipeline&gt; &lt;nom&gt;declarer_tables_interfaces&lt;/nom&gt; &lt;inclure&gt;base/bisous_tables.php&lt;/inclure&gt; &lt;/pipeline&gt; &lt;pipeline&gt; &lt;nom&gt;declarer_tables_principales&lt;/nom&gt; &lt;inclure&gt;base/bisous_tables.php&lt;/inclure&gt; &lt;/pipeline&gt; &lt;pipeline&gt; &lt;nom&gt;affiche_gauche&lt;/nom&gt; &lt;inclure&gt;bisous_pipelines.php&lt;/inclure&gt; &lt;/pipeline&gt; &lt;necessite id=&#034;SPIP&#034; version=&#034;[2.0.0;2.1.99]&#034; /&gt; &lt;categorie&gt;communication&lt;/categorie&gt; &lt;/plugin&gt;&lt;/textarea&gt;
&lt;p&gt;Commentaires :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Ligne 5 : le num&#233;ro de version du plugin est bien entendu un &#233;l&#233;ment crucial pour la bonne information du webmestre. Jusqu'&#224; l'apparition du plugin STEP pour SPIP 2.1, ce num&#233;ro n'&#233;tait pas utilis&#233; dynamiquement en spip. Dans SPIP 3, l'interface de gestion des plugins fera usage de cette donn&#233;e pour g&#233;rer les mises &#224; jour, les d&#233;pendances, etc. Ce num&#233;ro doit avoir la forme &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;X.Y.Z&lt;/code&gt;. Si je faisais une &#233;volution du plugin existant, je devrais l'incr&#233;menter en Z, au minimum mais je crois que ce n'est pas n&#233;cessaire vu que je cr&#233;e une version sp&#233;cifique pour SPIP 3&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;A noter que plusieurs plugins ont une compatibilit&#233; qui s'&#233;tale &#224; plusieurs (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Ligne 6 : le num&#233;ro de version de la base doit &#234;tre incr&#233;ment&#233;, en cas de modification de la base de donn&#233;e par le plugin. Son incr&#233;mentation d&#233;clenche les actions ad hoc de SPIP. &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ligne 10 : Outre son utilisation n&#233;cessaire dans les noms de fonctions, etc., &#224; partir de SPIP 3, c'est le pr&#233;fixe qui d&#233;termine l'unicit&#233; du plugin pour le serveur de plugins.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; lignes 12 &#224; 20 : la m&#233;canique d'installation et de fonctionnement des tables du plugin, c'est pour plus tard peut-&#234;tre.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &lt;strong&gt;lignes 21 &#224; 24 :&lt;/strong&gt; le pipeline &#034;afficher_gauche&#034; d&#233;finit un affichage dans la colonne de gauche de l'espace priv&#233;. Comme perso j'aime l'affichage en 3 colonnes du priv&#233; et que la droite est souvent oubli&#233;e, je vais mettre &#034;afficher_droite&#034;. Par ailleurs, le contenu de cet affichage est d&#233;fini dans le fichier bisous_pipelines.php, &#231;a tombe bien on ira y jeter un &#339;il tout &#224; l'heure.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &lt;strong&gt;ligne 25 :&lt;/strong&gt; pour que ce plugin s'installe sous SPIP 3, il faudra adapter &#231;a : je mets &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;necessite id=&#034;SPIP&#034; version=&#034;[3.0.0-dev;3.0.99]&#034; /&gt;&lt;/code&gt;&lt;/strong&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ligne 26 : la cat&#233;gorie est d&#233;sormais n&#233;cessaire pour pouvoir mettre un peu d'ordre dans la gestion des plugins, tant dans SPIP que sur le serveur de plugins&lt;/p&gt;
&lt;p&gt;Ajout suppl&#233;mentaire :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Il est d&#233;sormais pr&#233;vu pour chaque plugin un &#034;slogan&#034; qui d&#233;finit en quelques mots l'utilit&#233; du plugin. J'ajoute une ligne comme ceci, sous le nom : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;slogan&gt;Embrassez-vous !&lt;/slogan&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Mon plugin.xml pour SPIP 3 ressemble donc d&#233;sormais &#224; ceci :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='33' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;plugin&gt; &lt;nom&gt;SPIP Bisous !&lt;/nom&gt; &lt;slogan&gt;Embrassez-vous !&lt;/slogan&gt; &lt;auteur&gt;RastaPopoulos&lt;/auteur&gt; &lt;licence&gt;GPL&lt;/licence&gt; &lt;version&gt;0.2.0&lt;/version&gt; &lt;version_base&gt;0.2&lt;/version_base&gt; &lt;etat&gt;dev&lt;/etat&gt; &lt;description&gt;Vous &#234;tes en col&#232;re ? Il vous faut des bisous ! Vous &#234;tes content ? Il vous faut des bisous !&lt;/description&gt; &lt;lien&gt;&lt;/lien&gt; &lt;!-- URI de documentation --&gt; &lt;prefix&gt;bisous&lt;/prefix&gt; &lt;icon&gt;images/amour.png&lt;/icon&gt; &lt;install&gt;base/bisous_installation.php&lt;/install&gt; &lt;pipeline&gt; &lt;nom&gt;declarer_tables_interfaces&lt;/nom&gt; &lt;inclure&gt;base/bisous_tables.php&lt;/inclure&gt; &lt;/pipeline&gt; &lt;pipeline&gt; &lt;nom&gt;declarer_tables_principales&lt;/nom&gt; &lt;inclure&gt;base/bisous_tables.php&lt;/inclure&gt; &lt;/pipeline&gt; &lt;pipeline&gt; &lt;nom&gt;affiche_gauche&lt;/nom&gt; &lt;inclure&gt;bisous_pipelines.php&lt;/inclure&gt; &lt;/pipeline&gt; &lt;necessite id=&#034;SPIP&#034; version=&#034;[3.0.0-dev;3.0.99]&#034; /&gt; &lt;categorie&gt;communication&lt;/categorie&gt; &lt;/plugin&gt;&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Rest &#224; faire :&lt;/strong&gt; Passer &#231;a en paquet.xml, PlugOnet nous y aidera (plus tard).&lt;/p&gt;
&lt;p&gt;Attaquons-nous maintenant &#224; ce fameux bisous_pipelines.php.&lt;/p&gt;
&lt;hr class=&#034;spip&#034; /&gt;&lt;h2 class=&#034;spip&#034;&gt;bisous_pipelines.php&lt;/h2&gt;
&lt;p&gt;La version SPIP 2 est la suivante :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='28' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;?php function bisous_affiche_gauche($flux){ include_spip('inc/presentation'); include_spip('public/assembler'); if ($flux['args']['exec'] == 'auteur_infos'){ $flux['data'] .= debut_cadre_relief('',true,'',_T('bisous:bisous_donnes')); $flux['data'] .= recuperer_fond('prive/bisous_donnes',array('id_auteur'=&gt;$flux['args']['id_auteur'])); $flux['data'] .= fin_cadre_relief(true); $flux['data'] .= debut_cadre_relief('',true,'',_T('bisous:bisous_recus')); $flux['data'] .= recuperer_fond('prive/bisous_recus',array('id_auteur'=&gt;$flux['args']['id_auteur'])); $flux['data'] .= fin_cadre_relief(true); } return $flux; } ?&gt;&lt;/textarea&gt;
&lt;p&gt;Commentaires :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ligne 2 : cette fonction (la seule du fichier, chouette !) est visiblement une fonction d'affichage. Je veux un affichage &#224; droite en cas d'&#233;cran sur 3 colonnes, je d&#233;duis que je dois en changer le nom : ce sera &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;function bisous_affiche_droite($flux)&lt;/code&gt;. Je suppose que le premier terme doit correspondre au pr&#233;fixe du plugin et les deux suivants au pipeline que j'ai appel&#233; dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugin.xml&lt;/code&gt; . &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; lignes 3 et 4 : il y a inclusion de deux fichiers de SPIP que je suppose &#234;tre charg&#233; de la mise en forme et de la construction de page. Un petit coup d'oeil dans /ecrire (le dossier des fichiers internes de SPIP, en tout cas du priv&#233;) me montre que ces deux fichiers existent toujours en SPIP 3. Pour faire bonne mesure, je vais comparer aussi avec un plugin du core : l'extension &#034;organiseur&#034;. Je constate des similitudes et des diff&#233;rences :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='16' class='spip_cadre spip_cadre_block' dir='ltr'&gt;function organiseur_affiche_droite($flux){ if ($flux['args']['exec']=='accueil'){ $flux['data'] .= recuperer_fond( 'prive/squelettes/inclure/organiseur-rappels', array( 'id_auteur'=&gt;$GLOBALS['visiteur_session']['id_auteur'], 'last' =&gt; $GLOBALS['visiteur_session']['quand'], ) ); } return $flux; }&lt;/textarea&gt;
&lt;p&gt;Ces deux lignes d'inclusion n'y sont pas pr&#233;sentes. L'inclusion se fait probablement d'office &#224; pr&#233;sent. Je les enl&#232;ve et croise les doigts ;-). Par ailleurs mon hypoth&#232;se pour la ligne 2 est valid&#233;e, semble-t-il.&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ligne 7 : je constate qu'en SPIP 2 les bisous donn&#233;s et re&#231;us s'affichent sur la page d'auteur, dans le priv&#233;. Cette page s'appelle via &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/?exec=auteurs_infos&lt;/code&gt;. Il s'agit d'un fichier qui se trouve dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/exec/auteurs_infos.php&lt;/code&gt;. &lt;br class='manualbr' /&gt;En SPIP 3, il n'existe plus. La page d'auteur est d&#233;sormais appel&#233;e via &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/?exec=infos_perso&lt;/code&gt;. Je vais donc &#224; la recherche d'un fichier &#034;infos_perso&#034;, et je le trouve dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/prive/squelettes/contenu&lt;/code&gt;. Au passage je note que ce qui concerne le squelette de l'espace priv&#233; de SPIP semble donc se trouver donc dans /prive/squelettes, vu que j'y retrouve la liste de sous-dossiers habituelle en Zpip ! Pour la ligne 7, je tente donc le remplacement par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt; if ($flux['args']['exec'] == 'infos_perso')&lt;/code&gt;. &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; lignes 8 &#224; 14 : je d&#233;tecte des cha&#238;nes de langue (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_T('bisous...')&lt;/code&gt;) et des indications de mise en forme ( les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;debut_cadre_relief('',true,'',_T('bisous:bisous_donnes'));&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;fin_cadre_relief&lt;/code&gt;). Je suppose qu'il s'agit de la m&#233;thode SPIP 2 pour d&#233;finir les cadres dans le priv&#233;. Comme je sais que l'interface priv&#233;e est &#034;squeletis&#233;e&#034;, il doit y avoir moyen de faire &#231;a en boucles. Je le note et on verra plus tard. Ce qui m'int&#233;resse ici, c'est que je retrouve bien la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;recupere_fond&lt;/code&gt; et ses arguments. Dans bisous pour SPIP 2, ces fonds se trouvent dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/prive&lt;/code&gt;. Je note d'adopter l'organisation SPIP 3 mais je ne touche &#224; rien pour l'instant. Je reviendrai quand j'aurai avanc&#233; sur ces fameux squelettes du priv&#233;.&lt;/p&gt;
&lt;p&gt;Mon fichier ressemble d&#233;sormais &#224; ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip&#034; spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php function bisous_affiche_droite($flux){ if ($flux['args']['exec'] == 'infos_perso'){ $flux['data'] .= debut_cadre_relief('',true,'',_T('bisous:bisous_donnes')); $flux['data'] .= recuperer_fond('prive/bisous_donnes',array('id_auteur'=&gt;$flux['args']['id_auteur'])); $flux['data'] .= fin_cadre_relief(true); $flux['data'] .= debut_cadre_relief('',true,'',_T('bisous:bisous_recus')); $flux['data'] .= recuperer_fond('prive/bisous_recus',array('id_auteur'=&gt;$flux['args']['id_auteur'])); $flux['data'] .= fin_cadre_relief(true); } return $flux; } ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;J'enregistre le tout et constate que j'ai d&#233;sormais bien des boites &#034;Bisous donn&#233;s&#034; et &#034;Bisous re&#231;us&#034; sur ma page d'auteur. Cool :-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reste &#224; faire :&lt;/strong&gt; &lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; remplacer les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;debut_cadre_relief&lt;/code&gt; par le syst&#232;me SPIP 3
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; d&#233;placer les fonds dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;prive/squelettes/inclure/&lt;/code&gt; ET reporter ici la modification.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; ajouter la ligne &#034;s&#233;curit&#233;&#034; qui v&#233;rifie inc-version (je me souviens avoir vu &#231;a passe sur toute la zone il y a peu mais elle ne se trouve pas sur spip-bisous)&lt;/p&gt;
&lt;hr class=&#034;spip&#034; /&gt;
&lt;p&gt;Un petit suppl&#233;ment pour la route...&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;CFG a &#233;t&#233; int&#233;gr&#233; &#224; SPIP 3&lt;/h2&gt;
&lt;p&gt;Derni&#232;re &#233;tape : dans le priv&#233; je ne vois pas d'entr&#233;e pour la configuration de SPIP-Bisous. Cela semble normal : j'ai lu que la plupart des fonctionnalit&#233;s de base de &lt;a href=&#034;http://www.spip-contrib.net/Config-CFG&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;CFG&lt;/a&gt; ont &#233;t&#233; int&#233;gr&#233;es &#224; SPIP 3 et j'ai constat&#233; qu'un logo de configuration vient &#224; pr&#233;sent se poser dans la page d'administration des plugins, en regard des plugins &#224; configurer.&lt;/p&gt;
&lt;p&gt;Par &lt;a href=&#034;http://zone.spip.org/trac/spip-zone/browser/_plugins_/manuel_site/prive/exec/configurer_manuelsite.html?order=date&amp;desc=1&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;comparaison avec d'autres plugins&lt;/a&gt;, je d&#233;duis que le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;fonds/cfg_bisous.html&lt;/code&gt; doit &#234;tre d&#233;plac&#233; vers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;prive/exec/configurer_bisous.html&lt;/code&gt; pour &#234;tre pris en compte.&lt;/p&gt;
&lt;p&gt;Un commit plus tard, je constate qu'en effet, la page de configuration est d&#233;sormais prise en compte. J'y ajoute un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt; &lt;div class=&#034;formulaire_spip&#034;&gt;&lt;/code&gt; pour que cela soit un rien mieux int&#233;gr&#233;. J'ignore si la configuration est prise en compte par contre :-), ce sera pour plus tard... Par contre, je vois que ce formulaire n'utilise pas le m&#233;canisme CVT de SPIP. Ce sera &#224; adapter...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reste &#224; faire :&lt;/strong&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; v&#233;rifier si la configuration est enregistr&#233;e
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; passer le form de configuration en CVT.&lt;/p&gt;
&lt;hr class=&#034;spip&#034; /&gt;&lt;h2 class=&#034;spip&#034;&gt;Pour la suite...&lt;/h2&gt;
&lt;p&gt;Voil&#224; tout pour aujourd'hui. Outre les &#034;Reste &#224; faire ci-dessus&#034;, je constate encore que le plugin n'est pas fonctionnel &#224; ce stade : un test de bisou sur une page auteur me renvoie une superbe page blanche :-)&lt;/p&gt;
&lt;p&gt;Ce n'est pas une surprise, il va falloir descendre dans les entrailles du plugin.&lt;/p&gt;
&lt;p&gt; A suivre...&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;A noter que plusieurs plugins ont une compatibilit&#233; qui s'&#233;tale &#224; plusieurs versions de SPIP : 2.0, 2.1, 3.0 . Je suis trop ignorant pour g&#233;rer &#231;a, ayant toujours recul&#233; devant la cr&#233;ation de pages priv&#233;es dans SPIP 2.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>R&#233;cup&#233;rer un zip depuis le site de la zone &#034;SPIP&#034;</title>
		<link>https://lapsuske.brubel.net/Recuperer-un-zip-depuis-le-site-de-la-zone-SPIP</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/Recuperer-un-zip-depuis-le-site-de-la-zone-SPIP</guid>
		<dc:date>2012-01-03T11:07:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Trucs en SPIP</dc:subject>

		<description>&lt;p&gt;Lorsqu'on a pas de client &lt;a href=&#034;https://fr.wikipedia.org/wiki/SVN&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;SVN&lt;/a&gt; sous la main et que le plugin que l'on veut r&#233;cup&#233;rer n'est pas fourni en &#034;zip&#034;, la zone offre une solution alternative (ne pas abuser pour ne pas faire tomber le serveur plus que n&#233;cessaire :-p)&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/SPIP,30" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Lorsqu'on a pas de client &lt;a href=&#034;https://fr.wikipedia.org/wiki/SVN&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;SVN&lt;/a&gt; sous la main et que le plugin que l'on veut r&#233;cup&#233;rer n'est pas fourni en &#034;zip&#034;, la zone offre une solution alternative (ne pas abuser pour ne pas faire tomber le serveur plus que n&#233;cessaire :-p)&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Dans le cas pr&#233;sent, je tente de mettre &#224; jour r&#233;guli&#232;rement une version SVN de SPIP3. Pour le core de SPIP, pas de souci, tout est mis &#224; jour r&#233;guli&#232;rement dans le zip qui est l&#224; : &lt;a href=&#034;http://www.spip.net/fr_download&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://www.spip.net/fr_download&lt;/a&gt;. Par contre, cela ne permet pas de r&#233;cup&#233;rer les derni&#232;res versions des extensions, lesquelles sont d&#233;velopp&#233;es sur la zone et ne sont &#034;packag&#233;es&#034; avec SPIP que lors de la publication d'une version &#034;officielle&#034; (SPIP3beta par exemple). Dans l'intervalle, il faut utiliser SVN, ou ruser.&lt;/p&gt;
&lt;p&gt;Le principe est simple, il suffit d'appeler dans son navigateur :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;http://zone.spip.org/trac/spip-zone/changeset/latest/ICI_LE_CHEMIN_COMPLET SUR LE ZONE?old_path=/&amp;format=zip&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Donc pour r&#233;cup&#233;rer le zip avec les extensions actualis&#233;es de SPIP (que je peux lister &#224; &lt;a href=&#034;http://zone.spip.org/trac/spip-zone/browser/_core_/plugins&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://zone.spip.org/trac/spip-zone...&lt;/a&gt;), il me suffit de reporter ce qui suit &#034;browser&#034; dans l'url, soit _core_/plugins puis visiter le lien : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;http://zone.spip.org/trac/spip-zone/changeset/latest/_core_/plugins?old_path=/&amp;format=zip&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Bon alors attention : si on indique un chemin (path) trop court &#231;a choppe toute l'arborescence dessous, donc... C'est le genre de distraction qui a pu faire tomber la zone. C'est aussi pour &#231;a qu'elle est red&#233;marr&#233;e automatiquement toutes les heures.&lt;/p&gt;
&lt;p&gt;Un autre exemple : certains plugins/squelettes d&#233;velopp&#233;s sur la zone ne sont pas propos&#233;es en zip sur &lt;a href=&#034;http://files.spip.org/spip-zone&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://files.spip.org/spip-zone&lt;/a&gt;, pour toutes sortes de raison. Ce syst&#232;me permet de rem&#233;dier &#224; cela, au cas o&#249;...&lt;/p&gt;
&lt;hr class=&#034;spip&#034; /&gt;
&lt;p&gt;Mise &#224; jour du 25 mai 2012 :&lt;/p&gt;
&lt;p&gt;Sur &lt;a href=&#034;http://spip.net/irc&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;IRC#spip&lt;/a&gt;, denisb me souffle&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;en fait non, il me pastebin ;-)&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;
@@@r&#233;cup&#233;rer un zip des diff entre 2 r&#233;visions :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;http://zone.spip.org/trac/spip-zone/changeset?format=zip&amp;new=[[jusqu'&#224; la r&#233;vision]]&amp;old=[[depuis la r&#233;vision]]&amp;new_path=_plugins_/[[nom du plugin]]&amp;old_path=_plugins_/[[nom du plugin]]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;par exemple :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;http://zone.spip.org/trac/spip-zone/changeset?format=zip&amp;new=59775&amp;old=56572&amp;new_path=_plugins_/langonet&amp;old_path=_plugins_/langonet&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ce syst&#232;me permet donc de r&#233;cup&#233;rer uniquement les fichiers modifi&#233;s entre 2 r&#233;visions, ce qui peut &#234;tre utile pour minimiser les transfert de fichiers sur certains gros plugins ou ne pas int&#233;grer des modifs trop r&#233;centes par exemple...&lt;/p&gt;
&lt;p&gt;Toujours plus b&#244;&#244;&#244;, toujours plus cool....&lt;/p&gt;
&lt;hr class=&#034;spip&#034; /&gt;
&lt;p&gt;Voil&#224;, voil&#224;.&lt;/p&gt;
&lt;p&gt;SPIP c b&#244;&#244;&#244;&#244;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb2-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;en fait non, il me pastebin ;-)&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>|extraire_balise(s)</title>
		<link>https://lapsuske.brubel.net/extraire_balise-s</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/extraire_balise-s</guid>
		<dc:date>2011-11-11T13:07:54Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>Trucs en SPIP</dc:subject>

		<description>&lt;p&gt;Hors donc un spipeur cherchait &#224; isoler les images ins&#233;r&#233;es en html dans les textes de son site...&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Hors donc un spipeur cherchait &#224; isoler les images ins&#233;r&#233;es en html dans les textes de son site... Cette pesonne se pr&#233;senta sur IRC, le 27/1/2011.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Appelons notre spipeur zabcd et dans le r&#244;le de sadeur, nous retrouverons defgh, dit &#034;le fourbe&#034;.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;&lt;small&gt;11:23 &lt; defgh&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#TEXTE|extraire_balise{img}&lt;/code&gt;&lt;br class='manualbr' /&gt;11:23 &lt; defgh&gt; sort la premi&#232;re balise img depuis TEXTE&lt;br class='manualbr' /&gt;11:24 &lt; defgh&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#TEXTE|extraire_balises{img}&lt;/code&gt; sort le tableau de *toutes* les balises img&lt;br class='manualbr' /&gt;11:25 &lt; zabcd&gt; defgh : il y a les 2 filtres extraire_balise *et* extraire_balises ?&lt;br class='manualbr' /&gt;11:25 &lt; defgh&gt; oui&lt;br class='manualbr' /&gt;11:25 &lt; defgh&gt; &#231;a permet de faire plein de choses int&#233;ressantes&lt;br class='manualbr' /&gt;11:26 &lt; defgh&gt; mais c'est de la regexp (donc lourd)&lt;br class='manualbr' /&gt;11:26 &lt; defgh&gt; combin&#233; avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|replace{}&lt;/code&gt;&lt;br class='manualbr' /&gt;11:26 &lt; zabcd&gt; defgh : oui mais &#231;a ira pour une petite remont&#233;e d'article ici et l&#224;&lt;br class='manualbr' /&gt;11:27 &lt; zabcd&gt; d'autant que je les remonte via ajax et donc uniquement si l'internaute clique sur actions concern&#233;es&lt;br class='manualbr' /&gt;11:27 &lt; zabcd&gt; la surcharge ne sera pas &#233;norme&lt;/small&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour &#233;viter les liens &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;a href...&gt;&lt;/code&gt; cod&#233;s en html sur un forum, on pourra &#233;crire par exemple dans les boucles forums :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#TEXTE|extraire_balises{a}|?{' &lt;span style=&#034;color:red;&#034;&gt;Liens html interdits&lt;/span&gt; ',#TEXTE})]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En fran&#231;ais, si il y a une balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt; &lt;a&gt;...&lt;/a&gt; &lt;/code&gt; dans le #TEXTE du forum, afficher &lt;span style=&#034;color:red;&#034;&gt;Liens html interdits&lt;/span&gt;, sinon afficher le #TEXTE.&lt;/p&gt;
&lt;p&gt;Voil&#224;, voil&#224;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Le texte a d&#251; &#234;tre retravaill&#233; pour en mettre la quintessence en &#233;vidence, d'o&#249; le long d&#233;lai avant publication :-)&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>R&#233;cup&#233;rer, dans une sauvegarde de plusieurs Gigabytes, le contenu d'une table malencontreusement effac&#233;e </title>
		<link>https://lapsuske.brubel.net/Recuperer-dans-une-sauvegarde-de-plusieurs-Gigabytes-le-contenu-d-une-table-malencontreusement</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/Recuperer-dans-une-sauvegarde-de-plusieurs-Gigabytes-le-contenu-d-une-table-malencontreusement</guid>
		<dc:date>2011-11-10T17:53:11Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>Trucs en SPIP</dc:subject>

		<description>&lt;p&gt;Les &#233;v&#233;nements du site SPIP ont disparu. Une erreur de manipulation mais peu importe. La sauvegarde MySQL p&#232;se plusieurs Gb. Il me faut y retrouver quelques dizaines de lignes pour restaurer une la table. Un billet aide-m&#233;moire et &#034;howto&#034; en ligne de commande (GNU/Linux).&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Hors donc une table a &#233;t&#233; malencontreusement effac&#233;e de la base de donn&#233;es. La taille de la sauvegarde dont je dispose est telle que travailler dans mon &#233;diteur de texte habituel est strictement impossible, la simple ouverture du fichier n&#233;cessitant plus de 20 minutes. R&#233;cit d'une qu&#234;te et de sa mise en oeuvre :-)&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Je suis sous LinuxMint, comme l'utilisation d'un programme graphique semble beaucoup trop lourde, j'ouvre une console pour essayer de m'en sortir avec la ligne de commande, moins gourmande pour le syst&#232;me.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Rep&#233;rer la table dans la sauvegarde&lt;/h2&gt;
&lt;p&gt;Je me positionne dans le dossier o&#249; se trouve la sauvegarde puis je tente d'abord de l'ouvrir avec &lt;i&gt;nano&lt;/i&gt;, un &#233;diteur en ligne de commande.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd mondossier nano sauvegarde.sql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Beaucoup plus rapide qu'avec l'&#233;diteur graphique : 3 minutes suffisent, je peux voir les premi&#232;res lignes. Je connais le nom de la table que je cherche &#224; r&#233;cup&#233;rer. Dans &lt;i&gt;nano&lt;/i&gt;, je lance une recherche (Ctrl W) sur 'spip_evenements' et cela m'am&#232;ne &#224; d&#233;couvrir que les donn&#233;es sont &#233;crites en quelques centaines de lignes aux alentours de la ligne 26000. Peu importe l'exactitude, la voie &#233;tait sans issue : chaque intervention sur le contenu du fichier rend &lt;i&gt;nano&lt;/i&gt; incontr&#244;lable pendant 3 minutes... Je note n&#233;anmoins que la partie du fichier qui m'int&#233;resse commence par &#034;LOCK TABLES &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_evenements&lt;/code&gt; WRITE ;&#034;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Trouver un moyen de r&#233;cup&#233;rer mes donn&#233;es sans affichage graphique&lt;/h2&gt;
&lt;p&gt;Je sais que me passer compl&#232;tement d'affichage du contenu du fichier me permettrait d'ex&#233;cuter plus ais&#233;ment la t&#226;che que j'ai &#224; mener : cela prendra certainement des minutes mais au moins elle ne sera pas syst&#233;matiquement ralentie par les besoins de l'affichage.&lt;/p&gt;
&lt;p&gt;Me voil&#224; parti sur le web pour une recherche des divers outils existants. Dans un premier temps, je tente une &#034;r&#233;duction&#034; de mon fichier avec la commande &#034;sed &#034; (appliqu&#233;e sur une copie vu que sed modifie le contenu du fichier cible).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cp sauvegarde.sql sauvegarde_bis.sql sed '1,25000d' sauvegarde_bis.sql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette commande devrait supprimer les lignes 1 &#224; 25000 du fichier sauvegarde_bis.sql . Le terminal se met &#224; tourner. Cela durera des heures et se terminera par une erreur... Apr&#232;s quelques dizaines de minutes, je cherche une autre solution :-).&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;La solution : la commande grep&lt;/h2&gt;
&lt;p&gt;En fait il y a beaucoup plus simple et rapide. La commande grep.&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;grep -C300 'LOCK TABLES &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_evenements&lt;/code&gt; WRITE;' sauvegarde.sql &gt; restore.sql&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cette commande devrait extraire 300 lignes &#224; partir de celle qui d&#233;bute par &#034;LOCK TABLES &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_evenements&lt;/code&gt; WRITE ;&#034; dans le fichier sauvegarde.sql puis copier ces lignes dans un fichier restore.sql, le tout sans modifier sauvegarde.sql .&lt;/p&gt;
&lt;p&gt;Et &#231;a marche : en quelques secondes le boulot est termin&#233; et restore.sql contient les lignes n&#233;cessaires &#224; la restauration. Une quizaine de lignes &#224; la fin des 300 contiennent des instructions relatives &#224; une autre table, je les supprime et sauve mon fichier.&lt;/p&gt;
&lt;p&gt;Apr&#232;s, j'uploade ce fichier restore.sql via phpmyadmin (option &#034;importer&#034;) et la table est restaur&#233;e.&lt;/p&gt;
&lt;p&gt;GNU/Linux, c b&#244;&#244;&#244;&#244;&#244;. Il me reste &#224; sugg&#233;rer &#224; l'admin du site d'&#234;tre plus prudent avec les manoeuvres sur les plugins. D&#233;sactiver temporairement, &#231;a va, mais d&#233;sinstaller, quand le plugin a &#233;t&#233; bien cod&#233;, cela entra&#238;ne la suppression des donn&#233;es de ce plugin...&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Ouvrir un article &#034;directement&#034; en mode &#233;dition</title>
		<link>https://lapsuske.brubel.net/Ouvrir-un-article-directement-en-mode-edition</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/Ouvrir-un-article-directement-en-mode-edition</guid>
		<dc:date>2011-01-10T16:32:11Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Trucs en SPIP</dc:subject>

		<description>&lt;p&gt;Quand on navigue dans l'interface priv&#233;e d'un site SPIP, les titres pr&#233;sent&#233;s en liste sont visiblement cliquables. Dans le cas des articles, la puce de statut et le num&#233;ro le sont aussi. Un truc gl&#226;n&#233; sur IRC : merci b_b :-)&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/SPIP,30" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Quand on navigue dans l'interface priv&#233;e d'un site SPIP, les titres pr&#233;sent&#233;s en liste sont visiblement cliquables. Dans le cas des articles, la puce de statut et le num&#233;ro le sont aussi. Un truc gl&#226;n&#233; sur &lt;a href=&#034;http://spip.net/irc&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;IRC&lt;/a&gt; : merci b_b :-)&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Si l'on souhaite modifier un article SPIP, on clique donc g&#233;n&#233;ralement sur son titre, puis lorsque la page article est charg&#233;e, on clique sur &#034;modifier cet article&#034;. Deux op&#233;rations mais il y a moyen de faire plus rapide : en cliquant sur le num&#233;ro d'article, &#224; droite dans les listes, on ouvre directement l'article en mode &#034;&#233;dition&#034;, &lt;strong&gt;sous r&#233;serve d'en avoir le droit bien entendu&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Visuellement : &#224; gauche, ouvrir la page d'article, &#224; droite, ouvrir l'article en mode &#233;dition.&lt;/p&gt;
&lt;div class='spip_document_401 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://lapsuske.brubel.net/local/cache-vignettes/L500xH209/editer-art-spip-8c303.png?1524886968' width='500' height='209' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Cool, j'ignorais :-)&lt;/p&gt;
&lt;p&gt;Tant qu'&#224; parler de ces listes, c'est peut-&#234;tre le moment de rappeler que, dans les m&#234;mes listes, la puce de statut (verte dans l'image ci-dessus) s'anime au survol de la souris. Cinq petits carr&#233;s/pictos apparaissent qui permettent de modifier rapidement le statut de l'article :&lt;/p&gt;
&lt;div class='spip_document_400 spip_document spip_documents spip_document_image spip_documents_left spip_document_left'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://lapsuske.brubel.net/local/cache-vignettes/L149xH94/article_changer_statut_1_clic-2d853.jpg?1524886976' width='149' height='94' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; blanc =&gt; en cours de r&#233;daction
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; orange =&gt; propos&#233; &#224; publication
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; vert =&gt; article publi&#233;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; rouge =&gt; refus&#233;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; noir =&gt; poubelle&lt;/p&gt;
&lt;p&gt;C'est dit... Bon SPIP !&lt;/p&gt;
&lt;p&gt;M&#224;J du 11/02/2011 : arno* a (de longue date) clarifi&#233; les choses via un plugin &lt;a href=&#034;http://plugins.spip.net/Listes-d-articles-completes&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://plugins.spip.net/Listes-d-ar...&lt;/a&gt;. Il rend (notamment) cette fonctionnalit&#233; visible donc utilisable :-)&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Mod&#233;rer les forums depuis le site public</title>
		<link>https://lapsuske.brubel.net/Moderer-les-forums-depuis-le-site-public</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/Moderer-les-forums-depuis-le-site-public</guid>
		<dc:date>2010-09-14T06:33:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Trucs en SPIP</dc:subject>
		<dc:subject>web</dc:subject>

		<description>&lt;p&gt;Un syst&#232;me tr&#232;s pratique pour les webmestres qui ont leur site en mod&#233;ration a posteriori !{}&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/SPIP,30" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/web" rel="tag"&gt;web&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://lapsuske.brubel.net/local/cache-vignettes/L150xH29/arton299-d1132.jpg?1741207550' class='spip_logo spip_logo_right' width='150' height='29' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Quelle qu'en soit la raison, on peut souhaiter supprimer certains messages post&#233;s sur son site. Le passage par l'espace priv&#233; n&#233;cessite alors plusieurs clics qui s'av&#232;rent fastidieux si l'op&#233;ration doit &#234;tre r&#233;p&#233;t&#233;e plusieurs fois. Avec ce code, un clic suffit :-)&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ce billet est la simple description du syst&#232;me mis en place sur &lt;a href=&#034;http://forum.spip.org&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://forum.spip.org&lt;/a&gt; .&lt;br class='manualbr' /&gt;Merci d'abord aux codeurs de ce squelette, pour cette fonctionnalit&#233; en particulier !&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Utilit&#233;&lt;/h2&gt;
&lt;p&gt;Il arrive que des personnes postent des messages hors de propos, ou injurieux, ou... ou du spam... Traditionnellement, il faut repasser par l'espace priv&#233; puis la gestion des forums puis mod&#233;rer. 3 clics. D&#233;publier ces messages en un clic, c'est mieux :-)&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Description&lt;/h2&gt;
&lt;p&gt;C'est assez simple : si vous &#234;tes connect&#233;-e au site et que vous disposez du droit de g&#233;rer les forums, une petite croix rouge vient s'installer &#224; c&#244;t&#233; du titre du message de forum (ou l&#224; o&#249; vous le souhaitez dans votre squelette, dans une boucle FORUMS...)&lt;/p&gt;
&lt;p&gt;Un clic et le message voit son statut pass&#233; &#224; &#034;off&#034;, c'est &#224; dire qu'il est d&#233;publi&#233;. Si n&#233;cessaire, vous pouvez encore modifier ce statut ensuite, via l'espace priv&#233;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Mise en place&lt;/h2&gt;
&lt;p&gt;Le dispositif install&#233; sur forum.spip.org consiste en :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une fonction &#224; installer dans le fichier mes_fonctions.php&lt;/li&gt;&lt;li&gt; du code, fond&#233; sur la balise #AUTORISER, &#224; ins&#233;rer dans la/les boucle-s FORUMS&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;La fonction :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='14' class='spip_cadre spip_cadre_block' dir='ltr'&gt;// moderer les messages depuis l'espace public // ne supprime pas le message ni le fil mais les passe en 'off' // on peut toujours les revalider dans l'espace prive function invalider_forum($id_forum,$r='') { include_spip(&#034;inc/securiser_action&#034;); list($id_auteur, $pass) = caracteriser_auteur(); $arg=&#034;$id_forum&#034;; $hash = _action_auteur(&#034;instituer_forum-$arg-off&#034;, $id_auteur, $pass, 'alea_ephemere'); $r = rawurlencode(_request('redirect')); return generer_url_action('instituer_forum', &#034;arg=$arg-off&amp;hash=$hash&amp;redirect=$r&#034;); }&lt;/textarea&gt;
&lt;p&gt;Le code :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='6' class='spip_cadre spip_cadre_block' dir='ltr'&gt;[ (#AUTORISER{invalider_forum,forum,#ID_FORUM})&lt;a href='[(#ID_FORUM|invalider_forum|parametre_url{redirect,#GET{url}})]'&gt;&lt;img src='#EVAL{_DIR_IMG_PACK}croix-rouge.gif' alt='&lt;:ecrire:bouton_radio_modere_posteriori:&gt;' title='&lt;:ecrire:bouton_radio_modere_posteriori:&gt;' /&gt;&lt;/a&gt; ]&lt;/textarea&gt;
&lt;p&gt;Il vous faut bien bien entendu disposer quelque part dans votre site de l'image &#034;croix-rouge.gif&#034; et des codes de langue... Sur les forums de SPIP, le m&#234;me principe permet de supprimer les mots-cl&#233;s joints aux forums et il s'agit d'une piste plus qu'int&#233;ressante pour les documents joitns aux forums &#233;galement :-).&lt;/p&gt;&lt;/div&gt;
		&lt;div class="hyperlien"&gt;Voir en ligne : &lt;a href="http://forum.spip.org" class="spip_out"&gt;Les forums de SPIP (cliquer sur le papillon au bas des pages pour afficher le squelette)&lt;/a&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;SPIP subit progressivement une cure d'amaigrissement qui consiste &#224; passer des parties sp&#233;cifiques du &#034;core&#034; en plugins/extensions. Ce sera prochainement le cas des forums et j'imagine que cette possibilit&#233; sera int&#233;gr&#233;e dans le plugin en question. En attendant, plus besoin de se priver :-)&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>|is_null permet de tester l'existence d'une variable </title>
		<link>https://lapsuske.brubel.net/is_null-permet-de-tester-l-existence-d-une-variable</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/is_null-permet-de-tester-l-existence-d-une-variable</guid>
		<dc:date>2010-07-11T15:59:37Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Trucs en SPIP</dc:subject>

		<description>&lt;p&gt;Ce filtre s'applique &#224; la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt; et permet de tester l'existence de variables dans l'environnement SPIP.&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/SPIP,30" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Ce filtre s'applique &#224; la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt; et permet de tester l'existence de variables dans l'environnement SPIP.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Il est parfois n&#233;cessaire de diff&#233;rencier une variable de contenu vide d'une variable inexistante. Ce filtre est l&#224; pour vous y aider. Il s'applique &#224; la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{blabla}&lt;/code&gt; et permet donc de tester la pr&#233;sence ou non de la variable &#034;blabla&#034; dans l'environnement du squelette.&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#ENV{blabla}|is_null)]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ce code retourne &#034;1&#034; si la variable &#034;blabla&#034; est nulle/inexistante ou rien si elle est non nulle/pr&#233;sente&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Ne pas confondre variable nulle, c'est &#224; dire inexistante, et variable vide, (&#8230;)&#034; id=&#034;nh3-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Ce filtre ne s'applique &lt;strong&gt;pas&lt;/strong&gt; aux variables d&#233;clar&#233;es avec #SET/#GET dont la valeur n'est &lt;strong&gt;pas&lt;/strong&gt; pr&#233;sente dans l'environnement mais uniquement dans le squelette.&lt;/p&gt;
&lt;p&gt;Techniquement, |is_null est &lt;a href=&#034;http://php.net/manual/fr/function.is-null.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;une fonction php&lt;/a&gt; et n'est donc pas sp&#233;cifique &#224; SPIP.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb3-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Ne pas confondre variable nulle, c'est &#224; dire inexistante, et variable vide, c'est &#224; dire pr&#233;sente dans l'environnement mais sans valeur affect&#233;e.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;D&#233;couvert sur &lt;a href=&#034;http://programmer.spip.org/GET&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://programmer.spip.org/GET&lt;/a&gt;, ce filtre m'a permis d'apporter une piste de solution sur &lt;a href=&#034;http://forum.spip.org/fr_225786.html&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://forum.spip.org/fr_225786.html&lt;/a&gt;. Le texte ci-dessus a &#233;t&#233; propos&#233; sur spip.net/fr mais ne semble pas devoir y &#234;tre publi&#233; vu qu'il s'agit essentiellement de l'application comme filtre SPIP d'une fonction php.&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>G&#233;rer les IP spammeuses avec un squelette</title>
		<link>https://lapsuske.brubel.net/Gerer-les-IP-spammeuses-avec-un-squelette</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/Gerer-les-IP-spammeuses-avec-un-squelette</guid>
		<dc:date>2010-06-24T15:04:56Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Trucs en SPIP</dc:subject>

		<description>&lt;p&gt;Par principe, on peut souhaiter laisser les forums de son site ouvert aux posteurs anonymes. Le plugin &#034;NoSpam&#034; s'impose alors mais en ce qui me concerne, j'y ajoute une petite couche (en squelettes). Explications.&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/SPIP,30" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Par principe, on peut souhaiter laisser les forums de son site ouvert aux posteurs anonymes. Le plugin &#034;NoSpam&#034; s'impose alors mais en ce qui me concerne, j'y ajoute une petite couche (en squelettes). Le principe est que rien ne change si l'utilisateur est connect&#233; puisqu'on ne visera que les posteurs anonymes et dont l'adresse IP a post&#233; des commentaires qui ont &#233;t&#233; mod&#233;r&#233;s, supprim&#233;s via l'interface priv&#233;e de SPIP.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Pour l'activation du plugin NoSpam, je vous renvoie &lt;a href=&#034;http://www.spip-contrib.net/NoSPAM&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#224; la documentation&lt;/a&gt;. Il fonctionne bien et rend nettement service. Quelques d&#233;tails :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; tr&#232;s peu de spams sont affich&#233;s directement sur le site public. La plupart du temps, ces messages sont plac&#233;s &#034;en attente de validation&#034;. L'administrateur peut les supprimer (ou les publier s'il s'agit d'un faux positif).
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; les spams &#034;&#224; la cha&#238;ne&#034;, effectu&#233;s par des robots, sont bloqu&#233;s. La plupart du temps, seul le premier message est accept&#233; mais il est mod&#233;r&#233; comme expliqu&#233; ci-dessus.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; de plus en plus, h&#233;l&#224;s, le spam est fait &#034;&#224; la main&#034;... Dans ce cas, le premier message est souvent publi&#233;, mais les suivants sont mis en attente.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; N'emp&#234;che, &#224; la longue, m&#234;me dans l'espace priv&#233;, ces listes de messages &#224; supprimer s'allongent parfois et font perdre leur temps aux adminsitrateurs. Comme l'exp&#233;rience m'a montr&#233; qu'en outre ces spams &#034;manuels&#034; proviennent souvent d'une m&#234;me adresse IP, cela m'a motiv&#233; &#224; rajouter une couche.&lt;/p&gt;
&lt;p&gt;La suite de l'exemple est du code qui me sert sur des sites dot&#233;s du plugin &#034;SpipClear&#034; (dont ici :-) ), il y a quelques adaptations &#224; faire pour rendre ceci g&#233;n&#233;rique mais je r&#233;serve cela &#224; la mise en plugin de la chose et ne r&#233;siste pas plus longtemps au plaisir de partager.&lt;/p&gt;
&lt;p&gt;Tout d'abord, il me faut une mini-fonction qui me permettra de r&#233;cup&#233;rer l'adresse IP de la personne connect&#233;e. Dans /squelettes/mes_fonctions.php&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Merci &#224; denisb pour l'am&#233;lioration de la d&#233;tection IP : $ip_vis = (&#8230;)&#034; id=&#034;nh4-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;, je mets donc :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;function ip_visiteur() {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'] ? $_SERVER['HTTP_X_FORWARDED_FOR'] : ( $_SERVER['HTTP_CLIENT_IP'] ? $_SERVER['HTTP_CLIENT_IP'] : $_SERVER['REMOTE_ADDR'] ); return $ip_vis;
}&lt;/textarea&gt;
&lt;p&gt;Ensuite, j'&#233;cris un bout de squelette que je place dans /squelettes/spam.html&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='28' class='spip_cadre spip_cadre_block' dir='ltr'&gt;[(#REM) Recupere l'ip du visiteur]
#SET{ip_courante,#VAL|ip_visiteur} [(#REM) chercher si cette ip a ete moderee depuis moins de 15 jours] &lt;BOUCLE_enfoire(FORUMS){ip=#GET{ip_courante}}{statut=off}{age&lt;15}&gt; &lt;/BOUCLE_enfoire&gt;
[(#REM) si oui ] [(#TOTAL_BOUCLE|&gt;{0}|oui) Votre adresse ip #GET{ip_courante} a spamm&#233; les forums de ce site. [(#REM) prevoir le non-affichage des forums] #SET{pas_forum,1} [Vous devez vous inscrire pour pouvoir poster. &lt;hr /&gt;(#FORMULAIRE_INSCRIPTION)] [(#REM) si on a le formulaire de contact avance, l'employer] [&lt;hr /&gt;(#FORMULAIRE_CONTACT)] ] &lt;/B_enfoire&gt; [(#REM) si l'ip n'a pas ete moderee, on envoie le formulaire de forum)]
[(#GET{pas_forum}|=={1}|non)
[(#FORMULAIRE_FORUM)][(#PARAMETRES_FORUM|?{'',&lt;:spipclear:commentaires_fermes:&gt;})]
]&lt;/textarea&gt;
&lt;p&gt;Enfin, dans mon squelette d'appel, je modifie l'appel des forums afin de tester, si n&#233;cessaire, l'adresse IP du visiteur non-connect&#233;.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='10' class='spip_cadre spip_cadre_block' dir='ltr'&gt;[(#REM) si visiteur connecte, rien ne change] [(#SESSION{id_auteur}|oui) [(#FORMULAIRE_FORUM)][(#PARAMETRES_FORUM|?{'',&lt;:spipclear:commentaires_fermes:&gt;})] ]
[(#REM) si pas connect&#233;, on passe par spam.html pour tester l'IP] [(#SESSION{id_auteur}|non) &lt;INCLURE{fond=spam}{env}&gt; ]&lt;/textarea&gt;
&lt;p&gt;Voil&#224;, voil&#224;. Je crois que ce futur plugin est promis &#224; un bel avenir, surtout si on rend configurable la p&#233;riode analys&#233;e et le nombre de mod&#233;rations avant blocage de l'IP.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb4-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 4-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Merci &#224; denisb pour l'am&#233;lioration de la d&#233;tection IP : $ip_vis = $_SERVER[&#034;REMOTE_ADDR&#034;] ; est un peu l&#233;ger semble-t-il&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Diriger un administrateur de rubrique vers sa page de rubrique</title>
		<link>https://lapsuske.brubel.net/Diriger-un-administrateur-de-rubrique-vers-sa-page-de-rubrique</link>
		<guid isPermaLink="true">https://lapsuske.brubel.net/Diriger-un-administrateur-de-rubrique-vers-sa-page-de-rubrique</guid>
		<dc:date>2010-06-18T12:38:11Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fran&#231;ois Rygaert (aka Suske)</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Trucs en SPIP</dc:subject>

		<description>&lt;p&gt;Un &#034;truc-astuce&#034; pour permettre aux administrateurs restreints de se connecter directement &#224; la page de leur rubrique dans l'espace priv&#233; de SPIP.&lt;/p&gt;

-
&lt;a href="https://lapsuske.brubel.net/SPIP" rel="directory"&gt;SPIP &lt;/a&gt;

/ 
&lt;a href="https://lapsuske.brubel.net/SPIP,30" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://lapsuske.brubel.net/Trucs-en-SPIP" rel="tag"&gt;Trucs en SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Un &#034;truc-astuce&#034; pour permettre aux administrateurs restreints de se connecter directement &#224; la page de leur rubrique dans l'espace priv&#233; de SPIP.&lt;br class='manualbr' /&gt;La demande est apparue sur IRC. La solution envisag&#233;e passait par de la programmation, ce qui est s&#251;rement bien. Mais j'aime bien les solutions &#034;en squelette&#034;, qui, &#224; l'usage, pr&#233;sentent souvent l'avantage de la p&#233;rennit&#233;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Quand un administrateur restreint se connecte &#224; l'espace priv&#233;, il arrive sur la page &#034;A suivre&#034;. Hors, bien souvent, ce type d'utilisateur se connecte pour publier dans la rubrique dont il/elle a la charge. L'astuce qui suit permet donc d'&#233;conomiser un ou quelques clics et, accessoirement, de la facilit&#233; sur un site qui comporte des dizaines de rubriques. Il s'agit d'ins&#233;rer une &#233;tape interm&#233;diaire (invisible) entre le formulaire de login et l'arriv&#233;e dans l'espace priv&#233;. On cr&#233;e pour cela un squelette dans le dossier /squelettes. Appelons ce squelette &lt;i&gt;test_admin_restreint.html&lt;/i&gt;. Il contiendra :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='23' class='spip_cadre spip_cadre_block' dir='ltr'&gt;[(#REM) Si pas de statut administrateur erreur 404]
[(#SESSION{statut}|=={0minirezo}|non) [(#HTTP_HEADER{location: [(#URL_PAGE{404}|url_absolue)]})]] [(#REM) Si statut administrateur traitement]
[(#SESSION{statut}|=={0minirezo}|oui) [(#REM) Selectionner la rubrique associee a l'administrateur et rediriger] &lt;BOUCLE_rub_admin(auteurs_rubriques){id_auteur=#SESSION{id_auteur}}{0,1}&gt; [(#HTTP_HEADER{location:#URL_SITE_SPIP/ecrire/?exec=naviguer&amp;id_rubrique=#ID_RUBRIQUE})] &lt;/BOUCLE_rub_admin&gt; [(#REM) Si pas de rubrique associee, login classique] [(#HTTP_HEADER{location:#URL_SITE_SPIP/ecrire})] &lt;//B_rub_admin&gt;
]&lt;/textarea&gt;
&lt;p&gt;Il reste alors &#224; inviter les personnes concern&#233;es &#224; se connecter via un formulaire appel&#233; avec :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; #FORMULAIRE_LOGIN{#URL_PAGE{test_admin_restreint}}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;Mettez ce code dans la page par laquelle les r&#233;dacteurs se connectent &#224; votre site, par exemple, sommaire.html . Une fois le formulaire rempli et valid&#233;, il renvoie vers le squelette qui ne sert qu'&#224; tester si le r&#233;dacteur est administrateur et, si oui, s'il est rattach&#233; &#224; une rubrique. Si oui, la connexion se fera sur la page de cette rubrique, sinon, connexion classique sur la page &#034;A suivre&#034;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
