Conseils pour une architecture PHP5 simple et efficace
10 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Conseils pour une architecture PHP5 simple et efficace
Bonjour à tous.
Dans le cadre d'un projet de site web développé en PHP5, j'aimerais recueillir quelques avis sur l'architecture de mon code. Je désire avant tout un code simple, performant et maintenable. Pour informations, mon site doit être traduit en plusieurs langues.
serveur :
- Debian/Apache/PHP5/mysql
Base de données :
- schéma classique avec une table par entité + table association.
- une base de données par langue
- tables texte_menu, texte_footer, ... contenant les textes du site
Acces aux données :
- une classe Connect.class.php qui prend en parametre $_GET("lg"), correspondant à la langue (www.example.com/fr, www.example.com/us,...), pour attaquer la bonne base
- des Manager.class.php qui ont pour attribut la connection et qui font des requetes SQL, grâce à des méthodes de classes
Affichage dynamique :
- des pages php dans /inc
Page html/php
index.php
Arborescence des fichiers :
index.php
error.php
news.php
.htaccess
robots.txt
...
/inc/menu.php
/inc/footer.php
/inc/home_news.php
...
/core/db/Connect.class.php
/core/mng/Manager_News.class.php
/core/mng/Manager_Client.class.php
/core/utils/GenerateSitemap.class.php
/script/generateSitemap.php
/script/testServeur.php
Concernatn l'URl rewritting, est-il plus judicieux d'utiliser l'url comme index (SELECT * FROM news WHERE url="nouveautes-google"), de mettre l'id dans l'URL (SELECT * FROM news WHERE id substr(19, 2, "nouveautes-google-25") ou de faire une requete suppléméentaire pour retrouver l'identifiant ?
Merci d'avance pour vos réponse et l'analyse de mon architecture.
Dans le cadre d'un projet de site web développé en PHP5, j'aimerais recueillir quelques avis sur l'architecture de mon code. Je désire avant tout un code simple, performant et maintenable. Pour informations, mon site doit être traduit en plusieurs langues.
serveur :
- Debian/Apache/PHP5/mysql
Base de données :
- schéma classique avec une table par entité + table association.
- une base de données par langue
- tables texte_menu, texte_footer, ... contenant les textes du site
Acces aux données :
- une classe Connect.class.php qui prend en parametre $_GET("lg"), correspondant à la langue (www.example.com/fr, www.example.com/us,...), pour attaquer la bonne base
- des Manager.class.php qui ont pour attribut la connection et qui font des requetes SQL, grâce à des méthodes de classes
- Code: Tout sélectionner
public function getNews($i) {
$sql = "SELECT * FROM news ORDER BY date limit $i";
$res = mysql_query($sql, $this->connect);
return $rew;
}
Affichage dynamique :
- des pages php dans /inc
- Code: Tout sélectionner
<?php>
include_once "/core/ManagerNews.php";
$mng = new ManagerNews();
$news = $mng->getNews(10);
?>
<div class="recent-news">
<div class="news">
<?php while ($row = mysql_fetch_assoc($res)) {
echo '<p>'.$row["title"].'</p>';
echo '<p>'.$row["description"].'</p>';
?>
</div>
</div>
Page html/php
index.php
- Code: Tout sélectionner
<body>
<?php include_once 'inc/menu.php' ?>
<?php include_once 'inc/home_news.php' ?>
<?php include_once 'inc/footer.php' ?>
</body>
Arborescence des fichiers :
index.php
error.php
news.php
.htaccess
robots.txt
...
/inc/menu.php
/inc/footer.php
/inc/home_news.php
...
/core/db/Connect.class.php
/core/mng/Manager_News.class.php
/core/mng/Manager_Client.class.php
/core/utils/GenerateSitemap.class.php
/script/generateSitemap.php
/script/testServeur.php
Concernatn l'URl rewritting, est-il plus judicieux d'utiliser l'url comme index (SELECT * FROM news WHERE url="nouveautes-google"), de mettre l'id dans l'URL (SELECT * FROM news WHERE id substr(19, 2, "nouveautes-google-25") ou de faire une requete suppléméentaire pour retrouver l'identifiant ?
Merci d'avance pour vos réponse et l'analyse de mon architecture.
Dernière édition par kalagan le Mer Oct 29, 2008 13:33, édité 3 fois.
Pour avoir un code maintenable déjà préfère l'utilisation de template (et donc d'un moteur de template) et pas mixer HTML avec le PHP (dur à lire, pas vraiment évolutif, ...).
Ensuite, si tu es en PHP5 tu as la librairie PDO pour l'accès à la base. C'est plus propre que faire des mysql_query() dans ton code.
Et pour tes méthodes de classe : pourquoi renvoyer un retour de base plutôt qu'une collection de news? Autant profiter des méthodes de classe et séparer données et code métier.
Ensuite evite les include_once() pour inclure un fichier de classe. Utilise la méthode __classLoader() pour automatiser ça.
Pour avoir un truc bien cadré et propre tu peux aussi te pencher sur un framework (Zend, Synfony, Cake, ...).
Ensuite, si tu es en PHP5 tu as la librairie PDO pour l'accès à la base. C'est plus propre que faire des mysql_query() dans ton code.
Et pour tes méthodes de classe : pourquoi renvoyer un retour de base plutôt qu'une collection de news? Autant profiter des méthodes de classe et séparer données et code métier.
Ensuite evite les include_once() pour inclure un fichier de classe. Utilise la méthode __classLoader() pour automatiser ça.
Pour avoir un truc bien cadré et propre tu peux aussi te pencher sur un framework (Zend, Synfony, Cake, ...).
J'ai remis le titre en minuscules et utilisé www.example.com
Je vous avourais que j'ai une mauvaise expérience des frameworks (notamment en Java, Spring, Hibernate, EJB, ...) et je pense que la mise en place d'un Frameworks est intéressante pour de gros projets avec beaucoup de développeurs, mais peut-être pas pour les sites que je développe.
Je ne comprends pas l'intèrêt du classeLoader.
include_once(/core/ManagerNews.class.php) ne prend qu'une ligne et ne demande aucune installation.
require 'classloader.php';
ClassLoader::addPath('/my/class/dir');
prend 2 lignes, requiert de créer une classe et doit être "lègérement" plus gourmand en mémoire.
Concernant PDO, ça à l'air d'être intéressant, mais full object.
Je me renseigne
Je vous avourais que j'ai une mauvaise expérience des frameworks (notamment en Java, Spring, Hibernate, EJB, ...) et je pense que la mise en place d'un Frameworks est intéressante pour de gros projets avec beaucoup de développeurs, mais peut-être pas pour les sites que je développe.
Je ne comprends pas l'intèrêt du classeLoader.
include_once(/core/ManagerNews.class.php) ne prend qu'une ligne et ne demande aucune installation.
require 'classloader.php';
ClassLoader::addPath('/my/class/dir');
prend 2 lignes, requiert de créer une classe et doit être "lègérement" plus gourmand en mémoire.
Concernant PDO, ça à l'air d'être intéressant, mais full object.
Je me renseigne
+1 pour un système de template surtout avec de l'internationalisation,
une arbo avec tes templates par pays
/template/fr/
/template/en/
et même pour bien faire il te faudrait tenir compte de la culture :
/template/fr-FR/
/template/en-US/
ensuite l'archi controller / view / model c'est quand même bien pour du web
après zend, cake, et autre symphony je te conseillerais pas tout comme utiliser de l'objet pour des raisons de performances...
une arbo avec tes templates par pays
/template/fr/
/template/en/
et même pour bien faire il te faudrait tenir compte de la culture :
/template/fr-FR/
/template/en-US/
ensuite l'archi controller / view / model c'est quand même bien pour du web
après zend, cake, et autre symphony je te conseillerais pas tout comme utiliser de l'objet pour des raisons de performances...
kalagan> le classloader (en fait plutôt autoload, me suis trompé de nom) ça permet quand tu fais
$taClasse = new taClasse();
Là tu n'as pas l'import du fichier à faire.
Mais oui en haut de page tu as un fichier importé, mais de toute façon tu en aura forcément un que tu inclu sur toutes tes pages pour les variables de connexion à la BDD ou des variables "globales", non?
Ensuite ton code pour le autload ça sera plus qqchose comme ça :
Plus besoin de faire d'include ou require, ce fichier fera tout le boulot.
(là mes classes ont un nom de ce type com_metalorgie_utils_String, par exemple).
Et les framework : Zend est pratique car tu peux utiliser que des parties des fonctionnalités, pas forcément rentrer dans leur architecture, ...
Et codant en java aussi, j'ai bcp de mal avec les framework java, mais là c'est vraiment bénéfique.
$taClasse = new taClasse();
Là tu n'as pas l'import du fichier à faire.
Mais oui en haut de page tu as un fichier importé, mais de toute façon tu en aura forcément un que tu inclu sur toutes tes pages pour les variables de connexion à la BDD ou des variables "globales", non?
Ensuite ton code pour le autload ça sera plus qqchose comme ça :
- Code: Tout sélectionner
<?php
function __autoload ($className)
{
$fileName = str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
$status = (@include_once $fileName);
if ($status === false) {
// TODO : gestion erreur
}
}
Plus besoin de faire d'include ou require, ce fichier fera tout le boulot.
(là mes classes ont un nom de ce type com_metalorgie_utils_String, par exemple).
Et les framework : Zend est pratique car tu peux utiliser que des parties des fonctionnalités, pas forcément rentrer dans leur architecture, ...
Et codant en java aussi, j'ai bcp de mal avec les framework java, mais là c'est vraiment bénéfique.
10 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Mettre à jour régulièrement son site : conseil n°10 en référencement
- Transformer de simples citations en liens
- Conseils en référencement pour les débutants
- Avoir beaucoup de contenu : conseil n°1 en référencement
- 10 règles pour optimiser son référencement sur Google
- S'inscrire dans les bons annuaires : conseil n°5 en référencement
- L'infrastructure technique de Google (Juillet 2006)
- Bien choisir le titre de chaque page : conseil n°4 en référencement
- Backlinks : visez la qualité avant la quantité ! Conseil n°3 en référencement
- Organiser un bon netlinking interne : conseil n°8 en référencement
- Transformer des citations en liens
Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités






le forum