Codes et astuces SPIP (archives)

par Jean - netologiste.com | Mis à jour le 2 Déc 2023 | WordPress | 0 commentaires

Avant WordPress, j’ai travaillé des années avec le CMS SPIP, et avant SPIP, je codais un CMS depuis zéro pour chaque projet. Voici quelques archives de notes diverses sur SPIP.

Les plugins SPIP s’affichent en double

Des doublons dans la liste des plugins SPIP, ils s’affichent tous en double ?

Une de ces deux solution doit réparer le problème :

http://domaine.com/ecrire/?exec=admin_plugin&?var_mode=vider_paquets_locaux
http://domaine.com/ecrire/?exec=admin_plugin&var_mode=reinstaller_svp

Fatal error: Maximum function nesting level of ‘100’ reached avec champs extra ou autre avec SPIP

Si vous rencontrez cette erreur : Fatal error : Maximum function nesting level of ’100’ reached c’est que xdebug est actif. Il faut augmenter sa profondeur d’exécution. Par exemple en mettant dans votre config/mes_options.php l’instruction suivante

<?php
ini_set('xdebug.max_nesting_level', 200);

Note : Si ça marche pas en local, commenter la ligne suivante dans le php.ini :
zend_extension = "d:/wamp/bin/php/php5.3.8/zend_ext/php_xdebug-2.1.2-5.3-vc9.dll

Source : http://contrib.spip.net/Champs-Extras-3

Compression CSS site SPIP

En activant la compression CSS, la plupart des CSS de mon site sont compressés, à l’exception de :

spip.php ?page=saisies.css
/prive/spip_admin.css
plugins/auto/crayons/v1.25.0/crayons.css

A priori, c’est des CSS qui ne sont chargées que parce que tu es connecté comme admin au site.

Est-ce qu’elles sont aussi chargées sur un navigateur qui n’a pas le cookie de connexion et sur lequel tu n’es pas connecté en tant qu’admin ? (tu peux tester en mode de navigation privée de ton navigateur).

http://forum.spip.net/fr_265551.html#forum265557

Sélections éditoriales (plugin SPIP)

Le plugin SPIP « Sélections éditoriales » permet de sélectionner n’importe quel contenu du site et de l’afficher dans un squelette.

Page du plugin : https://contrib.spip.net/Selections-editoriales

Pour boucler sur les objets :

