Valider 4265030c rédigé par cerdic's avatar cerdic
Parcourir les fichiers

#PRODUIRE{fond=styles.css,...}

generer un fichier statique qui contient le resultat du squelette styles.css.html et retourne le chemin de ce fichier statique.
On peut donc utiliser une feuille de style dynamique avec la syntaxe
[<link rel="stylesheet" href="(#PRODUIRE{fond=styles.css}|direction_css)" type="text/css" media="all" />]
sans degrader la performance des pages (css sous forme de fichier statique).
#PRODUIRE reconait les extensions css et js, et stocke le reste sous l'extension html.
Si le squelette ne finit pas par une extension .css.html ou .js.html, il est possible de préciser le format dans les arguments de #PRODUIRE :
[<link rel="stylesheet" href="(#PRODUIRE{fond=styles,format=css}|direction_css)" type="text/css" media="all" />]
afin que le fichier statique ait bien la bonne extension.
parent 6a7d45fe
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+53 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -2689,4 +2689,57 @@ function insert_head_css_conditionnel($flux){
	}
	return $flux;
}

/**
 * Produire un fichier statique a partir d'un squelette dynamique
 * Permet ensuite a apache de le servir en statique sans repasser
 * par spip.php a chaque hit sur le fichier
 * si le format (css ou js) est passe dans contexte['format'], on l'utilise
 * sinon on regarde si le fond finit par .css ou .js
 * sinon on utilie "html"
 *
 * @param string $fond
 * @param array $contexte
 * @param array $options
 * @param string $connect
 * @return string
 */
function produire_fond_statique($fond, $contexte=array(), $options = array(), $connect=''){
	if (isset($contexte['format'])){
		$extension = $contexte['format'];
		unset($contexte['format']);
	}
	else {
		$extension = "html";
		if (preg_match(',[.](css|js)$,',$fond,$m))
			$extension = $m[1];
	}
	// recuperer le contenu produit par le squelette
	$options['raw'] = true;
	$cache = recuperer_fond($fond,$contexte,$options,$connect);

  // calculer le nom de la css
	$dir_var = sous_repertoire (_DIR_VAR, 'cache-'.$extension);
	$filename = $dir_var . $extension."dyn-".md5($fond.serialize($contexte).$connect) .".$extension";

	// mettre a jour le fichier si il n'existe pas
	// ou trop ancien
  if (!file_exists($filename)
	  OR filemtime($filename)<$cache['lastmodified']){

	  $contenu = $cache['texte'];
	  // passer les urls en absolu si c'est une css
	  if ($extension=="css")
	    $contenu = urls_absolues_css($contenu, generer_url_public($fond));

    $comment = "/* #PRODUIRE{fond=$fond";
    foreach($contexte as $k=>$v)
	    $comment .= ",$k=$v";
    $comment .="} le ".date("Y-m-d H:i:s")." */";
	  // et ecrire le fichier
    ecrire_fichier($filename,$comment.$contenu);
  }

  return $filename;
}
?>
 No newline at end of file
+26 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -1417,4 +1417,29 @@ function balise_PUBLIE_dist($p) {
	$p->interdire_scripts = false;
	return $p;
}

/**
 * #PRODUIRE
 * generer un fichier statique a partir d'un squelette SPIP
 *
 * Le format du fichier sera extrait de la preextension du squelette (typo.css.html, messcripts.js.html)
 * ou par l'argument format=css ou format=js passe en argument.
 *
 * Si pas de format detectable, on utilise .html, comme pour les squelettes
 *
 * <link rel="stylesheet" type="text/css" href="#PRODUIRE{fond=css/macss.css,couleur=ffffff}" />
 * la syntaxe de la balise est la meme que celle de #INCLURE
 *
 * @param object $p
 * @return object
 */
function balise_PRODUIRE_dist($p){
	$balise_inclure = charger_fonction('INCLURE','balise');
	$p = $balise_inclure($p);

	$p->code = str_replace('recuperer_fond(','produire_fond_statique(',$p->code);

	return $p;
}

?>
 No newline at end of file