Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Pages : 1
Coucou,
J'ai petit souci dans un plugin, lorsque ce dernier fournit des CSS qui pointent vers des images dans un sous-dossier du plugin.
le fichier style.css, placé à la racine du plugin, référence une image via url(img/head.jpg) par exemple
Le style est inclu via l'URL ?pf/plugin/style.css
L'image est bien visible via ?pf/plugin/img/head.jpg
Mais, en lisant la css, le navigateur n'arrive pas à trouver l'image. Raison : il supprime la query string de l'url et va chercher l'image dans img/head.jpg.
J'ai bien défini un urlhandler particulier qui permet de retourner la css et l'image autrement que via ?pf, mais le problème se posera toujours dans le cas deun blog configuré en QUERY_STRING (vu que l'urlhandler sera appelé via ?monurlhandler/fichier, et que la query-string sera elle aussi supprimée lors de l'inclusion)
Il y a un contournement "propre" à ce problème ? Une directive css bien cachée qui m'aiderait, ou quelque chose du genre ?
Dyslexics have more fnu!
Hors ligne
Dans lunarPhase, je fais un
background: transparent url(index.php?pf=lunarPhase/img/nm.gif) no-repeat left 0.2em;
et ça marche nickel
Par contre, en écrivant ces lignes, je viens de me rendre compte que je ne suis pas sur du résultat en PATH INFO....
Le lab => http://lab.dotclear.org
Besoin d'un plugin? => http://plugins.dotaddict.org
Besoin d'un thème? => http://themes.dotaddict.org
Besoin d'une astuce? => http://tips.dotaddict.org
Hors ligne
Je peux essayer ?
Pour mon widget lastImages, j'inclus une css et éventuellement une image comme ceci
Arborescence du répertoire du plugin :
css/
image-box.css
images/
nothumbnail.jpg
_admin.php
_define.php
_public.php
dans le _public.php du plugin pour inclure la css
public static function publicHeadContent(&$core)
{
$url = $core->blog->getQmarkURL().'pf='.basename(dirname(__FILE__));
echo
'<style type="text/css">'."\n".
'@import url('.$url.'/css/image-box.css);'."\n".
"</style>\n";
}
et dans une autre fonction pour appeler l'image
...
$url = $core->blog->getQmarkURL().'pf='.basename(dirname(__FILE__));
$img_thumb_name = $url.'/images/nothumbnail.jpg';
...
Evidemment ce n'est pas pareil (si j'ai bien compris) car ce n'est pas la css qui appelle l'image, mais si ça peut aider...
Hors ligne
Dans le plugin rateIt j'utilise aussi un tour de passe-passe.
J'enregistre une nouvel urlHandlers nommé "rateItmodule" qui appelle une fonction de ma class public. Il y a quelques conditions inutilent pour ton besoin mais la fin de la fonction est intéressante :
public static function files($args)
{
global $core;
if (!$core->blog->settings->rateit_active) {
self::p404();
return;
}
if (!preg_match('#^(.*?)$#',$args,$m)) {
self::p404();
return;
}
# fonction de recherche de fichier (plugin, theme, public)
if (!($f = self::searchRateItTplFiles($m[1]))) {
self::p404();
return;
}
# limite les types de fichiers autorisés
$allowed_types = array('png','jpg','jpeg','gif','css','js','swf');
if (!file_exists($f) || !in_array(files::getExtension($f),$allowed_types)) {
self::p404();
return;
}
//http::cache(array_merge(array($f),get_included_files()));
$type = files::getMimeType($f);
header('Content-Type: '.$type.'; charset=UTF-8');
//header('Content-Length: '.filesize($f));
if ($type != "text/css" || $core->blog->settings->url_scan == 'path_info') {
readfile($f);
} else {
echo preg_replace('#url\((?!(http:)|/)#','url('.$core->blog->url.$core->url->getBase('rateItmodule').'/',file_get_contents($f));
}
return;
}
Je renvois le fichier en changeant les urls de ce dernier si c'est un fichier CSS. Ca peut être une piste...
Cordialement,
_JC | Intérimaire | En mode invisible
Hors ligne
Hmmm ... ce code ne m'est pas inconnu ... j'ai la même chose dans gallery :)
Ya un peu de ça oui :)
Cordialement,
_JC | Intérimaire | En mode invisible
Hors ligne
Pages : 1
Vous n'êtes pas identifié(e).