<BOUCLE_si_article(ARTICLES){id_article=#ID_OBJET}{si #OBJET|=={article}}>

Optimiser SPIP PageSpeed Google Insight

Ce superbe travail d’Arno permet d’atteindre presque 100% en PageSpeed avec l’outil Google Insights pour un site SPIP.

Aborde de nombreux points d’optimisation d’un site SPIP dont le fameux « Exploiter la mise en cache du navigateur » demandé par Google.

http://www.paris-beyrouth.org/tutoriaux-spip/article/objectif-pagespeed-100-100-avec

SPIP Agenda : événements non liés à un article

Le plugin Agenda de SPIP permet de créer des événements sans obligatoirement les lier à un article depuis la mise à jour du 24 octobre 2016.

La constante _AGENDA_AUTORISER_ORPHELINS dans mes_options.php permet de gérer des événements indépendants/orphelins.

Sources :

http://contrib.spip.net/Agenda-2-0#forum489538
http://zone.spip.org/trac/spip-zone/changeset/100118/_plugins_/agenda

SPIP {branche} id_secteur exemple

Exemples branche et id_secteur, tests du du 21/10/2016 sur SPIP 3.1.3 :

<BOUCLE_p(ARTICLES){id_article=50}>
<strong>base : #TITRE</strong><br>
<BOUCLE_articlesMemeRubRacine(ARTICLES){branche}{0,1000}>
#TITRE <BOUCLE_r(RUBRIQUES){id_rubrique}>(#TITRE)</BOUCLE_r><br>
</BOUCLE_articlesMemeRubRacine>
</BOUCLE_p>

Donne seulement les articles de la sous-rubrique dans laquelle est situé l’article 50.

<BOUCLE_p(ARTICLES){id_article=50}>
<strong>base : #TITRE</strong><br>
<BOUCLE_articlesMemeRubRacine(ARTICLES){branche #ID_SECTEUR}{0,1000}>
#TITRE <BOUCLE_r(RUBRIQUES){id_rubrique}>(#TITRE)</BOUCLE_r><br>
</BOUCLE_articlesMemeRubRacine>
</BOUCLE_p>

Donne tous les articles à partir de la rubrique racine (le secteur) de l’article 50 et de toutes ses sous-rubriques.

SPIP id_mot!= et !id_mot=

Sélectionner un article qui n’est pas associé au mot 5 : {!id_mot=5}

{id_mot!=5} fait quelque chose d’autre (todo : préciser), j’ai eu le cas où {id_mot!=5} me sort des articles liés au mot 5

Autres ressources sur ces liaisons de mots dans SPIP avec mots_liens : http://marcimat.magraine.net/SPIP-3-Documents-Mots

Autre note à tester pour la boucle documents  (source) :

Cacher les emails des auteurs dans SPIP

Pour des raisons de confidentialité, on peut vouloir masquer les emails des auteurs dans Edition > Auteurs dans SPIP.

Solution à tester : http://forum.spip.net/fr_174451.html#forum265117 http://forum.spip.net/fr_174451.html#forum266506

Source : http://forum.spip.net/fr_174451.html#forum265117

SPIP trier tableau #ARRAY asort

function mon_filtre_asort($a) {
asort($a);
return $a;
}

#SET{montab, #GET{montab}|mon_filtre_asort}

SPIP : additionner dates, filtre balise demain ajouter jours

Balises date SPIP demain

Demain

[(#EVAL{date("Y-m-d H:i:s", strtotime("+1day"))})]

Dans 10 jours

[(#EVAL{date("Y-m-d H:i:s", strtotime("+10day"))})]

Balise #DEMAIN

function balise_DEMAIN($params) {
   $params->code = "date('d-m-Y', time()+24*3600)";
   $params->type = 'php';  
   return $params;
}

Critères date SPIP demain

hier :
{date_heure==^((#EVAL{date("Y-m-d", strtotime("-1day"))}))}
demain :
{date_heure==^((#EVAL{date("Y-m-d", strtotime("+1day"))}))}

date_heure, c’est pour les brèves, pour les articles, on aura {date==^...}

Note : les ==^ correspondent à des expressions régulières (regexp)

Avec le critère {where}

Syntaxe à tester : le critère {where} de SPIP, comme qqch du genre

{where date BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 10 DAY)}

<BOUCLE_test_where(ARTICLES){where #VAL{"date BETWEEN DATE_SUB(NOW(), INTERVAL 8 DAY) AND NOW()"}}>

Exemples

Sélectionner des objets dont une date quelconque est située entre maintenant et dans 10 jours

function balise_DANS10JOURS($params) {
$params->code = "date('Y-m-d H:i:s', time()+24*10*3600)";
$params->type = 'php';
return $params;
}

<BOUCLE_a(OBJET) {date_perso>=#DATE} {date_perso<=#DANS10JOURS}>

Idéalement il faudrait une balise du type #DATE_FUTURE{10} ou mieux, un critère < {#DATE{+10day}} qui fonctionne sans regexp

Source : http://www.weblog.eliaz.fr/article53.html (partie commentaires), IRC #spip, et mes propres essais

Sélecteur article SPIP (champs extra, La Fabrique …) : comment récupérer ses valeurs dans un squelette

Un champ de Saisie (plugin Saisies) de type sélecteur article avec SPIP permet de naviguer dans l’arborescence du site et de sélectionner un article.

Comment récupérer les valeurs de ce sélecteur d’article dans le squelette SPIP

[(#NOM_CHAMP|picker_selected{article}|table_valeur{0})]

Exemple de récupération de l’id de l’article pour une boucle SPIP de type ARTICLES :

<BOUCLE_a(ARTICLES){id_article=#NOM_CHAMP|picker_selected{article}|table_valeur{0}}>
#TITRE
</BOUCLE_a>

Autre méthode :

[(#NOM_CHAMP|explode{|}|table_valeur{0})]
[(#NOM_CHAMP|explode{|}|table_valeur{1})]

ex :
[(#NOM_CHAMP|explode{|}|table_valeur{0}|=={article}|oui)
<INCLURE{fond=inc-btn-ensavoirplus-article,id_article}>
]
[(#NOM_CHAMP|explode{|}|table_valeur{0}|=={rubrique}|oui)
<INCLURE{fond=inc-btn-ensavoirplus-rubrique,id_article}>
]

SPIP : La Fabrique (de plugins)

Lors de la création d’un plugin SPIP avec la Fabrique, si on obtient « table non trouvé » lorsqu’on veut naviguer dans un nouvel objet éditorial alors qu’on pensait que le plugin devrait avoir crée la table de l’objet en question : modifier le shéma du plugin dans la Fabrique > onglet Plugin > Installation schema (mettre par ex. 1.0.1 s’il était à 1.0.0) et recréer le plugin. Alternative à tester : désinstaller le plugin au lieu de simplement le désactiver.

En effet, SPIP mettra à jour la base de données s’il pense qu’il doit le faire, pas si nous pensons qu’il doit le faire.

Sélecteur d’article avec la Fabrique

Ne fonctionne pas car le champ renvoie un array au lieu de renvoyer une valeur comme attendue.

Rustine à tester : https://contrib.spip.net/saisie-selecteur_article

Solution temporaire en attendant que le bug de La Fabrique soit réparé :

  • dans plugins/NOMPLUGIN/formulaires/ editer_OBJET.php
  • ajouter au début de la fonction function formulaires_editer_OBJET_verifier_dist()
  • $champs_a_implode = array('CHAMP1','CHAMP2');
    foreach($champs_a_implode as $un_champ_a_implode) {
    if ( _request($un_champ_a_implode) != '') {
    $testme = trim(implode(' ', _request($un_champ_a_implode))) ;
    if (strlen($testme) == 0) set_request($un_champ_a_implode, '') ;
    else set_request($un_champ_a_implode, implode(',', _request($un_champ_a_implode))) ;
    }
    }

Désactiver les logos pour un nouvel objet éditorial

Plugin LIM : http://plugins.spip.net/lim.html

Astuces à tester : http://www.akilia.net/La-Fabrique-de-SPIP-aller-plus-loin

Compter le nombre d’occurences d’un caractère dans une chaîne en MySQL

Exemple : compter le nombre de points d’interrogation dans le texte des articles d’un site SPIP en MySQL :

select `id_article`, `texte`, LENGTH(`texte`) - LENGTH(REPLACE(`texte`, '?', '')) as `number` from `spip_articles` ORDER BY number desc

Conclusion

Ces notes datent de ~2016 et peuvent ne plus être pertinentes. Je ne travaille plus du tout avec SPIP, donc ne pourrais pas vous aider. WordPress c’est bien.

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Besoin d’aide personnalisée ?

Recevez de l’aide directement sur votre site : lors d’un appel Zoom avec partage d’écran, je travaillerais avec vous sur votre site.

Pratiquez à votre rythme avec les formations en ligne

Formation WordPress

Apprendre WordPress

Comprenez WordPress de A à Z : formation complète en vidéo pour tout apprendre de WordPress.

Formation Découvrir Divi

Découvrir Divi

Créez votre site Web sans faire de code grâce au constructeur visuel Divi.

Formation Mieux utiliser Divi

Mieux utiliser Divi

Mon expérience après avoir aidé des dizaines d'entreprises à améliorer leur site Web Divi.

Formation Hébergement

Guide hébergement

Un hébergement Web avec votre installation de WordPress dès aujourd’hui.

Formation Divi Intégration Web

Divi intégration Web

Création d'une page Web complexe à partir d'une maquette graphique.

Obtenez ma formation Divi gratuitement

Recevez ma formation Divi gratuite avec des astuces pour vous simplifier le quotidien.

Vous allez recevoir un email à l'adresse que vous avez indiqué.