Utilisation pipeline insert_head ou insert_head_css

Je cherche un petit coup de main quant à l’utilisation du pipeline insert_head ou insert_head_css.

Pour le même code si j’utilise l’un ou l’autre des fonctions, je n’ai pas la même réponse de mon SPIP. J’ai fait attention à bien déclarer les fonctions dans paquet.xml :

Cas numéro 1
SPIP ne prend pas en compte la feuille ou partiellement, mais je ne sais pas comment. En regardant les sources le fichier archil.css n’est pas présent

function archil_insert_head_css($flux){
	$flux .= '<link rel="stylesheet" type="text/css" href="'.find_in_path('css/archil.css').'" />';
	return $flux;
}

Cas numéro 2
SPIP prend compte la feuille. En regardant les sources le fichier archil.css est présent. Mais du coup ça ne me semble pas être la bonne fonction à utiliser pour injecter du CSS dans mon squelette.

function archil_insert_head($flux){
	$flux .= '<link rel="stylesheet" type="text/css" href="'.find_in_path('css/archil.css').'" />';
	return $flux;
}

Du coup est-ce que quelqu’un⋅e a des éléments d’explications ?


Par ailleurs dans les exemples qui illustrent la page de documentation insert_head_css - Programmer avec SPIP 4

la variable est écrite une fois sous cette forme :

 $flux .= '<link rel="stylesheet" href="'.$css.'" type="text/css" media="all" />';

et une seconde sour cette forme :

flux .= 
    "<link rel='stylesheet' type='text/css' media='all' href='$css' />\n"
    ."<link rel='stylesheet' type='text/css' media='all' href='$css_icones' />\n";

Les " et autres ' ont ils une importance ? En esperant avoir été clair.

Est-ce que tu as bien cette balise dans ton squelette : #INSERT_HEAD_CSS - SPIP (avant la balise #INSERT_HEAD - SPIP) ?

Arg non pas du tout, je n’ai mis aucune de ces 2 balises dans mon squelette.

Correction oui, parce que je m’appuie sur le squelette head de la dist, du coup les 2 sont présent.

Pour répondre sur les " et les ' aucune importance c’est selon les préférences de chacune et ce n’est pas spécifique à SPIP mais au php et au html

les " en php permettent d’interpréter les variables, et si il n’y en a pas, on préfèrera mettre des '
L’écriture html se moque de savoir si les attributs sont entourés de " ou de '.
Perso, je trouve plus élégant d’avoir des " ainsi

	$flux .= '<link rel="stylesheet" type="text/css" href="'.find_in_path('css/archil.css').'" />';

Le petit supplément important c’est media="all" car si tu as demandé dans la config SPIP de compresser le flux des CSS en un seul, il me semble qu’il faut obligatoirement l’ajouter si tu veux que ta CSS soit comprise dedans.

CF Caches CSS et Javascript - Programmer avec SPIP 4
SPIP créera un fichier CSS compacté par type de média (screen, print...)

1 « J'aime »

En termes de convention d’écriture du code, ces pages en php sont régies par ce standard utilisé par SPIP : Standard "SCS1" - SPIP

Pour confirmer ma lecture de la doc et mon écriture de code ?

Salut @Plumf, content de te revoir par ici :slight_smile:

Le plus simple pour qu’on t’aider à débugger le bouzin serait que tu envoies tes modifications en l’état dans une branche de dev du repo de ton squelette/plugin. Ainsi, on pourra récupérer ton code et le tester de notre côté pour te dire ce qui cloche.

1 « J'aime »

Voilà la branche de dev/demo

Héhé, tu disais :

Mais je n’en vois aucune trace dans paquet.xml · dev_demonstration · spip-contrib-squelettes / archil · GitLab

Fix ! Je l’avais laissé dans mon dossier squelettes

Chez moi, avec ce code ça fonctionne bien :

function archil_insert_head_css($flux) {
	$flux .= '<link rel="stylesheet" type="text/css" href="'.find_in_path('css/archil.css').'" />';
	return $flux;
}

Idem avec :

function archil_insert_head_css($flux) {
	$css = timestamp(direction_css(find_in_path('css/archil.css')));

	// VERSION 3 GÉNÉRER LES VARIABLES

	//$css_var = produire_fond_statique(find_in_path('css/variables.css'));

	$flux .= 
	"<link rel='stylesheet' type='text/css' media='all' href='$css' />";

	return $flux;
}

Et ainsi aussi pour finir :

function archil_insert_head_css($flux) {
	$css = timestamp(direction_css(find_in_path('css/archil.css')));

	// VERSION 3 GÉNÉRER LES VARIABLES

	$css_var = produire_fond_statique('css/variables.css');

		$flux .= 
	"<link rel='stylesheet' type='text/css' media='all' href='$css' />"
	."<link rel='stylesheet' type='text/css' media='all' href='$css_var' />";

	return $flux;
}

Bref, il faut utiliser produire_fond_statique('css/variables.css') et non produire_fond_statique(find_in_path('css/variables.css')).

Je viens de retester avec un SPIP tout neuf et ça fonctionne à la perfection…
Aaaah, je n’aime pas ne pas comprendre pourquoi, mais c’est comme ça…

Merci pour le temps accordé au (non) debugage de mon code @b_b :smiley:

Après un petit peu de bricolage et de recherche, je pense avoir identifié un des problèmes que je supposais être un problème de pipeline, mais qui n’en est pas.

En utilisant la fonction insert_head_css, le fichier theme.css de la dist se charge après archil.css et du coup la dist surcharge le squelette Archil au lieu que ce soit le contraire.

Ce qui n’est pas le cas quand j’utilise la fonction insert_head qui introduit le fichier archil.css après theme.css ce qui est le fonctionnement recherché.


Solutions ???

  1. Renommer archil.css en theme.css en intégrant avant ça l’ensemble de theme.css de la dist (Afin de ne pas perdre des fonctionnalités) ?
  2. Est-il préférable d’intégrer une copie du squelette head.html modifié pour Archil ?