<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://blog.roxing.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>blog.roxing.net</title>
	<link>http://blog.roxing.net/</link>
	<description>weblog roxing.net - astuces spip, php, bash, linux &amp; more</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://blog.roxing.net/spip.php?id_mot=49&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>blog.roxing.net</title>
		<url>https://blog.roxing.net/local/cache-vignettes/L144xH37/siteon0-6ddb5.png?1727125340</url>
		<link>http://blog.roxing.net/</link>
		<height>37</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>Installer spip-cli dans devilbox</title>
		<link>https://blog.roxing.net/installer-spip-cli-dans-devilbox</link>
		<guid isPermaLink="true">https://blog.roxing.net/installer-spip-cli-dans-devilbox</guid>
		<dc:date>2024-10-03T13:49:01Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>spip</dc:subject>
		<dc:subject>linux</dc:subject>
		<dc:subject>devilbox</dc:subject>

		<description>
&lt;p&gt;Dans le host de devilbox : bash nano autostart/install-spip-cli.sh &lt;br class='autobr' /&gt;
puis dans le fichier bash # !/usr/bin/env bash #
&lt;br class='autobr' /&gt;
SPIP_CLI_PATH='/opt/spip-cli/'
&lt;br class='autobr' /&gt;
if [ -d &#034;$SPIP_CLI_PATH&#034; ] ; then &gt;&amp;amp ;2 echo &#034;[Warning], $SPIP_CLI_PATH existe d&#233;j&#224;, on sort&#034; exit 0 fi
&lt;br class='autobr' /&gt;
mkdir -p $SPIP_CLI_PATH cd $SPIP_CLI_PATH git clone https://git.spip.net/spip-contrib-outils/spip-cli.git . composer install &#8212;no-dev cd bin ln -s $(pwd)/spip /usr/local/bin/ ln -s $(pwd)/spipmu (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/gnu-linux" rel="tag"&gt;linux&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/devilbox" rel="tag"&gt;devilbox&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Dans le host de devilbox :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;nano autostart/install-spip-cli.sh &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;puis dans le fichier&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/usr/bin/env bash # SPIP_CLI_PATH='/opt/spip-cli/' if [ -d &#034;${SPIP_CLI_PATH}&#034; ]; then &gt;&amp;2 echo &#034;[Warning], ${SPIP_CLI_PATH} existe d&#233;j&#224;, on sort&#034; exit 0 fi mkdir -p ${SPIP_CLI_PATH} cd ${SPIP_CLI_PATH} git clone https://git.spip.net/spip-contrib-outils/spip-cli.git . composer install --no-dev cd bin ln -s $(pwd)/spip /usr/local/bin/ ln -s $(pwd)/spipmu /usr/local/bin/ ln -s $(pwd)/spip_console_autocomplete /etc/bash_completion.d/spip &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Bonus :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;nano autostart/install-spip-dump.sh &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/usr/bin/env bash # SPIP_DUMP_PATH='/opt/spip-dump/' if [ -d &#034;${SPIP_DUMP_PATH}&#034; ]; then &gt;&amp;2 echo &#034;[Warning], ${SPIP_DUMP_PATH} existe d&#233;j&#224;, on sort&#034; exit 0 fi echo 'installation des scripts spip-dump' mkdir -p ${SPIP_DUMP_PATH} cd ${SPIP_DUMP_PATH} curl -fsSL -o spip-import-dump-from-connect.sh https://git.spip.net/-/snippets/12/raw/main/import-dump-from-connect.sh?inline=false curl -fsSL -o spip-export-dump-from-connect.sh https://git.spip.net/-/snippets/11/raw/main/export-dump-from-connect.sh?inline=false chmod +x *.sh ln -s $(pwd)/spip* /usr/local/bin/ &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Bookmarklets SPIP</title>
		<link>https://blog.roxing.net/bookmarklets-spip</link>
		<guid isPermaLink="true">https://blog.roxing.net/bookmarklets-spip</guid>
		<dc:date>2018-03-24T20:52:01Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>spip</dc:subject>
		<dc:subject>bookmarklet</dc:subject>

		<description>
&lt;p&gt;Le fichier source est disponible ici.&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/bookmarklet" rel="tag"&gt;bookmarklet&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&#034;spip_document_95 spip_document spip_documents spip_document_text_html&#034;&gt;&lt;figure class=&#034;spip_doc_inner&#034;&gt;&lt;object data=&#034;IMG/html/bookmarklets_spip.html&#034; width=&#034;100%&#034; height=&#034;400&#034;&gt;&lt;a href='https://blog.roxing.net/IMG/html/bookmarklets_spip.html'&gt;IMG/html/bookmarklets_spip.html&lt;/a&gt;&lt;/object&gt;
&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Le fichier source est disponible &lt;a href='https://blog.roxing.net/IMG/html/bookmarklets_spip.html' class=&#034;spip_in&#034; type='text/html'&gt;ici&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[SPIP] Masquer les emails des auteurs</title>
		<link>https://blog.roxing.net/spip-masquer-les-emails-des-auteurs</link>
		<guid isPermaLink="true">https://blog.roxing.net/spip-masquer-les-emails-des-auteurs</guid>
		<dc:date>2017-03-14T17:07:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>php</dc:subject>
		<dc:subject>spip</dc:subject>
		<dc:subject>astuce</dc:subject>
		<dc:subject>email</dc:subject>
		<dc:subject>masquer</dc:subject>

		<description>
&lt;p&gt;Pour certains, l'email est une donn&#233;e priv&#233;e qui peut d&#233;j&#224; r&#233;v&#233;ler certaines informations sur son propri&#233;taire. &lt;br class='autobr' /&gt;
Ainsi, nombreux sont les administrateurs de sites SPIP soucieux de pouvoir pr&#233;server la confidentialit&#233; des auteurs dans l'espace priv&#233;, en ne divulgant leur adresse email qu'aux seuls webmestres. &lt;br class='autobr' /&gt;
Pour passer outre une fastidiese surcharge des squelettes du priv&#233;, j'avais propos&#233; une solution sur le forum, et je la retranscris ici, pour qu'elle gagne en visibilit&#233; : &lt;br class='autobr' /&gt;
D&#233;clarer (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/php" rel="tag"&gt;php&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/astuce" rel="tag"&gt;astuce&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/email" rel="tag"&gt;email&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/masquer" rel="tag"&gt;masquer&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Pour certains, l'email est une &lt;strong&gt;donn&#233;e priv&#233;e&lt;/strong&gt; qui peut d&#233;j&#224; r&#233;v&#233;ler certaines informations sur son propri&#233;taire.&lt;/p&gt;
&lt;p&gt;Ainsi, nombreux sont les administrateurs de sites SPIP soucieux de pouvoir pr&#233;server la confidentialit&#233; des auteurs dans l'espace priv&#233;, en ne &lt;strong&gt;divulgant leur adresse email qu'aux seuls webmestres&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour passer outre une fastidiese surcharge des squelettes du priv&#233;, j'avais propos&#233; une &lt;a href=&#034;http://forum.spip.net/fr_174451.html#forum265117&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;solution sur le forum&lt;/a&gt;, et je la retranscris ici, pour qu'elle gagne en visibilit&#233; :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;D&#233;clarer un traitement automatique sur le champ #EMAIL :&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre spip_cadre_block' dir='ltr'&gt;# ./config/mes_options.php $GLOBALS['table_des_traitements']['EMAIL']['auteurs'] = 'camoufler_email(%s, $Pile[1][&#034;id_auteur&#034;])';&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;D&#233;clarer les autorisations :&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='25' class='spip_cadre spip_cadre_block' dir='ltr'&gt;#./squelettes/mes_fonctions.php // voir une fiche auteur : &#234;tre admin ou bien il s'agit de sa propre fiche function autoriser_auteur_voir($faire, $type, $id, $qui, $opt) { if ( ($qui['statut'] == '0minirezo') or ($qui['id_auteur'] == $id) ) { return true; } else return false; } // masquer un email si on est pas autoris&#233; function camoufler_email($email,$id) { include_spip('inc/autoriser'); // on camoufle sauf autorisation if (!autoriser('voir','auteur', $id)) { $email = spip_substr($email,0,3) . &#034;*****&#034;; } return $email; }&lt;/textarea&gt;
&lt;p&gt;Pour passer outre ce traitement automatique, on pourra toujours utiliser la syntaxe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#EMAIL*&lt;/code&gt; dans son squelette si besoin.&lt;/p&gt;&lt;/div&gt;
		&lt;div class="hyperlien"&gt;Voir en ligne : &lt;a href="http://forum.spip.net/fr_174451.html#forum265117" class="spip_out"&gt;http://forum.spip.net/fr_174451.htm...&lt;/a&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[SPIP] Appeler le contenu d'un fichier distant directement &#224; l'int&#233;rieur d'un squelette</title>
		<link>https://blog.roxing.net/spip-appeler-contenu-distant-interieur-squelette</link>
		<guid isPermaLink="true">https://blog.roxing.net/spip-appeler-contenu-distant-interieur-squelette</guid>
		<dc:date>2016-12-19T02:23:24Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>php</dc:subject>
		<dc:subject>spip</dc:subject>
		<dc:subject>css</dc:subject>
		<dc:subject>astuce</dc:subject>
		<dc:subject>scssphp</dc:subject>
		<dc:subject>BOM</dc:subject>

		<description>
&lt;p&gt;R&#233;cemment, j'ai eu besoin d'incorporer le contenu d'un fichier distant &#224; l'int&#233;rieur d'un squelette de feuille de style. En l'occurence, il s'agissait de r&#233;cup&#233;rer un fichier CSS dans sa derni&#232;re version (fr&#233;quemment mise &#224; jour) et d'&#233;tendre certaines r&#232;gles CSS via des directives @extend de SCSS &#224; d'autres &#233;l&#233;menst de mon choix. &lt;br class='autobr' /&gt;
Pour complexifier encore la chose, le document source question d&#233;bute par un BOM [1] qui faisait planter le compilateur SCSSphp. &lt;br class='autobr' /&gt;
Mais &#224; SPIP vaillant, rien (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/php" rel="tag"&gt;php&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/css" rel="tag"&gt;css&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/astuce" rel="tag"&gt;astuce&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/scssphp" rel="tag"&gt;scssphp&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/bom" rel="tag"&gt;BOM&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;R&#233;cemment, j'ai eu besoin d'&lt;strong&gt;incorporer le contenu d'un fichier distant &#224; l'int&#233;rieur d'un squelette&lt;/strong&gt; de feuille de style. En l'occurence, il s'agissait de r&#233;cup&#233;rer un fichier CSS dans sa derni&#232;re version (fr&#233;quemment mise &#224; jour) et d'&#233;tendre certaines r&#232;gles CSS via des directives &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;@extend&lt;/code&gt; de SCSS &#224; d'autres &#233;l&#233;menst de mon choix.&lt;/p&gt;
&lt;p&gt;Pour complexifier encore la chose, le document source question d&#233;bute par un BOM&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; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; qui faisait planter le compilateur &lt;a href=&#034;https://github.com/leafo/scssphp&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;SCSSphp&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mais &#224; SPIP vaillant, rien d'impossible, sans quitter le squelette, en 2 lignes de code s'il vous plait :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='11' class='spip_cadre spip_cadre_block' dir='ltr'&gt;[(#HTTP_HEADER{Content-type:text/css[; charset=(#CHARSET)]})] [(#VAL{url_abs_to_css}|recuperer_url{#ARRAY{transcoder,true}}|table_valeur{page}|texte_script)] .formulaire_spip { @extend .form--fancy; } /* etc ... */ #FILTRE{scss_compile}&lt;/textarea&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;&lt;a href=&#034;http://stackoverflow.com/questions/3255993/how-do-i-remove-%C3%AF-from-the-beginning-of-a-file&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://stackoverflow.com/questions/3255993/how-do-i-remove-%C3%AF-from-the-beginning-of-a-file&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[SPIP] Redirection http</title>
		<link>https://blog.roxing.net/spip-redirection-http</link>
		<guid isPermaLink="true">https://blog.roxing.net/spip-redirection-http</guid>
		<dc:date>2015-09-05T14:37:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierrox</dc:creator>


		<dc:subject>php</dc:subject>
		<dc:subject>spip3</dc:subject>
		<dc:subject>spip</dc:subject>
		<dc:subject>redirection 301</dc:subject>
		<dc:subject>http_header</dc:subject>

		<description>&lt;p&gt;Utilisation du pipeline &lt;i&gt;affichage_entetes_final&lt;/i&gt; sur SPIP pour faire des redirections HTTP 301,404. Dans l'exemple suivant, lorsqu'un utilisateur tente d'afficher la page d'inscription, on le redirige sur sa page personnelle.&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/php" rel="tag"&gt;php&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/spip3" rel="tag"&gt;spip3&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/redirection-301" rel="tag"&gt;redirection 301&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/http_header" rel="tag"&gt;http_header&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Au sein d'un plugin&lt;/h2&gt;
&lt;p&gt;Dans le cadre de la cr&#233;ation d'un plugin, apr&#232;s avoir d&#233;clar&#233; le pipeline dans paquet.xml&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='15' class='spip_cadre spip_cadre_block' dir='ltr'&gt;function prefixPlugin_affichage_entetes_final($entetes){
# Rediriger un auteur authentifi&#233; vers sa page perso lorsque il demande &#224; afficher la page inscription if ( isset($GLOBALS['auteur_session']['id_auteur']) AND (_request('page') === &#034;inscription&#034;) ) { $entetes[&#034;status&#034;]= &#034;301 Moved Permanently&#034;; $entetes[&#034;Location&#034;]= generer_url_entite($GLOBALS['auteur_session']['id_auteur'],&#034;auteur&#034;); }
return $entetes;
}&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;Dans le dossier de personnalisation&lt;/h2&gt;
&lt;p&gt;Dans le dossier squelette habituel, il faut ajouter au fichier &lt;strong&gt;mes_fonctions.php&lt;/strong&gt; une fonction que l'on peut nommer par exemple &#034;redirections_persos&#034;.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='16' class='spip_cadre spip_cadre_block' dir='ltr'&gt;# squelettes/mes_fonctions.php
function redirections_persos($entetes){ # Rediriger un auteur authentifi&#233; vers sa page perso lorsque il demande &#224; afficher la page inscription if ( isset($GLOBALS['auteur_session']['id_auteur']) AND (_request('page') === &#034;inscription&#034;) ) { $entetes[&#034;status&#034;]= &#034;301 Moved Permanently&#034;; $entetes[&#034;Location&#034;]= generer_url_entite($GLOBALS['auteur_session']['id_auteur'],&#034;auteur&#034;); }
return $entetes;
}&lt;/textarea&gt;
&lt;p&gt;Puis dans &lt;strong&gt;config/mes_options.php&lt;/strong&gt; on lie notre fonction au pipeline affichage_entetes_final&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;# config/mes_options.php
$GLOBALS['spip_pipeline']['affichage_entetes_final'] .= &#034;|redirections_persos&#034;;&lt;/textarea&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[SPIP] Mettre en exergue une partie d'un titre</title>
		<link>https://blog.roxing.net/spip-mettre-en-exergue-une-partie-d-un-titre</link>
		<guid isPermaLink="true">https://blog.roxing.net/spip-mettre-en-exergue-une-partie-d-un-titre</guid>
		<dc:date>2015-07-08T17:53:12Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>php</dc:subject>
		<dc:subject>spip</dc:subject>
		<dc:subject>css</dc:subject>
		<dc:subject>astuce</dc:subject>

		<description>
