Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > PHP > Vos techniques pour le développement de sites en PHP > Lecture du sujet

Vos techniques pour le développement de sites en PHP

Vous devez être inscrit pour pouvoir poster des messages

Page : Précédente  1  2  3  4  5  6  7  8  9  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2  3  4  5  6  7  8  9  Suivante
Hors ligne Cam # Posté le 20/10/2007 à 05:10:16
Have fun !
Avatar
Newsers
Reprise du dernier message de la page précédente :
Malgré que le sujet date un peu (2 mois), je le laisse ouvert car il est fort intéressant.

Moi mon arborescence est comme ceci :
./index.php
./libs/
./libs/functions.php
./libs/config.php
./libs/class/
./libs/ajax/
./cache/
./cache/html/
./cache/forums/
./html/
.. etc

Concernant mon système de pages, je centralise tout sur la page index.php (à la racine) et j'inclue la page demandée ($_GET['p']) si elle existe. Il y a aussi un autre paramètre en jeu : $_GET['act']. Ca permet de savoir si la page demandée est une "sous-page" ou pas. J'entends par sous-page par exemple si je demande la page "voir un forum" ou "voir un sujet", alors que l'index des forums n'est pas une sous-page (je fonctionne un peu que l'id de la page présent dans les url du SdZ).

Sinon côté class, je n'ai pas grand chose (pour le moment) à part la classe template (importante). Je réfléchis à la conception d'une classe pour le cache pour optimiser davantage mon script. ;)

Je stocke les pages et les sous pages dans un tableau, pour vérifier si elles existent ou pas :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $titres_page = array(
  3.         'dossiers'              => array(
  4.         // Structure : 0 (id de la page) => ( emplacement de la page, titre de la page)
  5.                 0       => array( '', 'Apprenez de nouvelles choses grâce aux dossiers' ), // Page mère "dossiers"
  6.                 11      => array( 'list_folders', '%s - Voir les dossiers' ) // Page fille de la page "dossiers" avec comme idp : 11
  7.         )
  8. );

Et pour les noms de pages dynamiques, je combine sprintf() avec le titre de la page en question ('%s' sera alors remplacé par le titre dynamique). Enfin c'est assez compliqué à expliquer dit comme ça. ^^

Image utilisateurImage utilisateurImage utilisateur
À la recherche d'un développeur (bénévole) PHP/MySQL avec une bonne expérience pour un projet novateur. Si vous êtes intéressé, contactez-moi par MP.
 
Hors ligne k4dw4 # Posté le 20/10/2007 à 12:58:19
Lève toi et code !
Groupe : Membres
Personnellement Shepard, je vais essayer de faire mon site en POO. A vrai dire, c'est vraiment un casse tête :p Il se base fortement sur le modèle MVC pour Gaga971 ;)


Personnellement j'ai une classe abstraite nommée 'level' qui contient une fonction pour démarrer l'étape et une autre pour passer a l'étape suivante.

Pour la première étape, j'ai ma classe root (qui hérite bien sure de level) qui va faire son job (voir schéma) en démarant avec la fonction start_level(). A la fin de la fonction start_level(), il y aura la fonction next_level() qui se chargera de passer la main au contrôleur (voir schéma).

