Bonjour à tous !

Je ne suis pas vraiment nouveau dans la création de site web, mais à chaque fois que j'en recommence un, j'ai l'impression de tout reprendre à zéro ! Nouveaux standards, nouveaux langages.. bref Smiley smile

J'utilise quasi systématiquement le langage php, et le html/CSS pour la mise en page.

Jusqu'à présent, l'architecture de mes sites était sur le principe suivant :

- un dossier "include" qui contient les fichiers de config (connexion mysql par exemple) ou fonctions.php, fonctions.js, etc..

- un dossier "images" (+ sous dossier pour chaque page, par exemples "accueil" "contact")

- un dossier par rubrique (accueil, contact, etc..) contenant les pages de contenu des sous rubrique (par exemple contact/localisation.php; contact/formulaireEmail.php)

- des fichiers principaux "contact.php", "accueil.php", etc..

- un fichier principal index.php qui contient le code de la mise en page commune à tout le site, et une fonction d'inclusion des pages sélectionnées en fonction des liens :
index.php?p=contact va afficher index.php en incluant contact.php
index.php?p=contact&rub=localisation va afficher index.php en incluant contact.php, lui même incluant contact/localisation.php Smiley biggol



Or, depuis peu que je m’intéresse au référencement, je comprend qu'il est préférable d'avoir des adresses explicites, du type www.monsite.com/contact/localisation.php.
Je remarque également que la plupart des gros sites (dont alsacréations) ont des adresses de ce type:
http://www.alsacreations.com/tuto/lire/1213-microformats-introduction.html
et
http://www.alsacreations.com/web

affichent pourtant bien le même "template", le même design. Et je pense bien que si l'auteur souhaite modifier le bouton "PROFIL" par "PROFILS", il ne va pas s'amuser à modifier toutes les pages du site.. le design est donc centralisé quelque part.


J'ai donc pensé à m'organiser autrement, à savoir :

- chaque page *.php aurait la structure suivante :
informations propres à la page (titres, meta, etc..)
include("include/header.php");
contenu propre à la page
include("include/footer.php");

- deux fichiers "header.php" et "footer.php" qui contiennent tout les informations du template "avant" et "après" le contenu.


Le problème qui se pose, concerne les liens vers les images, vers la feuille de style CSS, etc..
Si par exemple j'ouvre le lien www.monsite.com/contact/localisation/trouvezmoi.php
et que celui-ci fait appel aux header et footer, le lien indiqué dans header.php vers la feuille de style CSS sera faux ! Smiley eek



Avant de ma lancer à corps perdu dans une bidouille abracadabrantesque, j'aimerai savoir s'il existe une arborescence/architecture type pour un site web dynamique ?
J'ai entendu parler de structure MVC, mais ça me semble un poil complexe, et peut être pas forcement adapté à un "petit" site ? (je n'ai pas encore approfondi cette piste).


D'avance, un grand merci d'avoir lu, déjà Smiley cligne , et pour tous vos conseils !
jb
Modifié par niquedouille (15 Oct 2011 - 22:23)
Salut,

Si ton souci est le référencement, ton problème ne sera pas un problème d'architecture du site, mais un problème d'URL et de paramètres d'URLs à gérer. Pour cela, l'URL rewriting est la solution.

Si ton souci est l'optimisation de l'architecture de ton site, tu peux éventuellement t'inspirer de celle proposée par des frameworks comme Symfony.

Si ton souci est le chemin vers les fichiers appelés, le mieux est de renseigner chaque chemin, côté client en partant de la racine du site, côté serveur en partant du fichier appelant grâce à la constante magique __FILE__ combinée à la fonction dirname (), voire plus directement grâce à la constante magique __DIR__ si tu développes en PHP 5.3.
pchlj a écrit :
Donc histoire de ne pas te laisser perdu voici un lien vers un site explicant l'url rewriting :

http://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting


