utilisations balises SPIP en php ?

Bonjour,

ma question est peut-être triviale mais je ne trouve pas de réponse.

Je « joue » avec le plug-ins « définitions ». Je cherche à le modifier pour que au lieu de générer des tooltips gérés par le navigateur de façon passive, les tooltips soient gérés en CSS. Pour cela j’utilise Bootstrap. Ca j’ai réussi à le faire, en surchargeant le fichier de filtres « dictionnaires.php » comme suit :

Code HTML de remplacement de la définition
*/
function dictionnaires_remplacer_defaut_dist($mot, $definition) {
$class="";
if ((!isset($definition[‹ url ›]) OR !$url = $definition[‹ url ›]) && (!isset($definition[‹ url_externe ›]) OR !$url = $definition[‹ url_externe ›])) {
$url = generer_url_entite($definition[‹ id_definition ›],‹ definition ›);
}else{
if(strpos($url,‹ http ›) == 0)
$class=« spip_out »;
}
$class = (strlen($class) > 0) ? " class=’$class’ " : «  »;
$theDef = _T(‹ definition:titre_definition ›).’: ’
. couper(trim(attribut_html(supprimer_tags(typo(expanser_liens($definition[‹ texte ›]))))),300);
return $mot
.’<a href="’.$url.’"’.$class.‹ title=" ›.$theDef.’"’.‹ data-original-title=" ›.$theDef.’" data-toggle=« tooltip » data-html=« true »>’
.’?’
.’
;
}

Maintenant, j’aimerais que le logo associé à la définition apparaisse dans le ToolTip (comme dans Wikipedia).
Et là je sèche : je ne sais pas comment accéder aux balises de spip en PHP.
La balise associée au logo de la définition se nomme #LOGO_DEFINITION

De façon générale, je ne sais pas utiliser les fonctionnalités de SPIP en PHP. Existe-t-il une fonction d’évaluation de code SPIP via php par exemple ?

Merci !
Mikhaël

Mikhaël MYARA a écrit le 17/11/2017 à 20:50 :

Bonjour,

ma question est peut-être triviale mais je ne trouve pas de réponse.

Je "joue" avec le plug-ins "définitions". Je cherche à le modifier pour que au lieu de générer des tooltips gérés par le navigateur de façon passive, les tooltips soient gérés en CSS. Pour cela j'utilise Bootstrap. Ca j'ai réussi à le faire, en surchargeant le fichier de filtres "dictionnaires.php" comme suit :

Code HTML de remplacement de la définition
*/
function dictionnaires_remplacer_defaut_dist($mot, $definition) {
$class="";
if ((!isset($definition['url']) OR !$url = $definition['url']) && (!isset($definition['url_externe']) OR !$url = $definition['url_externe'])) {
$url = generer_url_entite($definition['id_definition'],'definition');
}else{
if(strpos($url,'http') == 0)
$class="spip_out";
}
$class = (strlen($class) > 0) ? " class='$class' " : "";
$theDef = _T('definition:titre_definition').': '
. couper(trim(attribut_html(supprimer_tags(typo(expanser_liens($definition['texte']))))),300);
return $mot
.'<sup class="spipDefinitionTip"><a href="'.$url.'"'.$class.'title="'.$theDef.'"'.'data-original-title="'.$theDef.'" data-toggle="tooltip" data-html="true">'
.'?'
.'</a></sup>;
}

Maintenant, j'aimerais que le logo associé à la définition apparaisse dans le ToolTip (comme dans Wikipedia).
Et là je sèche : je ne sais pas comment accéder aux balises de spip en PHP.
La balise associée au logo de la définition se nomme #LOGO_DEFINITION

De façon générale, je ne sais pas utiliser les fonctionnalités de SPIP en PHP. Existe-t-il une fonction d'évaluation de code SPIP via php par exemple ?

Fait un squelette qui fait ce que tu veux pour #LOGO_DEFINITION
Vide ton cache
Affiche la page générée par le squelette
Va voir le PHP mis en cache par SPIP
Et voilà !

--
RealET

Fait un squelette qui fait ce que tu veux pour #LOGO_DEFINITION
Vide ton cache
Affiche la page générée par le squelette
Va voir le PHP mis en cache par SPIP

Ah, mais c'est malin, ça : où peut-on consulter/visualiser le code php généré par SPIP ?

Manu a écrit le 18/11/2017 à 12:16 :

