5176 sujets

Le Bar du forum

Bonjour à tous,

Avant d'aller me perdre dans les forums php (quoique, c'est déjà fait !), je tente un post avec vous (dans le bar ... modos : pas crier ! Smiley bawling )

Je voudrais utiliser une même feuille de style sur l'ensemble de mes sous-domaines.
En sus de mettre en place un style-switcher ...

Je parviens à faire un import de la feuille de style en utilisant l'url absolue.
Mais le problème est de gérer facilement l'image du site en local.

Donc, pour aller plus loin et faciliter la mise à jour des pages, j'ai créé une variable pour le chemin absolu, de manière à n'avoir qu'à modifier cette dernière une fois, c'est à dire, sur une seule ligne.

Mieux encore, créer un include : ainsi, je n'ai plus rien à modifier du tout.

Jusque là, je m'en sors (dis donc !)

Mais le problème, c'est le style switcher ...
J'ai bien sûr utilisé celui fournit dans les tutos alsa
Or le test de l'existence de la feuille de style me pose problème (file_exist), car il ne peut s'appliquer que pour un fichier en local (et l'url absolue est ignorée, donc ca plante).
En cherchant un peu, il semble que la parade soit : fopen.

Stop : recul !

Vous l'avez compris, sûrement, je bidouille comme je peux en php et j'ai déjà beaucoup souffert (!) pour en arriver là.

Mais avant d'aller plus loin dans un domaine que je ne maîtrise vraiment pas, je voulais avoir votre avis sur la méthode que j'improvise complètement, en rampant, plantage après plantage, dans le brouillard des langages serveur.

Vous, comment faîtes-vous pour partager une même feuille de style pour plusieurs sous-domaines ?

Smiley biggrin
Bonjour,
Je me demande à quoi ça peut bien servir de vérifier l'existance de la feuille .css à chaque fois ... mais si tu tiens à utiliser ce système, fopen est la seule solution je pense.

Si on met un certain nombre de choix fini dans une liste, on sait d'avance que ce qu'on propose fonctionne (enfin ça serait stupide de proposer quelque chose qui ne fonctionne pas)

Pour un style switcher, je verrais simplement une construction de ce type :


<?php
$styles = array(
"Style 1"=>"style1.css",
"Style 2"=>"style2.css",
"Style 3"=>"style3.css"
); // fin du tableau

if (isset($_POST['styleswitcher']) && isset($styles[$_POST['styleswitcher']])) {
setcookie("styleswitcher", $_POST['styleswitcher'], time() + 365*24*3600);
header("Location:{$_SERVER['PHP_SELF']}");
exit();
}
?>
<!doctype ....... >
<html .... >
<head>
......
<?php
$style = "Style 1";
if (isset($_COOKIE['styleswitcher'])) $style = $_COOKIE['styleswitcher'];

echo "<link rel=\"stylesheet\" media=\"screen\" href=\"{$styles[$style]}\" />\r\n";
?>
......
</head>
<body>
.....
<?php
echo <<<END
<form action="{$_SERVER['PHP_SELF']}" method="post">
<fieldset>
<label for="styleswitcher">Choisissez un style : </label>
<select id="styleswitcher" name="styleswitcher">
END;
foreach ($styles as $key=>$value) {
echo "<option>$key</option>\r\n";
}
?>
</select>
<button type="submit">OK</button>
</fieldset></form>
.....
</body></html>
QuentinC a écrit :
Bonjour,
Je me demande à quoi ça peut bien servir de vérifier l'existance de la feuille .css à chaque fois ... mais si tu tiens à utiliser ce système, fopen est la seule solution je pense.

Si on met un certain nombre de choix fini dans une liste, on sait d'avance que ce qu'on propose fonctionne (enfin ça serait stupide de proposer quelque chose qui ne fonctionne pas)


Je suppose que l'intérêt est de tester si la feuille de style est bel et bien présente et/ou accessible. On peut l'avoir prévu et rencontrer un problème ...
Vero a écrit :


Je suppose que l'intérêt est de tester si la feuille de style est bel et bien présente et/ou accessible. On peut l'avoir prévu et rencontrer un problème ...



Prudence est mère de Sureté...

G.
Vero a écrit :

Je parviens à faire un import de la feuille de style en utilisant l'url absolue.
Mais le problème est de gérer facilement l'image du site en local.


Imagine un site avec une URL propre et son mirroir qui est sur un autre site, dans un répertoire différent (au hasard, le site communale et son mirroir sur mon site perso)

J'ai utilisé des URL relatives pour résoudre ce soucis. Ainsi en local (même architecture que mon site perso) ou sur le site communal propre, j'utilise le même code.


<?php 
$rep='../';
include ($repcpx.'style.css'); 
?>


il me suffit donc de faire varier convenablement $rep en ajoutant autant de "../" que nécessaire selon le répertoire dans lequel tu es. Et Ca fonctionne très bien pour mon site avec les includes de CSS, les includes de phph et les includes php contenant des includes d'autres fichiers PHP ou CSS (mais là gaffe, c'est sioux quand même Smiley biggol )

Si ton CSS est sur la racine du site et tes différents sites sur des sous-répertoires, tu peux peut-être tenter d'utiliser un procédé équivalent.

En espérant avoir été assez clair pour que tu comprennes (c'est un peu fouilli dans ma tête j'ai l'impression en me relisant) et que cela puisse te servir.
Oui, c'est exactement ce que j'ai fait, si tu lis la suite.

Mais le soucis est de tester l'existence d'un fichier en url absolue ...

Plus globalement, je voulais savoir comment vous faîtes pour partager les ressources entre vos sous-domaines.
Et bien si ce sont des sous-domaines, ma technique s'impose d'elle même non ?

Ou alors je ne comprends pas bien ta question (ce qui est encore possible Smiley cligne )

D'autant plus que le système utilise une URL relative (ce qui fait que je ne vois pas pourquoi tu te poses la question. Avec la même architecture, ça marchera de la même façon en local et sur ton site. A moins que ce soit sur deux domaines différents et là l'URL absolue sera nécessaire.

J'avais dans le passé utilisé un truc comme cela avec 'DOCUMENT_ROOT' et une autre du même genre mais je ne retrouve pas de fichier de cette époque lointaine et maintenant oubliée. Cela marchait (avec cette variable ou l'autre) pour définir l'URL absolue aussi bien sur le serveur que sur le site.

Et je devais comme toi là, chercher un fichier présent à un endroit précis pour décider si j'étais sur mon serveur local (ou le miroir ) ou sur le site normal... J'ai été très content de virer cela et de passer en URL relative, même si j'ai parfois quelques effets de bord indésirables sur le site mirroir avec les liens des menus...
Modifié par Bob (MC Melun) (16 Mar 2006 - 18:01)
A propos des ../, on peut même aller plus loin en gérant automatiquement :


$basePath = str_repeat("../", substr_count($_SERVER["REQUEST_URI"], "/")-1);

Cette ligne crée une variable qui contient automatiquement le nombre adéquat de ../ pour remonter à la racine.
Merci pour vos réponses.

Mais finalement, j'ai revu ma copie : une même arborescence avec des redirections par .htacces : au moins, c'est simple !

Smiley lol