Merci à tous les deux !!
suite au message de Victor, j'étais justement en train de lire ce lien ! Il semble que ce soit effectivement la solution à mon "problème"! Smiley smile

Et ça me rassure de savoir que d'autres utilisent le même type d'architecture Smiley biggrin . Quand on apprend tous seul dans son coin, c'est pas toujours facile d'avoir de bonnes bases.. d'ailleurs pour ça qu'à chaque nouveau site, j'ai pleins de nouvelles choses à (re)apprendre Smiley lol


Edit: avec l'URL rewritting, le referencement va donc se faire uniquement via les liens disponibles sur le site. Je devrais donc bloquer l'accès aux robots à toutes les pages du type "contact.php" qui ne contiennent pas le "template" du site ?
(ca serait dommage que suite à une requête, un visiteur soit dirigé par google sur www.monsite.com/contact/localisation.php... qui sans css ni header/footer, ne ressemblera à rien !)
Modifié par niquedouille (15 Oct 2011 - 23:52)
niquedouille a écrit :
Edit: avec l'URL rewritting, le referencement va donc se faire uniquement via les liens disponibles sur le site. Je devrais donc bloquer l'accès aux robots à toutes les pages du type "contact.php" qui ne contiennent pas le "template" du site ?
(ca serait dommage que suite à une requête, un visiteur soit dirigé par google sur www.monsite.com/contact/localisation.php... qui sans css ni header/footer, ne ressemblera à rien !)

Pas besoin de bloquer les robots, à mon avis. En revanche, il est plus judicieux de les guider, notamment en utilisant l'élément link avec l'attribut rel="canonical" et l'attribut href dont la valeur sera l'URL réécrite correspondant à la page actuellement affichée.
Je me suis aperçu au final que l'URL rewriting n'était pas la solution miracle pour ce que je voulais faire.

J'ai finalement opté pour la 3eme solution de Victor, à savoir l'inclusion portable de ce type :
<?php include_once(dirname(__FILE__) . "/../stylesdyna.php"); ?>

ainsi, les liens dans chaque fichier sont définit par rapport à leur répertoire source, et quand j'inclus un fichier, les liens sont "transposés". C'est vraiment une constante magique Smiley lol