&lt;p&gt;On est parfois confront&#233; au souhait d'afficher une version raccourcie d'un #TITRE d'article ; typiquement dans un menu de navigation lat&#233;ral o&#249; l'espace est pr&#233;cieux, ou bien si l'on souhaite mettre en exergue une partie seulement du titre (les n premiers mots). &lt;br class='autobr' /&gt;
Prenons l'exemple trivial d'un #TITRE un peu long : &lt;br class='autobr' /&gt;
La buvette des joyeux p&#233;tanqueurs reprend du service &#224; la fin du mois de juin. &lt;br class='autobr' /&gt;
Comment faire pour g&#233;rer toute la longueur du titre dans une mise en page o&#249; la titraille est (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/php" rel="tag"&gt;php&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/css" rel="tag"&gt;css&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/astuce" rel="tag"&gt;astuce&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;On est parfois confront&#233; au souhait d'&lt;strong&gt;afficher une version raccourcie d'un #TITRE&lt;/strong&gt; d'article ; typiquement dans un menu de navigation lat&#233;ral o&#249; l'espace est pr&#233;cieux, ou bien si l'on souhaite &lt;strong&gt;mettre en exergue une partie seulement du titre&lt;/strong&gt; (les n premiers mots).&lt;/p&gt;
&lt;p&gt;Prenons l'exemple trivial d'un #TITRE un peu long :&lt;/p&gt;
&lt;p&gt;&lt;i&gt;La buvette des joyeux p&#233;tanqueurs reprend du service &#224; la fin du mois de juin.&lt;/i&gt;&lt;/p&gt;
&lt;div class='spip_document_62 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://blog.roxing.net/local/cache-vignettes/L500xH449/h1_sans_filtre-ef148.png?1727221821' width='500' height='449' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Comment faire pour g&#233;rer toute la longueur du titre dans une mise en page o&#249; la titraille est imposante ?&lt;/h2&gt;
&lt;p&gt;Il existe le fameux filtre &lt;a href=&#034;http://www.spip.net/fr_article4275.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|couper&lt;/code&gt;&lt;/a&gt; qui s'av&#232;re souvent tr&#232;s efficace, quoiqu'il peut op&#233;rer une c&#233;sure malvenue, et que l'on perd une partie de l'information.&lt;br class='autobr' /&gt;
D'aucun serait tent&#233; de jouer entre les valeurs des champs #TITRE, #SURTITRE (voire #SOUSTITRE) ; par exemple, ces derniers &#233;tant une version &#233;tendue du premier. Il s'agit, je pense, d'une mauvaise solution qui implique une certaine redondance d'information, sans compter un usage fastidieux.&lt;/p&gt;
&lt;p&gt;Et donc &lt;strong&gt;l'astuce&lt;/strong&gt; je vous la donne.&lt;br class='autobr' /&gt;
En ins&#233;rant un espace ins&#233;cable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;#32;&lt;/code&gt; au bon endroit :&lt;/p&gt;
&lt;p&gt;&lt;i&gt;La buvette&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;#32;&lt;/code&gt;des joyeux p&#233;tanqueurs reprend du service &#224; la fin du mois de juin.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Combiner &#224; cela, un petit filtre maison &#224; mettre dans son fichier &lt;i&gt;mes_fonctions.php&lt;/i&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='8' class='spip_cadre spip_cadre_block' dir='ltr'&gt;function scinder($texte){ $txt = explode(&#034;&amp;#32;&#034;, $texte); if (is_array($txt) AND isset($txt[1])) $texte = &#034;&lt;strong&gt;&#034;.$txt[0].&#034;&lt;/strong&gt;&lt;span&gt; &#034;.$txt[1].&#034;&lt;/span&gt;&#034;; return $texte;
}&lt;/textarea&gt;
&lt;p&gt;On obtient un titre dont la premi&#232;re partie est contenue dans un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;strong&gt;&lt;/code&gt;, et la suite dans un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;span&gt;&lt;/code&gt;.&lt;br class='autobr' /&gt; D&#232;s lors on peut faire ce que l'on veut avec du CSS, sans trop de v&#233;rification de conditions ni de variantes de squelette.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;h2{}
h2 strong {color: #954141;font-size: 3em}
h2 span {color:#437788;font-size: 1em}&lt;/textarea&gt;&lt;div class='spip_document_63 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://blog.roxing.net/local/cache-vignettes/L500xH245/h1_avec_filtre_scinder-ba2c9.png?1727221821' width='500' height='245' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Libre &#224; vous d'inclure le code o&#249; vous le souhaitez dans votre squelette, au cas par cas :&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;[&lt;h2&gt;(#TITRE|scinder)&lt;/h2&gt;] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enfin, si vous souhaitez l'appliquer &#224; toutes les balises #TITRE de mani&#232;re automatique, vous pouvez d&#233;finir une r&#232;gle sur la &lt;a href=&#034;http://programmer.spip.net/Traitements-automatiques-des&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;table des traitements&lt;/a&gt; dans &lt;i&gt;mes_options.php&lt;/i&gt; :&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;$GLOBALS['table_des_traitements']['TITRE'][]= 'scinder(%s)';&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[SPIP] Ajouter des statuts de publication sur un objet</title>
		<link>https://blog.roxing.net/spip-ajouter-des-statuts-de-publication-sur-un-objet</link>
		<guid isPermaLink="true">https://blog.roxing.net/spip-ajouter-des-statuts-de-publication-sur-un-objet</guid>
		<dc:date>2015-07-02T10:15:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierrox</dc:creator>


		<dc:subject>php</dc:subject>
		<dc:subject>spip</dc:subject>

		<description>
&lt;p&gt;Comment ajouter un statut de publication personnalis&#233; &#224; un objet spip ? &lt;br class='autobr' /&gt;
L'avantage de bien d&#233;crire une table d'objet spip et de b&#233;n&#233;ficier des m&#233;canismes de publication sans avoir &#224; retoucher les boucles et les fonctions &#034;d'institution&#034;. &lt;br class='autobr' /&gt;
Dans l'exemple ci-dessous on va cr&#233;er un statut suppl&#233;mentaire 'a_completer' afin de pouvoir mettre en ligne un objet &#233;ditorial dont la r&#233;daction serait incompl&#232;te. &lt;br class='autobr' /&gt; Ajouter un statut 'a_completer' consid&#233;r&#233; comme publiable. &lt;br class='autobr' /&gt;
array( //(...) (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/php" rel="tag"&gt;php&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Comment ajouter un &lt;strong&gt;statut de publication personnalis&#233;&lt;/strong&gt; &#224; un objet spip ?&lt;/p&gt;
&lt;p&gt;L'avantage de bien d&#233;crire une table d'objet spip et de b&#233;n&#233;ficier des m&#233;canismes de publication sans avoir &#224; retoucher les boucles et les fonctions &#034;d'institution&#034;.&lt;/p&gt;
&lt;p&gt;Dans l'exemple ci-dessous on va cr&#233;er un statut suppl&#233;mentaire 'a_completer' afin de pouvoir mettre en ligne un objet &#233;ditorial dont la r&#233;daction serait incompl&#232;te.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ajouter un statut 'a_completer' consid&#233;r&#233; comme publiable.&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='32' class='spip_cadre spip_cadre_block' dir='ltr'&gt;array( //(...) 'statut_textes_instituer' =&gt; array( 'prepa' =&gt; 'texte_statut_en_cours_redaction', 'prop' =&gt; 'texte_statut_propose_evaluation', 'publie' =&gt; 'texte_statut_publie', 'refuse' =&gt; 'texte_statut_refuse', 'poubelle' =&gt; 'texte_statut_poubelle', 'a_completer' =&gt; 'texte_statut_publiable_mais_a_completer', ), 'statut'=&gt; array( array( 'champ' =&gt; 'statut', 'publie' =&gt; 'publie,a_completer', 'previsu' =&gt; 'publie,prop,prepa,a_completer', 'post_date' =&gt; 'date', 'exception' =&gt; array('statut','tout') ) ), //(...) )&lt;/textarea&gt;
&lt;p&gt;Inutile de se soucier des crit&#232;res de boucles et de passer par l'&#233;dition de squelettes !&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[SPIP] Supprimer la pr&#233;visualisation d'un message forum</title>
		<link>https://blog.roxing.net/spip-supprimer-previsualistion-forum</link>
		<guid isPermaLink="true">https://blog.roxing.net/spip-supprimer-previsualistion-forum</guid>
		<dc:date>2015-05-19T19:43:31Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Pierrox</dc:creator>


		<dc:subject>php</dc:subject>
		<dc:subject>spip3</dc:subject>
		<dc:subject>spip</dc:subject>
		<dc:subject>pr&#233;visualisation</dc:subject>
		<dc:subject>forums</dc:subject>
		<dc:subject>mes_options.php</dc:subject>

		<description>
&lt;p&gt;Il est souvent p&#233;nible de devoir surcharger tout le formulaire forum de spip pour d&#233;sactiver seulement la pr&#233;visualisation. Je vais pr&#233;senter une astuce simple et rapide &#224; mettre en place sans avoir besoin de toucher au squelette ni surcharger quoi que ce soit. &lt;br class='autobr' /&gt; Supprimer la pr&#233;visualisation sur SPIP 3.0 &lt;br class='autobr' /&gt;
Dans le cadre d'un plugin, on d&#233;clare les pipelines dans un fichier paquet.xml. &lt;br class='autobr' /&gt;
Pour un squelette spip classique, il faut d&#233;clarer les pipelines dans mes_options.php et &#034;appeler&#034; la (&#8230;)&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/billets" rel="directory"&gt;billets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/php" rel="tag"&gt;php&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/spip3" rel="tag"&gt;spip3&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/previsualisation" rel="tag"&gt;pr&#233;visualisation&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/forums-128" rel="tag"&gt;forums&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/mes_options-php" rel="tag"&gt;mes_options.php&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Il est souvent p&#233;nible de devoir surcharger tout le formulaire forum de spip pour &lt;strong&gt;d&#233;sactiver seulement la pr&#233;visualisation&lt;/strong&gt;. Je vais pr&#233;senter une astuce simple et rapide &#224; mettre en place sans avoir besoin de toucher au squelette ni surcharger quoi que ce soit.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt; Supprimer la pr&#233;visualisation sur &lt;a href=&#034;https://fr.wikipedia.org/wiki/SPIP&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;SPIP&lt;/a&gt; 3.0 &lt;/h2&gt;
&lt;p&gt;Dans le cadre d'un plugin, on d&#233;clare les pipelines dans un fichier paquet.xml.&lt;/p&gt;
&lt;p&gt;Pour un squelette spip classique, il faut d&#233;clarer les pipelines dans &lt;i&gt;mes_options.php&lt;/i&gt; et &#034;appeler&#034; la fonction dans &lt;i&gt;mes_fonctions.php&lt;/i&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;//mes_options.php $GLOBALS['spip_pipeline']['formulaire_verifier'] .= &#034;|supprimer_previsu&#034;;&lt;/textarea&gt;
&lt;textarea readonly='readonly' cols='40' rows='8' class='spip_cadre spip_cadre_block' dir='ltr'&gt;//mes_fonctions.php function supprimer_previsu($flux){ if($flux['args']['form'] === 'forum') unset($flux['data']['previsu']); return $flux; }&lt;/textarea&gt;
&lt;p&gt;A noter qu'il existe &#233;galement un plugin tout pr&#234;t &lt;a href=&#034;http://contrib.spip.net/Publier-un-message-sans-previsualiser&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;disponible sur les d&#233;pots de spip contrib&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt; Supprimer la pr&#233;visualisation sur &lt;a href=&#034;https://fr.wikipedia.org/wiki/SPIP&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;SPIP&lt;/a&gt; 3.1 et sup&#233;rieur&lt;/h2&gt;
&lt;p&gt;On se contentera de &lt;code class='php spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS[&#034;meta&#034;][&#034;forums_forcer_previsu&#034;]=&#034;non&#034;;&lt;/code&gt; dans mes_options.php pour un r&#233;sultat similaire.&lt;/p&gt;
&lt;p&gt;Voil&#224;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*** Pensez &#224; vider les caches ***&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Et voil&#224;, les messages post&#233;s dans les formulaires forum ne passeront plus par l'&#233;tape de pr&#233;visualisation !&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>[SPIP] comment organiser ses fonctions javascript</title>
		<link>https://blog.roxing.net/organiser-ses-fonctions-javascript</link>
		<guid isPermaLink="true">https://blog.roxing.net/organiser-ses-fonctions-javascript</guid>
		<dc:date>2014-07-01T13:55:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>spip</dc:subject>
		<dc:subject>script</dc:subject>
		<dc:subject>javascript</dc:subject>
		<dc:subject>snippet</dc:subject>

		<description>&lt;p&gt;un snippet qui propose une structure de d&#233;part pour organiser ses fonctions javascript, et g&#233;rer facilement certains &#233;v&#233;nements &lt;em&gt;(ex. : scroll, resize, callback de spip ...)&lt;/em&gt;&lt;/p&gt;

-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/script-50" rel="tag"&gt;script&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/javascript" rel="tag"&gt;javascript&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/snippet" rel="tag"&gt;snippet&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;textarea readonly='readonly' cols='40' rows='82' class='spip_cadre spip_cadre_block' dir='ltr'&gt;var App = function () { var fn1 = function() { } var fn2 = function() { } var fn3 = function() { } //########################## // Surveiller le scroll var spyScroll = function() { var scrollticker; $(window).on('scroll',function() { //Clear Timeout if one is pending if(scrollticker) { window.clearTimeout(scrollticker); scrollticker = null; } scrollticker=window.setTimeout(function(){ App.scroll(); }, 2500); // timeout }); } // Surveiller le resize var spyResize = function() { var resizeticker; window.onresize = function() { // Clear Timeout if one is pending window.clearTimeout(resizeticker); resizeticker=window.setTimeout(function(){ App.resize(); }, 2500); // timeout }; } // suivre ajaxcallback de spip var spySpipAjax = function() { if (typeof onAjaxLoad == 'function') { onAjaxLoad(App.reboot); } } //########################## return { //Attention &#224; l'ordre d'appel des modules init: function () { fn1(); fn2(); fn3(); // les fonctions &#034;espions&#034; spySpipAjax(); spyScroll(); spyResize(); }, // ici les fonctions &#034;ajaxcallback proof&#034; reboot: function () { fn2(); }, // ici les fonctions qui r&#233;agissent au scroll scroll: function () { fn3(); }, // ici les fonctions qui r&#233;agissent au resize screen resize: function () { fn3(); } }; }(); //go ! $(function(){App.init();});&lt;/textarea&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;mis &#224; jour le 21 f&#233;vrier 2016&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>La boucle (DATA) - SPIP &lt;3 OpenData</title>
		<link>https://blog.roxing.net/la-boucle-data-spip-3-opendata</link>
		<guid isPermaLink="true">https://blog.roxing.net/la-boucle-data-spip-3-opendata</guid>
		<dc:date>2014-06-05T01:42:47Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>placido</dc:creator>


		<dc:subject>spip</dc:subject>
		<dc:subject>webdev</dc:subject>

		<description>
&lt;p&gt;La page r&#233;f&#233;rence de la boucle DATA de SPIP&lt;/p&gt;


-
&lt;a href="https://blog.roxing.net/signets" rel="directory"&gt;signets&lt;/a&gt;

/ 
&lt;a href="https://blog.roxing.net/spip-49" rel="tag"&gt;spip&lt;/a&gt;, 
&lt;a href="https://blog.roxing.net/webdev" rel="tag"&gt;webdev&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;La page r&#233;f&#233;rence de la boucle DATA de SPIP&lt;/p&gt;&lt;/div&gt;
		&lt;div class="hyperlien"&gt;Voir en ligne : &lt;a href="http://spip-love-opendata.nursit.com/la-boucle-data" class="spip_out"&gt;La boucle (DATA) - SPIP &lt;3 OpenData&lt;/a&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
