[spip-dev] modifier une fonction de SPIP

Bonjour,

tout d'abord, laissez moi vous dire que je vous
félicite pour le développement de SPIP. C'est un outil
qui m'est très utile, et dont je me sers actuellement
pour un projet assez important.

A ce titre, je souhaiterais modifier l'interpretation
de la variable #TEXTE. En effet, il faut que lorsque
je place 2 retour a la ligne, SPIP me cree un nouveau
paragraphe, mais lorsque je place un seul retour a la
ligne, il faut que SPIP me place une balise "<br>".
J'avais au depart, decide d'ecrire une fonction dans
le fichier "Mes_fonctions.php" toutefois, cette
methode ne me satisfait pas car je dois filtrer mon
#TEXTE en textebrut, et je perd donc toute la mise en
page de SPIP.

je souhaite donc reecrire la fonction qui interprete
le code de la base de données mais je n'arrive
malheureusement pas a le situer parmis les fichiers
SPIP.

Pourriez vous donc m'indiquer ou se trouve cette
fonction (et son nom par la meme occasion) afin que je
puisse effecuter les modifications.

Je tiens a vous preciser que si vous le souhaitez, je
vous enverrais la fonction modifier.

Merci de votre reponse,

cordialement,

Borner Frédéric.
développeur / ergonome

ben j'ai le meme probleme !
je voudrais faire un postprocessing sur le contenu de #texte pour que
nos auteurs puissent utiliser des codes de typo propres a notre site
(glossaire, adressbook etc...)
j'avoue ne pas encore avoir regarde en detail le code, c'est peut-etre
trivial.
ce week-end peut-etre.

mais je me disais que le mieux, ce serait peut-etre de permettre la
definition d'un filtre utilisateur dans mes_fonctions.php3 qui serait
appelee si elle existe. on lui passe le #texte et elle en retourne un
nouveau.

ca permettrait de faire ce qu'on veut d'une maniere generique, non ?

quelqu'un m'aide a trouver ou mettre ca ? (le nom du fichier/de la
fonction me suffirait)

Joel

Je pense que c'est /ecrire/inc_texte.php3

Cordialement

Oui, la bonne solution est celle-là. Tu fais une fonction function mabidouille dans mes_fonctions.php3 et tu l'appelles dans le squelette par [(#TEXTE|mabidouille)]

   Ca marche bien, avec le cache etc. Et ce ne sera pas viré à la prochaine version de Spip.

Gr

>je souhaite donc reecrire la fonction qui interprete
>le code de la base de données mais je n'arrive
>malheureusement pas a le situer parmis les fichiers
>SPIP.

Je pense que c'est /ecrire/inc_texte.php3

eh bien oui ! apres avoir parcouru le code de spip, je confirme.

plus precisement : function traiter_raccourcis
c'est cette fonction qui remplace tous les raccourcis typographiques par
le code HTML associe.
d'ailleurs en passant : le code stocke dans la base de donnees contient
encore tout les raccourcis typo de spip.

peut-etre aussi expliquer mon probleme : je souhaite pouvoir utiliser
des raccourcis typo 'proprietaires', cad non-existants dans spip et qui
ne servent peut-etre pas a grand'monde si ce n'est a mes auteurs. une
possibilite serait de passer #TEXTE dans une moulinette lors de
l'affichage des pages, mais ca ne resoud pas le probleme de la
previsualisation lors de l'ecriture.

il semble donc qu'il faille intervenir sur traiter_raccourcis
directement.

l'ideal serait d'appeler une fonction generique
ma_fonction_traiter_raccourcis (si elle est definie, dans
mes_fonctions.php3 par ex.). Ca permettrait a chacun d'integrer ses
propres fonctions selon ses besoins.
Je ne sais pas encore trop si il vaut mieux l'appeler avant ou apres le
reste de traiter_raccourcis.
avant : on peut generer des raccourcis compatibles avec spip qui seront
moulines comme le reste, mais on ne peut pas faire de postprocessing.
apres : on peut faire du postprocessing (on est sur que spip ne viendra
plus rien changer), mais on est oblige de traiter les raccourcis
soi-meme puisque spip n'y touche plus.

ou alors faire 2 fonctions, une pre- et une post-processing ?

les developpeurs, vous en pensez quoi ?

Joel

possibilite serait de passer #TEXTE dans une moulinette lors de
l'affichage des pages, mais ca ne resoud pas le probleme de la
previsualisation lors de l'ecriture.

il semble donc qu'il faille intervenir sur traiter_raccourcis
directement.

../...

les developpeurs, vous en pensez quoi ?

Je pense que c'est peut-être une bonne idée pour toi, mais une mauvaise idée
pour SPIP en général : en effet chaque site spip aura alors un espace privé
se comportant différemment, et les réflexes qu'on pourra acquérir sur l'un
ne fonctionneront pas sur l'autre. D'où une fragmentation, non désirable.
L'espace privé est le même, actuellement, sur quelques milliers (!!) de
sites. Donc plein de gens savent utiliser _les raccourcis SPIP_. Si ce
concept disapraît, on perd quelque chose d'important.

Par ailleurs, le jour où l'on envisagera d'intégrer des articles du site 1
dans le site 2 directement, de fusionner des bases SPIP, de modifier le
moteur typo pour affiner certains détails, etc, c'est mieux si tout le monde
a les mêmes raccourcis.