Du coup, je peux avoir
- mes fichiers header/footer dans le repertoire /include/
- un fichier "collections/prestige.php" qui fait appel à ces fichiers, et qui surtout a un en-tête propre (balise title, meta, etc..).
- je vais tout de même utiliser l'URL rewriting pour les liens dynamiques à l'intérieur de ces pages annexe (par exemple, à l'intérieur de la page /collections/prestige.php).

Encore un très grand merci à vous ! Smiley smile



edit: non tout ne fonctionne pas.. Smiley fache : cela fonctionne pour les liens, images, include, etc.. mais pas pour la feuille de styles css :
dans /include/header.php, j'ai :
<link rel="stylesheet" type="text/css" href="../style.css">
la feuille de style se trouvant dans le répertoire racine /styles.css

J'ai essayé :
<link rel="stylesheet" type="text/css" href="<?php dirname(dirname(__FILE__)) . "/style.css"; ?>">
mais il ne le prend pas en compte. Quand j'affiche le code source de ma page dans le navigateur, je lis :
<link rel="stylesheet" type="text/css" href="">
Smiley bawling
Modifié par niquedouille (16 Oct 2011 - 12:12)
jmlapam a écrit :
Faire un tour ici Smiley cligne


j'avais lu cette page avant d'utiliser dirname(), est-ce que je l'ai mal utilisée Smiley confused ? Car je ne vois pas où. En utilisant dirname(dirname()) ca me permettait de revenir 1 repertoire en arrière. J'arrive à me servir de la fonction, le problème, c'est la portabilité des liens.

Victor, je suis en train de me taper des pages et des pages d'explications sans voir quelque chose de concret Smiley biggol .. ça m'a l'air d'une belle usine à gaz.. mais je vais persister Smiley cligne Smiley ravi
Smiley eek ça marche maintenant

je ne comprend malheureusement pas pourquoi.
J'ai donc toujours une architecture comme ceci :

http://desmond.imageshack.us/Himg249/scaled.php?server=249&filename=arboe.jpg&res=medium

les inclusions de php sont faites ainsi :
<?php include_once(dirname(__FILE__) . "/../stylesdyna.php"); ?> sur la page header.php
ou
<?php include_once(dirname(__FILE__) . "/include/config.php"); ?> sur la page accueil.php

le lien de la feuille CSS est tout simplement Smiley biggol comme ceci :
<link rel="stylesheet" type="text/css" href="/styles.css">

et les liens entre les pages comme ceci :
<a href="/accueil.php">Accueil</a>
<a href="/collections/prestige.php">Prestige</a>

et les images :
<img src="/images/index/logo.png" />


Bref, simplement en rajoutant "/" devant..
C'est la première fois que je vois ça.. Smiley eek


je vous laisse vérifier : http://niquedouille.free.fr/www/accueil.php
(dans le cas présent, je rajoute "/www" devant l'adresse, car je test pour le moment le site sur un compte free.)
Modifié par niquedouille (16 Oct 2011 - 17:44)
Je ne comprend pas pourquoi tu cherches quelque chose de compliquer pour appelé ton style.css.

Je m'explique, à ce que j'ai compris de ta nouvelle façon d'organiser le code de tes pages, tu inclus un header.php et un footer.php communs à toutes. Jusqu'ici je comprend tout à fait, mais pourquoi y inclure la déclaration css ?

La page qui se charge utilise les fichiers qui lui sont utiles et donc que tu as déclaré pour elle. Sachant que ton header est commun à toutes tes pages, tu ne risques pas de déclarer un fichier CSS, JS ou autre à une page qui ne lui servira à rien ?

Pour moi, le mieux est de garder une structure de ton <head></head> non généré par un fichier. Mais ce n'est que mon avis, bien que tu n'étais pas là pour cela à la base mais pour un problème de lien ^^

Et donc pour en revenir au sujet, tes liens utilisés dans les pages header.php et footer.php doivent être en absolus, à partir de la racine. Car pour un lien relatif, l'origine sera le fichier appelant, soit index.php.

Donc par exemple:
<img src="./images/index/logo-ajd-ebeniste.png" alt="" />

Modifié par Apoooo (16 Oct 2011 - 19:24)
Apoooo a écrit :
Je ne comprend pas pourquoi tu cherches quelque chose de compliquer pour appelé ton style.css.

Je m'explique, à ce que j'ai compris de ta nouvelle façon d'organiser le code de tes pages, tu inclus un header.php et un footer.php communs à toutes. Jusqu'ici je comprend tout à fait, mais pourquoi y inclure la déclaration css ?

La page qui se charge utilise les fichiers qui lui sont utiles et donc que tu as déclaré pour elle. Sachant que ton header est commun à toutes tes pages, tu ne risques pas de déclarer un fichier CSS, JS ou autre à une page qui ne lui servira à rien ?


les balises <head></head> ne sont pas communes à toutes les pages, justement !
le fichier header.php n'appelle que les fichiers qui lui sont nécessaires, pas plus.
les css/js/fonctions php etc.. qui sont propres à une page sont déclarés sur cette même page uniquement.

Il est vrai que j'aurai pu appelé le fichier CSS sur chaque pages, mais je trouvais ça plus "simple" de l'appeler une fois pour toute dans le header.php.

Ainsi, chaque page est composée comme suit (ici, la page ./collections/prestige.php) :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TITRE DE LA PAGE</title>
ETC..

<?php
if(!$sousmenu) $sousmenu = "21";
$menu = "collections";
$id_page = "2";
include_once(dirname(__FILE__) . '/../include/header.php'); ?>

CONTENU DE LA PAGE

<?php include_once(dirname(__FILE__) . '/../include/footer.php');
?>


cela te semble t-il logique maintenant ? Smiley confused

Apoooo a écrit :

Pour moi, le mieux est de garder une structure de ton &lt;head&gt;&lt;/head&gt; non généré par un fichier. Mais ce n'est que mon avis, bien que tu n'étais pas là pour cela à la base mais pour un problème de lien ^^

Et donc pour en revenir au sujet, tes liens utilisés dans les pages header.php et footer.php doivent être en absolus, à partir de la racine. Car pour un lien relatif, l'origine sera le fichier appelant, soit index.php.

Donc par exemple:
&lt;img src=&quot;./images/index/logo-ajd-ebeniste.png&quot; alt=&quot;&quot; /&gt;


sisi, je suis aussi là pour des conseils dans ce genre Smiley cligne
Pour ce qui est des liens, je ne savais pas qu'il était possible d'utiliser des liens absolus. Jusqu'à présent j'avais toujours travaillé avec des liens relatifs (peut être à tord).

Cela change t-il quelque chose, que j'écrive :
src="/blablabla"
ou
src="./blablabla" ?
Modifié par niquedouille (16 Oct 2011 - 20:09)
Effectivement, c'est logique, j'avais mal compris une petite partie du raisonnement. Donc au final, on en arrive à la même explication et c'est une bonne pratique. Je suis d'accord que pour le fichier style.css, le mieux est de le déclarer une bonne fois pour toute.

Désolé, je n'ai pas fais attention de me relire après mon message, l'exemple que j'ai mis pour le lien absolu est faux, j'ai tapé trop vite et j'ai mi un "." en trop..
Mettre un ./ est un chemin relatif à partir du dossier courant. Donc pas le cas ici.

Ta syntaxe que tu as mise est la bonne, il faut démarrer par un "/" tes chemins pour qu'ils soient considérés à la racine.

Plus d'explications ici: Ici

Encore désolé pour l'erreur dans l'exemple, c'était bien le seul endroit où il ne faut pas en faire pour aider quelqu'un.. Smiley confused
Bonsoir,

Je me permets de venir vers vous pour obtenir une solution à ma problématique car c'est relativement urgent et après presque 48H de recherche, de lecture, je ne parviens pas à trouver une solution. Si j'écris dans la continuité de ce topic, c'est parce qu'on est dans la même thématique.

En résumé, voici mon arborescence :
/images/
/css/
/js/
/dossier/ contenant /dossier/page.php
/includes/ contenant /includes/header.php et /includes/footer.php
index.php

Or pour mon index lorsque je fais mon include classique, cela fonctionne aucun souci. Pour ma page.php qui est dans un autre dossier cela ne fonctionne plus car évidemment un niveau de plus dans l'arboresence. J'ai corrigé en mettant ../ avant les chemins pour page.php mais aussi dans footer et header ce qui a marché SAUF que maintenant c'est index qui ne fonctionne plus évidemment car header et footer contienent dans le contennu des chemins avec ../

Du coup, j'ai essayé pas mal de méthodes vraiment, croyez moi ! Aucune n'a fonctionné totalement alors avant de partir vers une solution bancale consistant à mettre mes images et mon css dans tous les dossiers de mon site, je viens vers vous avec l'espoir d'obtenir un bout de code très concret à utiliser ou peut-être la révélation que c'est impossible Smiley smile

Bref merci à tous par avance.

Vanessa Smiley smile
Bonjour,

C'est encore moi, j'insiste un peu car je dois terminer ce projet pour Lundi et je me retrouve bien dépourvue face à cette problématique.

Au pire du pire, je ferai des urls directes sans dossier : site.com/dossier-page.php au lieu de site.com/dossier/page.php

Merci et désolée de l'insistance de ma part !

Vanessa