captain_torche Posté 22 Décembre 2006 Posté 22 Décembre 2006 Bonjour, J'utilise la même base SPIP (1.8.3) pour deux sites placés sur le même serveur. Tout fonctionne correctement, à part la gestion des images : elles ne sont tout simplement pas affichées sur le second site. J'avais tenté un .htaccess qui réécrivait les urls des images pour que cela soit transparent, mais apparemment, SPIP vérifie auparavant l'existence physique du fichier sur le serveur avant de gérer son affichage (et comme le PHP n'est pas affecté par le .htaccess ...). J'ai cherché une option (sur les forums et dans la doc) qui permettrait de spécifier le chemin serveur où aller chercher les images, mais je n'ai rien trouvé de probant. Existe-t'il une solution ?
Loupilo Posté 22 Décembre 2006 Posté 22 Décembre 2006 Je ne comprends pas (encore ) très bien. Si tu ne peux pas les afficher sur le second site, comment les insères-tu, à supposer que tu parles d'images dans les articles ? Je suppose qu'elles n'apparaissent alors pas à gauche de l'édition dans l'espace privé, et donc que tu ne fais pas <img5> ou <doc18> ? Mais si tu utilises une URL il n'y a pas de raison pour que ça ne fonctionne pas ! Ou alors tu parles d'images dans les squelettes ?
captain_torche Posté 22 Décembre 2006 Auteur Posté 22 Décembre 2006 Je reformule plus simplement (mais j'ai trouvé une réponse que je détaillerai ici dans l'après midi) : J'ai un premier site (sitea.com), généraliste, avec un grand nombre de rubriques et d'articles, utilisant SPIP. J'ai, sur le même serveur, un second site (siteb.com), utilisant la même base SPIP que sitea.com, mais spécialisé dans une rubrique précise : on reprend les articles de cette rubrique, ainsi que leurs visuels. La rédaction des articles se fait dans tous les cas sur l'interface de sitea.com Si la récupération des articles se passe sans problème (ils sont extraits de la base), celle des images (ou plutôt des logos) est un peu plus problématique : comme SPIP recherche d'abord l'existence de l'image dans son répertoire IMG, il ne me l'affiche pas sur le siteb.com (vu que siteb.com/IMG/ est vide).
captain_torche Posté 22 Décembre 2006 Auteur Posté 22 Décembre 2006 Mutualiser les logos de deux sites partageant la même base de données SPIP Problématique : Nous partons du principe que nous avons deux sites (siteA.com et siteB.com), tous deux utilisant SPIP. Le site A, généraliste, comporte beaucoup de rubriques et d'articles. Le site B, spécialisé, ne reprend que le contenu d'une rubrique spécifique du site A. Si la gestion des articles ne pose pas de problèmes, la récupération des logos associés aux articles est plus pointilleuse. En effet, SPIP vérifie la présence physique de l'image dans son répertoire avant de l'afficher. S'il ne trouve pas l'image, il ne l'affichera pas. Fichiers modifiés : ecrire/inc_version.php3 et ecrire/inc_logos.php3NB : Ceci n'est pour l'instant testé qu'avec SPIP 1.8.3 Etape 1 : Afficher les logos du site A Principe de fonctionnement des logos dans SPIP Lors de l'ajout d'un logo à un article, ou une rubrique de SPIP, rien n'est ajouté en base. SPIP se contente de créer une image, nommée artonxxx.jpg, ou rubonxxx.jpg (avec xxx correspondant à l'id de l'article/rubrique), dans son dossier IMG. Lors de la génération des pages, SPIP vérifie donc la présence de ce fichier, et l'affiche le cas échéant. Dans notre cas, nous n'avons aucune image dans le répertoire IMG sur le site B; SPIP n'affichera donc pas les logos associés. Il faut donc que nous modifiions le fichier définissant le répertoire IMG, pour le faire pointer vers celui du site A. Cette déclaration se trouve dans le fichier ecrire/inc_version.php3, à la ligne 372 : define_once('_DIR_IMG', _DIR_PREFIX1 ."IMG/"); Il nous faut donc pour l'instant le faire pointer vers le site A : define_once('_DIR_IMG', "http://www.sitea.com/IMG/"); Pour l'instant, cela ne fonctionne pas encore : SPIP utilise la fonction file_exists() de PHP pour vérifier l'existence du fichier, qui ne fonctionne qu'en local sur les versions de PHP antérieures à PHP5. Il nous faut donc modifier les appels à cette fonction, pour en utiliser une autre qui supporte les appels distants à une url. J'ai choisi fopen(), conscient que la demande en ressource doit être supérieure à la première fonction. Il faut ensuite éditer le fichier ecrire/inc_logos.php3, pour remplacer tous les appels à la fonction file_exists, de la forme : if (@file_exists($fichier)){ par des appels de la forme : if (@fopen($fichier, 'r')){ Une fois ces modifications faites, cela fonctionne pour les logos appelés sans traitement. Il faut par contre permettre au script de gérer le redimensionnement des images. Etape 2 : permettre le redimensionnement des images du site A Problème rencontré : Sans modification au script actuel, SPIP tente d'enregistrer les fichiers redimensionnés dans le répertoire http://www.sitea.com/IMG/, qui n'existe bien évidemment pas sur le site. Il nous faut tout d'abord définir un répertoire où figureront les images redimensionnées. Pour ce faire, nous allons ajouter une ligne, dans le fichier ecrire/inc_version.php3, idéalement après la ligne que nous venons de modifier : define_ONCE('_DIR_IMG_CACHE', _DIR_PREFIX1 . "IMG/"); J'ai ici réutilisé le répertoire IMG, tout simplement. Pour finir, il faut spécifier que les images redimensionnées doivent être enregistrées dans ce répertoire spécifique. dans le fichier ecrire/inc_logos.php3, dans la fonction creer_vignette. Il suffit d'éditer ces trois lignes : if ($destdir) { $destdir = creer_repertoire(_DIR_IMG, $destdir); } $destination = _DIR_IMG . $destdir . $destfile; pour les remplacer par : if ($destdir) { $destdir = creer_repertoire(_DIR_IMG_CACHE, $destdir); } $destination = _DIR_IMG_CACHE . $destdir . $destfile; Tout fonctionne parfaitement dorénavant !
Loupilo Posté 22 Décembre 2006 Posté 22 Décembre 2006 Ok super, mais si tu mettais un chemin absolu au lieu d'une URL absolue, ça éviterait de devoir changer les file_exists, non ? C'est à dire : define_once('_DIR_IMG', "/www/site1/IMG/");
captain_torche Posté 22 Décembre 2006 Auteur Posté 22 Décembre 2006 J'ai essayé, mais il faudrait tout de même réinterpréter l'affichage des images (et je n'ai pas trouvé comment faire). Parce que <img src="/www/site1/IMG/">, ça marche pas des masses
Loupilo Posté 22 Décembre 2006 Posté 22 Décembre 2006 J'ai essayé, mais il faudrait tout de même réinterpréter l'affichage des images (et je n'ai pas trouvé comment faire).Parce que <img src="/www/site1/IMG/">, ça marche pas des masses Ben <img src="/www/site1/IMG/aton_1.jpg">, si, ça marche... avec Firefox en tout cas
captain_torche Posté 23 Décembre 2006 Auteur Posté 23 Décembre 2006 J'ai testé, et ça ne marchait pas. Ca me semble logique : le navigateur ne peut pas avoir accès à la structure interne (donc cachée) du serveur, si ?
Loupilo Posté 25 Décembre 2006 Posté 25 Décembre 2006 Heu oui que raconté-je ? J'ai mal compris et interprété, désolé ;-)
captain_torche Posté 1 Juin 2007 Auteur Posté 1 Juin 2007 Je remonte le topic, juste pour signaler que je viens de réaliser un plugin pour SPIP 1.9.2 (mais j'imagine qu'il est compatible avec les versions de SPIP supérieures à la 1.9). Le principe est un peu différent : Au lieu de travailler directement sur le fichier distant, celui-ci sera téléchargé (s'il n'existe pas auparavant, sinon il ne sera téléchargé que s'il est trop vieux). Avant d'afficher une image, il suffit d'appeler la fonction suivante, qui cherchera l'image sur le site distant, et la téléchargera si elle existe : [(#ID_ARTICLE|IMG_Distante)]ou[(#ID_RUBRIQUE|IMG_Distante{'rub'})] Le reste du code ne change pas. IMG_DIST.zip
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant