Bonjour,
Après avoir tatonné, j'ai enfin compris que la variable $url definie dans
mon fichier inc-public-global.php3 n'était plus connue une fois que la page
était stoquée dans le cache. Il me fallait donc la recalculer dans le
fichier article.html. Pour cela, j'ai modifié le fichier article.html de la
façon suivante (a l'intérieur d'une boucle sur ARTICLE) :
<?php
$chapo = "#CHAPO";
if (substr($chapo, 0, 1) == '=') {
$url = substr($chapo, 1);
?>
<!--
<object type="text/html" data=<?php echo("$url") ?>
width="650" height="450" border="1">
[Your user agent does not support frames or is currently configured
not to display frames. However, you may visit
<A href="<?php echo($url) ?>">the related document.</A>]
</object>
-->
<iframe src="<?php echo("$url") ?>"
width="650" height="450" border="1">
[Your user agent does not support frames or is currently configured
not to display frames. However, you may visit
<A href="<?php echo($url) ?>">the related document.</A>]
</iframe>
<?php
} else {
?>
[<B>(#CHAPO|justifier)<P></B>]
[(#TEXTE|justifier)]
<?php
}
?>
Mais je me suis aperçu que de n'arrivais pas à obtenir le contenu de #CHAPO.
Tous les champs marchaient sauf #CHAPO qui me rendait une chaine vide. J'ai
finalement découvert une fonction nettoyer_chapo dans ecrire/inc_texte.php3
qui était responsable de ce problème, et que j'ai donc neutralisée de la
façon suivante:
function nettoyer_chapo($chapo){
// if (substr($chapo,0,1) == "="){
// $chapo = "";
// }
return $chapo;
}
Maintenant, mon iframe ou object affiche bien la page extérieure à SPIP
comme attendu, même lorsqu'on utilise le cache au lieu de recalculer la
page.
MAIS j'ai maintenant le problème suivant:
Un autre article qui contient un champ CHAPO assez long avec des ' et des "
fait planter PHP dans le code suivant dans mon squelette article.html :
$chapo = "#CHAPO";
Vous avez une solution à cour terme ?
Il me semble qu'une solution plus propre à long terme serait la création
d'une nouvelle balise #URL_CHAPO par exemple, qui renverrait l'URL de la
page extérieure à SPIP stoquée dans chapo, et la chaine vide lorsque chapo
est utilisé dans sa fontionnalité standard. Ainsi, on pourrait laisser
activé la fonction nettoyer_chapo, qui est quand-même bien utile. Qu'en
pensez-vous ?
Etant nouveau en SPIP et même en PHP, je suis malheureusement incapable de
coder cette fonctionnalité pour l'instant. Il y a des volontaires ?
Alain
-----Message d'origine-----
De : spip-bounces@rezo.net [mailto:spip-bounces@rezo.net]De la part de
Alain Wittmann
Envoyé : samedi 2 novembre 2002 00:50
À : spip@rezo.net
Objet : [Spip] inclusion d'un article normalement redirrigé (chapo
commençant par =) dans un <object> ou un <iframe>
J'ai des pages formatées en HTML avec des feuilles de style,
et je voudrais
les intégrer dans SPIP. Au lieu d'utiliser le système de base
de SPIP, qui
lie un article à la page telle quelle (et donc sans barre de
navigation en
haut, sans pied, etc.) j'aurais aimé créer un squelette qui utilise un
iframe ou object dans laquelle la page apparaisse. Des idées
sur comment
faire cela ?
J'ai effectué les modifications suivantes, et ça marche PRESQUE :
Dans inc-public-global.php3, commenter les lignes après $url =
substr($chapo, 1) ; :
if ($id_article) {
$query = "SELECT chapo FROM spip_articles WHERE
id_article='$id_article'";
$result = spip_query($query);
while($row = mysql_fetch_array($result)) {
$chapo = $row['chapo'];
}
if (substr($chapo, 0, 1) == '=') {
$url = substr($chapo, 1);
// $texte = "<"."?php @header (\"Location: $url\"); ?".">";
// $calculer_cache = false;
// if ($GLOBALS['flag_apc']) {
// apc_rm($chemin_cache);
// }
// $file = fopen($chemin_cache, "wb");
// fwrite($file, $texte);
// fclose($file);
}
}
dans article.html : Replacer : [(#TEXTE|justifier)] par :
<?php
if ($url != "") {
?>
<object type="text/html" data=<?php echo("$url") ?>
width="650" height="450" border="1">
[Your user agent does not support frames or is currently
configured
not to display frames. However, you may visit
<A href="<?php echo($url) ?>">the related document.</A>]
</object>
<?php
} else {
?>
[(#TEXTE|justifier)]
<?php
}
?>
Le problème restant est le suivant : Il me faut recalculer la page
systématiquement pour qu'elle s'affiche correctement. Sinon,
l'"object"
n'apparait pas. Il doit y avoir un problème avec la gestion du cache.
Savez-vous pourquoi ?
J'ai posté cette question sur le forum, mais je viens de
m'apercevoir que la
liste et le forum sont 2 choses différentes...
(http://www.uzine.net/message_spip.php3?id_forum=285589)
Alain Wittmann
http://www.coeurnet.org
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.uzine.net/spip