Fait un squelette qui fait ce que tu veux pour #LOGO_DEFINITION
Vide ton cache
Affiche la page générée par le squelette
Va voir le PHP mis en cache par SPIP

Ah, mais c'est malin, ça : où peut-on consulter/visualiser le code php généré par SPIP ?

var_mode=debug d'une part
Et dans le dossier cache/

PS : de mémoire, quete_logo est sans doute la fonction cherchée
https://code.spip.net/autodoc/tree/ecrire/public/quete.php.html#function_quete_logo_objet

--
RealET

Bonjour,
  ca a très bien marché, merci !
    Mon script de test (nom : testDef.html, placé à la racine du site) contenait :
<BOUCLE_definition(DEFINITIONS){id_definition}>
[(#LOGO_DEFINITION|image_responsive{200})]
</BOUCLE_definition>
Après avoir vidé le cache, j’ai invoqué mon site en passant ?page=testDef&id_definition=2

Puis il faut aller dans le sous répertoire « tmp/cache/skel » et là plusieurs fichiers (pour moi il y en avait 3) html/php apparaissent. 2 sont liés à l’espace privé et ne m’intéressaient pas, le 3ieme contenait un commentaire dans lequel testDef apparaissait. C’était le bon.

Dans le code généré, il y avait un ensemble de choses qui ne m’intéressaient pas (notamment la boucle faisait appel à la BDD, ce dont je n’avais pas besoin puisque j’étais dans le contexte du plug-in qui avait déjà réalisé cette opération). J’ai extrait les quelques lignes qui m’intéressaient (notament une contenait en effet l’appel à quete_logo). Il faut juste faire attention au fait que les variables contenues dans ces lignes font appel à la pile de SPIP (par exemple pour retrouver id_definition). Or j’avais accès directement à id_definition dans mon script.

J’ai rapidement abouti au code ci-après (ce que j’ai piqué dans le cache est la ligne $logo= … , le reste étant le code d’origine à peu de choses près).

  Merci !

/**
* Fonction de remplacement par défaut pour les termes trouvés dans les textes
*
* @param string $mot
* Le mot trouvé
* @param string $definition
* La définition correspondante
* @return string
* Code HTML de remplacement de la définition
*/
function dictionnaires_remplacer_defaut_dist($mot, $definition) {
  $class="";
  if ((!isset($definition['url']) OR !$url = $definition['url']) && (!isset($definition['url_externe']) OR !$url = $definition['url_externe'])) {
    $url = generer_url_entite($definition['id_definition'],'definition');
  }else{
    if(strpos($url,'http') == 0)
      $class="spip_out";
  }
  $class = (strlen($class) > 0) ? " class='$class' " : "";
  $theDef = _T('definition:titre_definition').': '
      . couper(trim(attribut_html(supprimer_tags(typo(expanser_liens($definition['texte']))))),300);
//$theDef = "<em>".$theDef."</em>";
$logo .= (
'' .
filtrer('image_graver',image_responsive(
((!is_array($l = quete_logo('id_definition', 'ON', $definition['id_definition'],'', 0))) ? '':
("<img class=\"spip_logo spip_logos\" alt=\"\" src=\"$l[0]\"" . $l[2] . ($l[1] ? " onmouseover=\"this.src='$l[1]'\" onmouseout=\"this.src='$l[0]'\"" : "") . ' />')),'200')) .
'');
$theDef = $logo.$theDef;

  return $mot
    .'<sup class="spipDefinitionTip"><a href="'.$url.'"'.$class.'data-original-title="'.$theDef.'" data-toggle="tooltip" data-html="true">'
    .'?'
    .'</a></sup>';//'<pre>'.print_r($definition,true).'</pre>' ;
}

  L’un d’eux contient dans le commentaire

Le 18 nov. 2017 à 12:56, RealET <real3t@gmail.com> a écrit :

Manu a écrit le 18/11/2017 à 12:16 :

Fait un squelette qui fait ce que tu veux pour #LOGO_DEFINITION
Vide ton cache
Affiche la page générée par le squelette
Va voir le PHP mis en cache par SPIP

Ah, mais c'est malin, ça : où peut-on consulter/visualiser le code php généré par SPIP ?

var_mode=debug d'une part
Et dans le dossier cache/

PS : de mémoire, quete_logo est sans doute la fonction cherchée
https://code.spip.net/autodoc/tree/ecrire/public/quete.php.html#function_quete_logo_objet

--
RealET

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc