Aller au contenu

SPIP 1.8.3 & SPIP 1.9.2 - Modifier le répertoire par défaut des images


captain_torche

Sujets conseillés

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 ?

:P

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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.php3

NB :

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 !

Lien vers le commentaire
Partager sur d’autres sites

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/");

Lien vers le commentaire
Partager sur d’autres sites

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 :wacko:

Lien vers le commentaire
Partager sur d’autres sites

  • 5 months later...

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...