La seconde étape est le contrôleur approprié qui hérite de ma classe abstraite controller qui elle même hérite de la classe level.
La classe abstraite contient quelques méthodes (voir schéma) :
Code : Autre - Afficher / masquer les numéros de ligne
  1. Abstract request_analyze() - Analyse la requête pour voir quel action effectuer et vérification des droits de l'utilisateur.
  2. Abstract modules_loading() - Chargement des modules et extensions nécessaires à l'éxécution de la requête.
  3. Abstract internal_operation() - Réalisation des opérations internes (non visible par l'utilisateur, comme par exemple un ajout d'une donnée dans la BDD).
  4. Abstract external_operation() - Réalisation des opérations externes (Qui vont être renvoyées dans le fichier XML (je pense que je vais faire un moteur de template XML-XSL au lieu d'utiliser un moteur de template XHTML).
  5. next_level() - Chargement du moteur de template, envois des informations externes et substition de la main.
  6. start_level() - Méthode contenant toutes les méthodes précédentes l'une a la suite de l'autre.


Ensuite, la troisième et dernière étape : le Moteur de template. Il fonctionne comme un moteur de template habituelle sauf qu'il parsera des fichiers XML et aura un contrôle directe sur le site (il ne s'agit pas qu'une suite de fonction) grâce à la fonction start_level() qui vérifiera par exemple si il n'y a pas un fichier cache XML utilisable. La fonction next_level() servira donc à envoyer les donnés au client et pourquoi pas, les cachés.


Voilà, maintenant, voici le schéma principal (non terminé, et simplifié pour une meilleur lisibilité). Je pourrais aussi mettre les UML de mes classes mais j'ai la flemme et ils ne sont pas finis (si on peut appeler ça du UML) :p
schéma principal

Eh, espèce de 'tit con/cochon, si tu enfreint les règles, un modo va te botter/ploter les fesses !
 
Hors ligne Tortue facile # Posté le 20/10/2007 à 15:22:57
Explorateur de FTP
Avatar
Admins
Pour ma part je n'utilise ni moteur de template ni POO (ou très peu).
Citation : Mon arborescence
  • index.php
  • /upload
    • /avatars
    • /images
    • /m
  • /script
    • les fichiers .js
  • /include
    • /files
    • /lib
    • /log
    • les fichiers à inclure
  • /images
    • /smileys
    • /grade
    • /zcode
  • /design
    • /1
      • /css
      • /images
    • /2
    • /3
  • /cache
    • tous mes fichiers cache (index, fiche, sondage)

Sinon je fais comme Aravis, une page pour chaque système (news, membre, admin, fiche, etc) ce qui me permet deséparer les fonctionnalités (et puis j'aime pas avoir trois tonnes de pages).
 
Hors ligne inkz # Posté le 26/10/2007 à 12:24:53
Groupe : Membres
Racine
  • admin
  • forums
  • img
  • includes (fonctions et cfg)
    • contenus (news, archives et autre fichiers relatifs aux données du site)
    • designs(mes deux fichiers css et les fichiers php
  • scripts (espace_membre etc...)


Très banal quoi :D
Hors ligne Savageman # Posté le 26/10/2007 à 13:35:13
Insa : If inside
Avatar
Groupe : Membres
Moi, je n'ai pas vraiment de structure définie, elle est en cours d'élaboration permanente... Je tend à m'approcher de MVC avec séparation des requêtes SQL, comme Shepard mais en un seul fichier par module (add, del, edt dans le même fichier), ainsi qu'un système de templates.
J'utilise également un index.php avec un tableau des pages autorisées. Ceci dit je suis ouvert pour une discussion sur les architectures possibles.

Je trouve ça un peu bête que chacun énumère le système qu'il utilise : il faudrait pouvoir en tirer quelque chose. Veldryn est un des seul (le seul ?) à avoir réellement argumenter ses choix.
Mais il y a de bonnes idées chez presque tout le monde. Le coup du titre de la page dynamique pour Cam est très bon je trouve.

Bref, j'ai pas argumenté non plus moi-même sur ce coup-là, mais je promet de lire le sujet plus en détails très bientôt et de lister les trucs que je trouve bien/mal afin d'ouvrir une discussion encore plus intéressante.

PS : désolé d'être rabat-joie :D
 
Hors ligne Nesswaw # Posté le 26/10/2007 à 15:35:00
Groupe : Membres
Le fait de séparer toutes les requêtes sql comment procédez-vous ?

Merci :)

Sinon pour moi:

  • index.php
  • event.php
  • news.php
  • admin
    • index.php
    • css/
    • img/
    • inc/
    • module
      • news
        • index.php
        • liste_news.php
        • add_news.php
        • edt_news.php
        • del_news.php

      • user
      • event
      • photos


  • css
  • img
  • inc


Chaque module à sa propre page, elles ne passent pas par index.php.
Le dossier "inc" contient "header" et "footer" pour la base des pages

Mais je sais pas si cette structure à long terme me conviendra, je suis à la rechere pour l'améliorer :)
Hors ligne DecemberEscape # Posté le 26/10/2007 à 16:03:09
Avatar
Groupe : Membres
Travaillant sur plusieurs projets à la fois, je reprend toujours les même bases car sinon c'est le bordel, et pour compatibilité.

De plus, vu que nous sommes parfois plusieurs à travailler sur un projet, nous découpons on classe pour une meilleure portabilité.

On travail tout sur un index.php central.

  • index.php
  • header.php
  • js/
    • ajax.js
    • core.js
    • window.js
  • lib/
    • lib.images.php
    • lib.ftp.php
    • lib.date.php
    • lib.plugins.php
  • class/
    • class.sql.php
    • class.users.php
    • class.template.php
  • design/
    • default/
      • design.css
      • template.tpl
      • img/
  • conf/
    • conf.functions.php
    • conf.vars.php
    • conf.defines.php
    • conf.bdd.php
  • img/
  • cron/
    • cron.inactive.php
  • admin/
    • index.php
    • header.php
  • doc/
    • index.html
    • inscriptions.html
  • plugins/
    • Calendar/
      • calendar.class.php
      • calendar.design.php
      • calendar.conf.php
    • ImportCVS/
  • lang/
    • fr/
      • lang.main.php
      • lang.news.php
    • en/
    • de/
Hors ligne vincent1870 # Posté le 26/10/2007 à 18:58:18
Avatar
Groupe : Membres
Très bonne idée ce sujet, je l'avais pas encore vu ! Alors, je répond à un post un peu plus vieux. ;)

Citation : Gaga971
Juste par hazard quelqu'un aurait deja utilisé le modèle MVC pour la conception de son site web ???

Mon dernier auquel j'ai contribué est développé suivant une approche tendant à se rapprocher du modèle MVC. Personnellement, je trouve assez lourd le fait d'avoir trois fichiers par page, mais je reconnais que cela simplifie admirablement le code et rend presque inutile l'usage d'un moteur de templates, puisque la vue remplit ce rôle.
C'est donc au final un peu lourd je trouve mais pratique.

Puisque Shepard a l'air de bien connaître l'architecture de SdZ ( :-° ), j'ai lu avec attention ses posts concernant cela, et je ne puis m'empêcher de trouver là encore un peu beaucoup un fichier par action. Je vois les avantages (séparation du code, recherche d'erreurs facilité), mais cela me parait extrême. A ce propos, dans ces fichiers, c'est sous forme de fonctions le code je suppose ?

J'ai vu qu'il allait essayer de recoder le karatemplates, vivement que tu le fasses, je suis preneur direct. :) Il a l'air excellent ce script !
Édité le 25/03/2008 à 13:58:40 par vincent1870
 
Hors ligne Cam # Posté le 26/10/2007 à 20:29:31
Have fun !
Avatar
Newsers
Citation : vincent1870
Puisque Shepard a l'air de bien connaître l'architecture de SdZ ( :-° ), j'ai lu avec attention ses posts concernant cela, et je ne puis m'empêcher de trouver là encore un peu beaucoup un fichier par action. Je vois les avantages (séparation du code, recherche d'erreurs facilité), mais cela me parait extrême. A ce propos, dans ces fichiers, c'est sous forme de fonctions le code je suppose ?

Personnellement, comme je l'ai dit plus haut, je procède un peu de cette façon. En fait, à chaque page est assigné l'id de la page (idp). En fait, j'ai une page pour l'action "supprimer un forum", "voir un sujet", "liste des sujets", "accueil de l'administration" etc.. Et en ce qui me concerne, je trouve que c'est beaucoup plus organisé et lisible, donc gain de temps pour d'éventuels débuggages.

Image utilisateurImage utilisateurImage utilisateur
À la recherche d'un développeur (bénévole) PHP/MySQL avec une bonne expérience pour un projet novateur. Si vous êtes intéressé, contactez-moi par MP.
 
Hors ligne Lpu8er # Posté le 26/10/2007 à 20:42:50
[R34n1m4T3d]
Avatar
Groupe : Membres
Perso, je suis plus basé sécurité.
Comme je tiens au serveur, je n'utilise pas les templates :)
Chaque page a son lot de html, le tout est un hybride parfois peu lisible (j'en conviens) mais souvent facile à s'y retrouver.
La structure-type serait:

\
|-classes
|-designs
|-javascript
|-images
|-logs
|-imager.php
|
functions.php
defines.php
mysqler.php
includer.php
head.tags.php
top.php
foot.php
(autres pages...)
/

Chaque page ne peut être inclue par accès distant grâce à un petit système simple mais performant (plus avancé pour la connexion sql).
mysqler est une classe SQL simplifiée, dont le principe de base est inspiré du tuto "Simplifier le SQL avec une classe" (même si le tuto en lui-même complique trop la classe... bref).
imager contient les fichiers de créations graphiques, images celles des images prédéfinies, et chaque autre dossier contient... Ben c'est explicite :)

Là où, par contre, je mets du temps, c'est sur la modélisation des données (conception des tables SQL en particulier), mais j'y arrive bien ^^

Le or die(mysql_error()), nom d'un chien !!!
(et apprenez à concaténer avant de le faire)
 
Hors ligne Nesswaw # Posté le 28/10/2007 à 15:02:14
Groupe : Membres
Et que pensez-vous de l'utilisation des Framework pour développer son site ?

Avantages ?
Désavantages ?
Hors ligne Brouznouf # Posté le 14/11/2007 à 21:06:02
Groupe : Membres
Je réouvre ce sujet qui m'intéresse beaucoup et que je n'avais pas encore vu.

Pour répondre à la question d'avant, l'avantage des framework et en générale la facilité, la rapidité à programmer et en général si ce dernier est bien fait la stabilité et le fait que c'est assez complet. Après les désavantages d'un framework c'est que souvent il y a beaucoup de choses qui sont gérés et que nous n'avons pas forcement besoin ce qui en général alourdit le site, de plus on ne comprend pas vraiment ce que cela fait dans le fond sauf si on a pris du temps a voir comment fonctionne le framework.

En ce qui concerne le sujet original du site, voici ce que j'utilise comme architecture.
Tout d'abord mon arborescence de base
  • index.php
  • accueil.php
  • config.php
  • config_sql.php
  • cache.php
  • Pages/
  • Logs
  • Administration/
  • Includes/
    • Scripts/
    • Templates/
    • Fonctions/
    • Classes/
    • Javascript/

  • Css/
  • Images/


Je pense pas qu'il soit necessaire de détailler chacun de ces repertoires, maintenant je vais vous montre comment tout cela est organisé.

La page index.php redirige vers accueil.php, je la met toujours si jamais je veux mettre une introduction a mon site, pour un evenement spéciale par exemple

La page accueil.php inclut le fichier config.php, c'est ce fichier qui fait toute la gestion de mon site

Mes liens sont de le forme www.monsite.com/index.php?page= ou www.monsite.com/index.php?script=
Il y a deux liens différents car je differencie deux choses :

La première est l'affichage des données ce qui ce fait par page=
La seconde est la gestion des données (modifications, suppression, insertion) ce qui ce fait par script=

Tout est gére dans le fichier config.php dont je vais vous présenter la structure :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. //Fichier de config
  3.  
  4. //Première chose que l'on fait avant tout est l'ouverture d'une session (session_start)
  5.  
  6. //Viens ensuite la définition de variables globales que l'on va utiliser souvent
  7. $user['id_sess'] = session_id(); //L'identifiant de la session
  8. $site['lien']   = 'http://127.0.0.1/North Arena'; //Le lien du site
  9. //On peut mettre d'autre informations relatives au site
  10. //Variables de "test"
  11. $on_script = false; //Gestion des scripts
  12. $script['erreur'] = false; //Gestion des erreurs de scripts
  13. $scirpt['message'] = ''; //Gestion d'affichage des messages de script
  14.  
  15. //Inclusion des fonctions et des classes
  16.  
  17. //Création des objets de la classe (Si il y a des classes pour ma part j'utilise tout le temps une class mysql et une class log)
  18.  
  19. //Inclusion du cache
  20. include('cache.php');
  21.  
  22. //Gestion de la sécurité, généralement je nettoye ici mes variables get et post de tout ce qu'on pourrait y mettre
  23.  
  24. //Gestion de la langue si il y a (important de le faire avant les autres gestions)
  25.  
  26. //Gestion des utilisateurs si il y a
  27.  
  28. //Autres gestions aprés suivant le site (exemple gestion des catégories pour un site de commerce)
  29.  
  30. //Gestion des scripts et des pages
  31. //-- Gestion script
  32. //On test si l'on a recu un script en get (?script=) et si ce script existe dans notre page de cache
  33. if (isset($_GET['script']) && isset($cache_script[$_GET['script']])) {
  34.         //Si cela est le cas on défini un script
  35.         $script = $cache_script[$_GET['script']];
  36.         //On dit qu'un script est active
  37.         $on_script = true;
  38.         //Et on inclue la page correspondant au script pour traiter les actions demandées
  39.         include 'Includes/Scripts/'.$script['lien'];
  40. }
  41.  
  42.  
  43. //-- Gestion page
  44. //Si un script est actif et si sa page correspondante existe
  45. if ($on_script && isset($cache_page[$script['page']])) {
  46.         //On définit notre page a inclure comme celle du script
  47.         $page = $cache_page[$script['page']];
  48. }
  49. //Sinon si la page est définie en méthode get (?page=) et qu'elle existe dans notre cache
  50. elseif (isset($_GET['page']) && isset($cache_page[$_GET['page']])) {
  51.         //On dfinit alors cette page
  52.         $page = $cache_page[$_GET['page']];
  53. }
  54. else {
  55.         //Sinon on définit notre page a celle par defaut
  56.         $page = $cache_page['default'];
  57. }
  58. ?>


Cette gestion des pages permet d'avoir par exemple un titre personnalisé par page, ensuite le fichier cache.php contient deux tableaux qui regroupent les informations des scripts et des pages
Pour chaque page on a : Le lien de le page, Le nom complet, l'abreviation utilisé, les css utilisés et d'autre informations suivant le site (exemple : un niveau de sécurité dans le cas ou certaines pages doivent etre lus par des utilisateurs enregistrés)
Les scripts contiennent eux de base ces informations : Le lien, le nom complet, l'abreviation, la page de retour par défaut, le message de retour par défaut et autre informations

Ensuite dans l'affichage je n'ai plus grand chose a faire, tout est a peu prés effectué.

Si vous avez des questions n'hesitez pas, personellement aprés pas mal d'année a coder en php j'utilise maintenant tout le temps cet méthode c'est peut être pas la meilleur mais elle a de nombreux avantages, il me reste plus qu'a y inclure une gestion des templates et je pense qu'elle sera trés complète. Cependant je vais peut être poussé la séparation de l'affichage et des actions en adoptant un modele MVC que l'on peut retrouver dans le Zend Framework.
Édité le 14/11/2007 à 21:07:09 par Brouznouf

La ChouCrouTe C'est Bon !
 
Hors ligne TheDead Master # Posté le 14/11/2007 à 21:52:29
4 8 15 16 23 42
Avatar
Groupe : Membres
pour moi c'est :

  • index.php
  • admin.php
  • config.php
  • cache/
    • filariane/
    • templates/
      • Un_template
        • un_fichier_par_pages_du_template_compilé

      • etc ...

    • users/
    • quelques_fichiers_de_cache_non_classés

  • files/
    • admin/
      • forum/
      • general/
      • posting/
      • template/
      • ...

    • forum/
      • index.php
      • post.php
      • topic.php
      • topic/
        • add.php
        • del.php
        • viewTopic.php
        • ...

      • post/
        • add.php
        • del.php
        • ...
      • etc ...

    • site/
      • pas_encore_fait
    • quelques_fichiers_générales_au_site.php

  • images/
    • smilies/
  • includes/
    • contants.php
    • functions.php
    • functions_admin.php
    • sessions.php
    • start.php
    • js/
      • fichiers_javascript
  • langs/
    • lang_english/
    • lang_french/
  • libs/
    • template.class.php
    • sql.class.php
    • mysql.class.php
    • pgsql.class.php
    • sounds.class.php (pour le captcha sonor)
  • templates/
    • Un_template/
      • css/
      • html/
      • images/
    • etc ...
  • uploads/
    • avatars/
    • images/
    • ...


Du moins, c'est comme ça pour l'instant, ça risque beaucoup évoluer car il est toujours en développement. :)

Je n'ai plus internet depuis septembre 2008 pour une durée indéterminée.

Comité de lutte contre le langage sms et les fautes volontaires sur Internet.
 
Hors ligne Emacs # Posté le 23/11/2007 à 23:34:03
In PHP I trust !
Avatar
Groupe : Membres
Je me mets à Symfony :)

Image utilisateur

Auteur du site Apprendre-PHP.com,
Relecteur et contributeur pour PHP 5 Avancé 5ème édition aux Editions Eyrolles
Développeur PHP à Sensio Labs, société créatrice du framework Open-Source symfony

PS : je ne fais pas de support de code par MP !!!
 
Hors ligne Lulin # Posté le 05/12/2007 à 00:50:37
Zéro V. Alpha
Avatar
Groupe : Membres
On pourrait pas scotcher ce thread. Il est pas mal intéressant ;)
 
Hors ligne Tracker # Posté le 05/12/2007 à 08:48:28
Avatar
Groupe : Membres
Citation : Emacs
Je me mets à Symfony :)


Symfony exploite repose sur le modèle MVC, tu peux également regarder prado(soft) qui lui utilises le postback (que je trouve bien plus pertinent).


Tracker.

Un peu de lecture: PHP // MySQL // JavaScript // w3schools // SQL
 
Hors ligne mikaweb # Posté le 05/12/2007 à 18:20:55
Groupe : Membres
Est-ce pertinent d'utiliser un Framework si on bosse seul ? Selon moi pas, cela demande beaucoup de temps car il faut aller modifier pas mal de fichiers pour une simple modification.
Puis le gain de temps je crois qu'il doit approcher du néant...
 
Hors ligne Tracker # Posté le 05/12/2007 à 22:03:31
Avatar
Groupe : Membres
Citation : mikaweb
Est-ce pertinent d'utiliser un Framework si on bosse seul ? Selon moi pas, cela demande beaucoup de temps car il faut aller modifier pas mal de fichiers pour une simple modification.
Puis le gain de temps je crois qu'il doit approcher du néant...


??!!
As-tu déjà utilisé un framework ?


Tracker.

Un peu de lecture: PHP // MySQL // JavaScript // w3schools // SQL
 
Hors ligne Talus # Posté le 06/12/2007 à 00:02:30
タルス
Avatar
Groupe : Membres
Je driais même plus pour un framework : ca dépend de l'utilisation, et surtout, y'a même une perte de temps parfois... Car beaucoup trop de choses sont gérées par celui-ci !
 
Hors ligne Tracker # Posté le 06/12/2007 à 09:01:23
Avatar
Groupe : Membres
Citation : Talus
Je driais même plus pour un framework : ca dépend de l'utilisation, et surtout, y'a même une perte de temps parfois... Car beaucoup trop de choses sont gérées par celui-ci !


Utiliser un framework requiert un apprentissage, personne de dira le contraire, mais cette période ne peut en aucun cas être assimilé à une perte de temps. Cela reviendrait à dire qu'apprendre les api php est également une perte de temps. Ce que vous ne mesurez pas c'est le gain infini ensuite.

C'est sûr que c'est chiant de lire des docs, c'est d'ailleurs la raison pour laquelle une grande partie des developpeurs php commencent/continuent à produire n'importe quoi, et puis c'est tellement plus valorisant de réinventer la roue (en moins bien forcement).

C'est quand même étrange de constater que php est l'un des seuls languages où la production/utilisation de framework est la plus faible et la moins fédéré, à mon sens c'est strictement dû au faible niveau de compréhension du développeur lambda.


Tracker.

Un peu de lecture: PHP // MySQL // JavaScript // w3schools // SQL
 
Hors ligne Lpu8er # Posté le 06/12/2007 à 10:22:35
[R34n1m4T3d]
Avatar
Groupe : Membres
Tracker -> Un framework peut te bloquer durant la conception, de plus il en existe pléthores, si on regarde bien.

Et où est le problème de ne pas en utiliser ?
C'est sûr qu'il faut savoir ce que l'on fait, et c'est pas donné à tous, apparemment. Mais avec ou sans framework, on peut produire de l'efficace, ce qui est, au final, l'objectif.

Pour ta dernière phrase, je dirais plus que c'est dû au fait que php est rapidement accessible, coté notions et base, voilà tout.

Le or die(mysql_error()), nom d'un chien !!!
(et apprenez à concaténer avant de le faire)
 
Hors ligne Natim # Posté le 06/12/2007 à 10:37:50
Apprendre à coder c'est coder
Avatar
Groupe : Membres
Le problème de ne pas en utiliser un c'est de compliquer la tâche inutilement.
On est dans un monde où l'on doit programmer vite et bien.
Et le meilleur moyen d'y arriver est d'utiliser un framework.
Sans framework, je te mets au défis de produire de l'éfficace aussi rapidement qu'avec un framework.

Avec Django, tu peux monter un site complet en moins d'un Week-End.

Pour ce qui est du sujet du topic.
Avant que je n'utilise un framework.

J'avais un truc dans le genre :
  • admin
    • index.php
    • modules
      • news
      • livredor
      • forum
      • upload
  • medias
    • skins
      • dreams
        • styles.css
        • images/
      • cables
        • styles.css
        • images/
    • jscript
  • modules
    • news
    • livredor
    • forum
    • upload
  • index.php


Pour fabriquer les url => URL REWRITING
Pour charger les modules, index.php et l'administration des modules index.php.
Chaque module comprend un fichier nomModule.xml qui donne toutes les informations nécessaires (icône dans l'administration, nom du module, dossier de templates)

Chaque module est indépendant.
Il a ses propres tables, il n'y a juste que le module de base (droits utilisateurs, espace admin, espace membres) qui sont géré par le module de base. J'étais parti sur cette idée pour réaliser Simpleet (Il y a un bon début de code pour les intéressés).

Bonne continuation
Édité le 06/12/2007 à 10:39:16 par Natim

Image utilisateur
 
Hors ligne Tracker # Posté le 06/12/2007 à 10:44:33
Avatar
Groupe : Membres
Citation : Lpu8er
[...] de plus il en existe pléthores, si on regarde bien. [...]


C'est faux, à part symphony, prado, zend framework et quelques implémentations du modèle MVC, le reste c'est des solutions hyper restrictive, du moins très orientées (cms, e-commerce, blog, forums, etc...). Pour moi la seconde catégorie n'est pas assimilable à un framework, d'ou la limitation évidente lors de la conception.

Côté accès aux données, c'est pas mieux, à part ezpdo ou propel qui eux implémentent véritablement de l'or/mapping, les autres se contentent de faire des couches d'abstraction, bref, le monde php est pauvre en comparaison de l'univers Java, alors que les buts sont les mêmes...


Tracker.
Édité le 06/12/2007 à 11:50:11 par Tracker

Un peu de lecture: PHP // MySQL // JavaScript // w3schools // SQL
 
Hors ligne Natim # Posté le 06/12/2007 à 11:30:49
Apprendre à coder c'est coder
Avatar
Groupe : Membres
Moi je préfére Python avec le fameux framework Django ou Ruby on Rails pour les sites web. Java c'est bien trop lourd.

Image utilisateur
 
Hors ligne Tracker # Posté le 06/12/2007 à 11:44:52
Avatar
Groupe : Membres
Citation : Natim
[...] Java c'est bien trop lourd. [...]


C'est drole d'avancer ce genre d'arguments, et en même temps ne proposer que des languages interprétés...


Tracker.

Un peu de lecture: PHP // MySQL // JavaScript // w3schools // SQL
 
Hors ligne Talus # Posté le 06/12/2007 à 13:29:54
タルス
Avatar
Groupe : Membres
Citation : Natim
Le problème de ne pas en utiliser un c'est de compliquer la tâche inutilement.
On est dans un monde où l'on doit programmer vite et bien.


Désolé, mais t'a tout faux. Comme je l'ai dit précédemment (et comme l'a repris Lp8er), totu dépend du cadre d'utilisation. Soit tu as besoin de toute la fioriture qui accompagne le framework, ou tu dois *presque* apprendre tout un langage pour faire... du php (c'est comme les tpls :p), soit tu n'a besoin "que" de deux trois trucs, que tu peux faire en deux deux, sans tout charger le truc qui peut être extremment lourd. Je sais pas pour les autres langages, mais en PHP en tout cas, ben... Voilà quoi.

"On est jamais mieux servi que par soi-même."
 
Hors ligne kankan # Posté le 07/01/2008 à 21:14:49
kankan@internet:/com/sdz$
Avatar
Groupe : Membres
Actuellement, ma manière d'organiser mon site ressemblerait plutôt à ceci (a ne pas prendre à la lettre, car mes vieux sites que je n'ai pas encore refaits sont beaucoup moins bien organisés :-° ):

À la racine, se trouve tous les fichiers, comme index.php, news.php, mais aussi les fichiers d'admins, protégés par un système de sessions.

Dans un dossier /includes ,je met config.php (pour se connecter à la BDD), fonctions.php (toutes les fonctions du site) et common.php (un fichier qui gère le système de session et inclut les 2 autres, que j'inclus dans toutes les pages). Dans ce dossier se trouve également d'autres fichiers à inclure, qui me servent de templates.

Dans le dossier /design, je met tous les fichiers nécéssaires au design (je sépare le CSS "statique", et le CSS de ce qui est parsé en général). Je met également toutes les images statiques dans un sous-dossier /design/img/

Puis après, différents dossiers en fonction de mes besoins.

En gros, cela donne ça :

  • index.php
  • news.php
  • admin_index.php
  • admin_news.php
  • etc...
  • /includes
    • fonctions.php (inclus dans common.php)
    • common.php (inclus dans toutes les pages, gère les sessions, la connexion au SGBD, etc...)
    • config.php (inclus dans common.php)
    • haut.php (template)
    • bas.php (template)

  • /design
    • design.css
    • parser.css
    • /img
      • logo.png
      • etc...
  • /images (varie beaucoup en fonction du projet)


En ce qui concerne l'organisation des scipts en eux-même, je passe beaucoup par des variables telles que $_GET['action'] dans les fichiers.
Par contre, aucune séparations des requêtes ou quoi que ce soit. je sais qu'au niveau de l'organisation, ce n'est pas ce qu'il y a de mieux, mais mes sites sont touts petits, donc ça n'en vaut pas vraiment la peine.
Édité le 07/01/2008 à 21:22:16 par kankan
 
Hors ligne Talus # Posté le 07/01/2008 à 22:23:58
タルス
Avatar
Groupe : Membres
Voici mon architecture du moment :
Citation
  • ./frames/ Contient la frame à charger selon le lieu ou on se trouve. Est appelée automatiquement par la class mère "Frame", lors de la demande de la page.
  • ./images/ : Mes images (subdivisé en deux trois répertoires : un pour le design (logos, etc), un pour les icones pour le moment).
  • ./includes/ : Mes inclusions, mes class (SQL, TPL, Gestion de la RI, ...), mes fonctions, et un fichier start qui démarre le bordel.
  • TPLs : Mes templates. J'ai dedans trois sous dossiers : cache, ou je fous le cache compilé de mes fichiers, files, ou y'a mes tpls en eux-même, répartis selon la catégorie à laquelle ils apartiennent (home, forums, ...), et enfin mes styles CSS.


J'utilise aussi pas mal de classes statiques (dont deux super importantes définies dans start.php : Une qui me permet d'acceder de n'importe ou aux instances de mes objets, et une autre à mes variables "globales", necessaire pour que tout fonctionne. Mes variables "système" en gros.)
 
Hors ligne Kite # Posté le 09/01/2008 à 19:37:25
Groupe : Membres
Bonsoir, étant en train de faire une section de mon site pro en php, je regarde comment faire les arborésence et c'est vraiment intéressant. Néanmoins j'hésite à m'aider d'un framework... étant donné que ca fait juste quelque jour que je me suis mis a php. Je pense essayé les framework pour comprendre ce qu'est vraiment le php et ensuite modifier a la main. Ca fait une semaine que je code tout à la main, je commence a avoir compris des choses maintenant lol
Édité le 09/01/2008 à 20:11:24 par Kite
Hors ligne Vorex # Posté le 11/01/2008 à 23:23:02
Groupe : Membres
J'avoue ne pas avoir tout lu mais de ce que j'ai lu ca ma donné envie de participer et de vous présenter la façons dont j'organise mes sites, voici donc l'arborescence :

Dossier "Root"


  • Root
  • Sous dossier

    • + bdd
    • + cache
    • + langues
    • + librairies
    • + templates

    Fichier

    • - index.php
    • - bas.php
    • - bas.ini.php
    • - haut.php
    • - haut.ini.php
    • - apropos.php


Sous dossier "BDD"


  • bdd
  • Sous dossier

    • Aucun

    Fichier

    • - .htaccess
    • - config.xml


Sous dossier "cache"


  • cache
  • Sous dossier

    • Aucun

    Fichier

    • Tout les fichiers mis en cache.


Sous dossier "langues"


  • langues
  • Sous dossier

    • en
    • fr

    Fichier

    • - langues.xml
      Contient la correspondance entre le nom complet et le repertoire de chaque langue.


Sous dossier d'une langue


  • +langue
  • --fr
  • Sous dossier

    • templates
      Contient un fichier par design afin de mettre des infos comme le nom et une description pour chacun.

    Fichier

    Un fichier correspondant à chacun des modules comprenant des clef de langues. Ainsi qu'un fichier liens qui permet la traduction des urls pour chaque modules.
    • - index.xml
    • - haut.xml
    • - bas.xml
    • - apropos.xml
    • - liens.xml


Sous dossier "librairies"


  • librairies
  • Sous dossier

    • Aucun

    Fichier

    Toutes les bibliotheques (même si j'ai pris l'habitude d'appeller ça librairie).
    • - cache.class.php
    • - config.class.php
    • - news.class.php
    • - xml.class.php
    • - ...


Sous dossier "templates"


  • templates
  • Sous dossier

    Un dossier par design
    • Test

    Fichier

    • - Aucun


Sous dossier d'un template


  • +templates
  • -- Test
  • Sous dossier

    • css
      Contient tout les fichiers css du design.
    • images
      Contient toutes les images dont le design a besoin, ainsi qu'un sous dossier drapeaux pour les drapeaux de langues (un drapeau par langue).
    • js
      Contient tout les fichier de javascript dont le design pourrait avoir besoin.
    • xml
      contient le fichier de configuration du design. Celui ci définit certaines choses, entres autres le nombre de news à afficher ou le chemin de l'image de préview du design.

    Fichier

    Un fichier correspondant à chacun des modules comprenant la partie design avec le moins possible de php (surtout des boucles et des echos donc).
    • - accueil.tpl
    • - haut.tpl
    • - bas.tpl
    • - apropos.tpl


Voila c'est l'arborescence que je me suis faite, si vous voulez plus d'informations n'hésitez pas.

Vorex
 
Hors ligne Bilbax # Posté le 12/01/2008 à 01:58:23
www.bilbax.eu
Avatar
Groupe : Membres
Bonsoir :) ,

Alors moi j'ai complètement restructuré le site sur lequel de bosse, voici ce que ça donne :) .

Architecture des dossiers



Code : Autre - Afficher / masquer les numéros de ligne
  1. /
  2. |-- Templates   :: Dossier qui gère l'affichage de prêt ou de loin
  3. |   |-- templates   :: Contient les fichiers templates
  4. |   |   |-- fr   :: Concerne les pages françaises
  5. |   |   |   |-- forum   :: Fichiers templates pour le forum
  6. |   |   |   |   |- index.tpl
  7. |   |   |   |   |- viewTopic.tpl
  8. |   |   |   |   \- (etc...)
  9. |   |   |   |
  10. |   |   |   |-- admin   :: Pour l'admin
  11. |   |   |   |   \- (etc...)
  12. |   |   |   |
  13. |   |   |   \-- (etc...)
  14. |   |   |
  15. |   |   |-- en :: Pour l'anglais
  16. |   |   |   \-- (etc...)
  17. |   |   |
  18. |   |   \-- (etc...)
  19. |   |
  20. |   |-- design   :: Concerne la mise en forme des pages, des designs quoi
  21. |   |   |-- default   :: Un exemple de design, ici celui par défaut
  22. |   |   |   |-- css   :: Contient tout les fichiers CSS, tous séparés selon leur rôle
  23. |   |   |   |   |- structure.css
  24. |   |   |   |   |- forum.css
  25. |   |   |   |   |- MsgBox.css
  26. |   |   |   |   \- (etc...)
  27. |   |   |   |
  28. |   |   |   |-- bg   :: Les images servant aux CSS (principalement pour background)
  29. |   |   |   |   \- (etc...)
  30. |   |   |   |
  31. |   |   |   |-- img   :: Divers images insérées dans les documents XHTML
  32. |   |   |   |   \- (etc...)
  33. |   |   |   |
  34. |   |   |   \- favicon.ico
  35. |   |   |
  36. |   |   \-- (etc...)
  37. |   |
  38. |   |-- js   :: Concerne les scripts JavaScript évidemment
  39. |   |   |
  40. |   |   |- general.js
  41. |   |   |- CUform.js
  42. |   |   \- (etc...)
  43. |   |
  44. |   |-- xhtml   :: Contient des pages divers
  45. |   |   |
  46. |   |   |-- fr   :: Pages en français
  47. |   |   |   |- HTTPerr.php   :: Erreurs HTTP
  48. |   |   |   |- internalError.php   :: Problème grave
  49. |   |   |   \- (etc...)
  50. |   |   |
  51. |   |   \-- (etc...)
  52. |   |
  53. |   \-- xml   :: Contient différents fichiers XML comme des flux RSS
  54. |
  55. |-- libs :: Dossier où se trouve des classes, ensemble de fonctions et composants du site
  56. |   |- user.php   :: Gestion de l'utilisateur actuel (et *non* pas DES utilisateurS)
  57. |   |- sql.php   :: Gère la base de données MySQL bien sûr
  58. |   |- templates.php   :: Le fameux moteur de templates (du fil à retordre)
  59. |   |- upload.php   :: Classe pour faciliter au maximum l'upload de fichiers
  60. |   |- functions.php   :: Divers fonctions
  61. |   \- (etc...)
  62. |
  63. |-- etc   :: Fichiers de configuration généraux du site
  64. |
  65. |-- mod   :: Point crucial, contient tout les mods du site
  66. |   |-- forum   :: Un module, ici le forum, ensemble d'actions visant à un but commun (ici c'est faire un forum)
  67. |   |   |- delete.php   :: Ici une action pour le module 'forum' qui sert à supprimer un message
  68. |   |   |- index.php
  69. |   |   |- newTopic.php
  70. |   |   \- (etc...)
  71. |   |
  72. |   |-- chat  :: Un autre module, concerne les chats
  73. |   |   |-- etc   :: Fichiers de config pour le module
  74. |   |   |   \- port.conf   :: Un fichier de config, ici désigne le port du chat
  75. |   |   |
  76. |   |   |-- logs   :: Logs du module
  77. |   |   |
  78. |   |   |- send.php  :: Action pour le module
  79. |   |   |- stop.php  :: Autre action
  80. |   |   \- server.php
  81. |   |
  82. |   \-- (etc...)
  83. |
  84. |-- upload   :: Contient les fichiers uploadés
  85. |   |- _static   :: Contient des images pour les pages ne devront pas être affectés par le design
  86. |   |  |- easterEggs.jpg   :: Image, ici pour la page de l'Œuf de Pâques (parce que oui il y en a un)
  87. |   |  \- (etc...)
  88. |   |
  89. |   |- aaaa   :: Dossier intervallaire des uploads publique
  90. |   |  \- (fichiers numéroté de 1 à 100 de cette manière : 1.png, 44.jpg, 67.gif, etc... ; après 100 ça passe au dossier intervallaire supérieur)
  91. |   |
  92. |   |- aaab   :: Autre dossier intervallaire qui servira quand le précédent sera plein (contiendra 100 fichiers)
  93. |   \- (etc...)
  94. |
  95. |-- rsx   :: Contient des ressources variés pour les scripts comme des polices TTF
  96. |
  97. |- core.php   :: Script qui gère la fonctionnement des pages du site, est appelé à chaque fois
  98. \- kernel.php   :: Noyau du site, démarre les composants du site au besoin

PS : J'en ai pompé pour faire ça :D .

Fonctionnement



J'utilise la méthode d'include dite « dangereuse », c'est la première fois que je l'utilise et c'est bien je trouve :) . Tout d'abord j'ai codé un système que je nomme « résolveur d'URL », celui-ci a pour tache de parser l'URL que le visiteur a soumise. Tout d'abord les URL se présente ainsi :

page-a-appeller~argument1-arg2-arg3.xhtml


On envoie tout ça (sauf l'extension qui est retirée dans la règle de Rewrite) comme paramètre au script core.php via $_GET['url'], ensuite le script va parser ça en deux parties (au niveau du '~'). La première contient la page à appeler, et la seconde les arguments séparés par des '-'. Je dispose ensuite d'un Array qui fait la conversion de la page => script à exécuter ; par exemple 'accueil' va appeler le script 'mod/news/accueil.php', 'admin-news' => 'mod/admin/news.php'. Et les arguments sont contenus dans un array $_args.

Script d'exemple



Par exemple voici le script 'newTopic' du module 'forum' :)

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php require 'kernel.php'; // On inclue le Kernel, on démarre les composants, comme on a pas modifié $_CFG il va démarrer les composants par défauts
  2.  
  3. if(!isset($_args[0]) || !is_numeric($_args[0])) HTTPerr(412); // Si on a pas les arguments requis on affiche une erreur HTTP 412 (Précondition échouée)
  4.  
  5. if(!$usr->connected) MsgBox('Vous devez être connecté pour créer un topic.', 'erreur', 'connexion.xhtml'); // Si l'utlisateur n'est pas connecté alors affiche un message d'erreur avec MsgBox()
  6.  
  7. if(isset($_POST['titre']) && isset($_POST['ss_titre']) && isset($_POST['contenu']) && !empty($_POST['forum']) && is_numeric($_POST['forum']))
  8. {
  9.         $_POST['titre'] = trim($_POST['titre']);
  10.         $_POST['ss_titre'] = trim($_POST['ss_titre']);
  11.         $_POST['contenu'] = trim($_POST['contenu']);
  12.         if(mysql_num_rows($sql->requete('SELECT ID FROM forum WHERE ID='.$_POST['forum'].';')) == 0) MsgBox('Le forum n\'existe pas.', 'erreur', 'forum.xhtml');
  13.         if(empty($_POST['titre'])) MsgBox('Veuillez spécifier un titre.', 'erreur', 'forum~newtopic-'.$_POST['forum'].'.xhtml', FALSE);
  14.         if(empty($_POST['contenu'])) MsgBox('Veuillez spécifier un message.', 'erreur', 'forum~newtopic-'.$_POST['forum'].'.xhtml', FALSE);
  15.         $sql->unbuff_requete('INSERT INTO forum_topic VALUES(NULL, \''.esc($_POST['titre']).'\', \''.esc($_POST['ss_titre']).'\', '.$usr->id.', '.$_POST['forum'].', '.time().', 0, 0, 0, 0, 0, 0);');$t = mysql_insert_id();
  16.         $sql->unbuff_requete('INSERT INTO forum_msg VALUES(NULL, '.$usr->id.', '.mysql_insert_id().', \''.esc($_POST['contenu']).'\', '.time().', \''.$_SERVER['REMOTE_ADDR'].'\', 0, 0, 0);');
  17.         $sql->unbuff_requete('UPDATE forum SET topic=topic+1, msg=msg+1 WHERE ID='.$_POST['forum'].';');
  18.         MsgBox('Le topic a été créé avec succès.', 'information', 'forum~voirtopic-'.$t.'.xhtml', TRUE);
  19. }
  20.  
  21. $forum = $sql->requete('SELECT titre FROM forum WHERE ID='.$_args[0].';', 'arr');
  22. if(empty($forum))
  23.         MsgBox('Le forum n\'existe pas.', 'erreur', 'forum.xhtml');
  24. $tpl->titre = 'Nouveau topic - '.htmlspecialchars($forum['titre']); // Modifie le titre de la page
  25. $tpl->variable('id', $_args[0]); // Enregistre une variable template
  26. $tpl->executer('forum/newtopic'); // Exécute "/Templates/templates/{LNG}/forum/newtopic.tpl"
  27. ?>



Voilà ^^ .

Retour au forum "PHP" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 491 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0859s (0.0573s)