Mais sur ton site tu fais ce que tu veux, hein :wink:

-- Fil

Je me reponds (voir en bas)

> >je souhaite donc reecrire la fonction qui interprete
> >le code de la base de données mais je n'arrive
> >malheureusement pas a le situer parmis les fichiers
> >SPIP.
>
> Je pense que c'est /ecrire/inc_texte.php3

eh bien oui ! apres avoir parcouru le code de spip, je confirme.

plus precisement : function traiter_raccourcis
c'est cette fonction qui remplace tous les raccourcis typographiques
par le code HTML associe.
d'ailleurs en passant : le code stocke dans la base de donnees
contient encore tout les raccourcis typo de spip.

peut-etre aussi expliquer mon probleme : je souhaite pouvoir utiliser
des raccourcis typo 'proprietaires', cad non-existants dans spip et
qui ne servent peut-etre pas a grand'monde si ce n'est a mes auteurs.
une possibilite serait de passer #TEXTE dans une moulinette lors de
l'affichage des pages, mais ca ne resoud pas le probleme de la
previsualisation lors de l'ecriture.

il semble donc qu'il faille intervenir sur traiter_raccourcis
directement.

l'ideal serait d'appeler une fonction generique
ma_fonction_traiter_raccourcis (si elle est definie, dans
mes_fonctions.php3 par ex.). Ca permettrait a chacun d'integrer ses
propres fonctions selon ses besoins.
Je ne sais pas encore trop si il vaut mieux l'appeler avant ou apres
le reste de traiter_raccourcis.
avant : on peut generer des raccourcis compatibles avec spip qui
seront moulines comme le reste, mais on ne peut pas faire de
postprocessing. apres : on peut faire du postprocessing (on est sur
que spip ne viendra plus rien changer), mais on est oblige de traiter
les raccourcis soi-meme puisque spip n'y touche plus.

ou alors faire 2 fonctions, une pre- et une post-processing ?

les developpeurs, vous en pensez quoi ?

Joel

je viens d'avoir une reponse de Fil :
"Je pense que c'est peut-être une bonne idée pour toi, mais une mauvaise
idée
pour SPIP en général : en effet chaque site spip aura alors un espace
privé
se comportant différemment, et les réflexes qu'on pourra acquérir sur
l'un
ne fonctionneront pas sur l'autre. D'où une fragmentation, non
désirable."

donc : ce ne sera pas implemente d'office dans spip.

pour ceux qui souhaitent quand meme le faire (Frederic ?) de maniere
privee sur leur site :
editer ecrire/inc_texte.php3
tout en bas se trouve :
// Filtre a appliquer aux champs du type #TEXTE*
function propre($letexte) {
        return interdire_scripts(traiter_raccourcis(trim($letexte)));
}

modifier en :
// Filtre a appliquer aux champs du type #TEXTE*
function propre($letexte) {
        return
mon_postproc(interdire_scripts(traiter_raccourcis(mon_preproc(trim($let
exte)))));
}

et definir mon_preproc et mon_postproc dans mes_fonctions.php3

Warning quand meme : ca suppose une sacree bonne connaissance des
expressions regulieres, reflechissez a 2 fois avant de vous engager sur
cette voie !

Joel

et encore une fois...

Je me reponds (voir en bas)

> > >je souhaite donc reecrire la fonction qui interprete
> > >le code de la base de données mais je n'arrive
> > >malheureusement pas a le situer parmis les fichiers
> > >SPIP.
> >
> > Je pense que c'est /ecrire/inc_texte.php3
>
> eh bien oui ! apres avoir parcouru le code de spip, je confirme.

ben finalement je ne confirme qu'a moitie !

ecrire/inc_texte.php3 est responsable de l'apercu dans la partie privee,
mais la generation des pages de la partie publique (le "recalculer cette
page") et geree par inc_calcul_squelette.php3
et cette derniere n'appelle pas la fonction propre() de inc_texte.php3
!!!!
au contraire, elle definit des fonctions de pre- et post-processing
(voir autour de la ligne 867).
le probleme : le tableau/liste de fonctions de post/preprocessing est
initialise lors de l'appel de la fonction, donc aps moyen de le
precharger depuis mes_fonctions.php3 :frowning:

mes 3 questions :
1) pourquoi 2 codes differents pour generer le visuel ?
2) pourquoi mes_fonctions.php3 ne sont pas incluses dans la partie
privee ?
3) quel est le moyen le plus elegant d'implementer une fonction 'custom'
pour trifouiller dans #texte, autant dans la partie privee que publique
?

Joel

Juste mon chouième dans l'histoire : est-ce qu'il ne serait pas
possible de définir quelques fonctions "surchargeable" dans spip.
  Par exemple, la fonction propre() pourrait en fait être une variable
$fonction_propre=propre.
  Il suffit alors d'appeler $fonction_propre(...) là ou il y avait
propre(...) dans le code, et l'utilisateur peut définir sa propre
fonction et en forcer l'utilisation en faisant
$fonction_propre=mon_propre dans mes_fonctions.php3

  J'avais fait ça à un moment pour la fonction chercher_squelette, pour
un besoin spécifique. Ça n'a pas l'air de compliquer grandement les
choses, mais on gagne en souplesse dans la customisation (le problème
étant alors de décider ce qu'on rend "surchargeable" ...)

À+, Pif.

PS: bon allez, j'arrete les idées saugrenues pour ce matin :wink: