2011-06-24 2 views
5

Je crée donc un CMS, un script de galerie via Object Oriented PHP. De toute façon, le problème est maintenant que j'ai la disposition de base pour les objets et tel au point où je dois commencer à mettre en place, je suis perplexe comment faire cela.Comment structurer un CMS?

Ce que j'ai est essentiellement une classe Navigation, Données, Galerie et Module. Module signifie pages, catégories, et cetera. Le problème est que Gallery produit les images, le module donne les données pour les pages, la navigation crée la navigation (vous devinez). Vous obtenez l'image.

Sur la page d'index, je finis par faire essentiellement ce (cela va changer, mais il illustre bien la façon dont je commençais à mettre en place):

$navigation = new Navigation(); 
$navigation->top(); 

$page = new Module(); 
$page->basicPage($_GET['m']); 

Le basicPage() fait quelques choses , mais principalement c'est le problème:

$gallery = new Gallery(); 
$gallery->setGallery($id); 
$gallery->thumbGallery(); 

Donc ainsi de suite.

Le problème se pose en ce que si j'appelle basicPage(), le concepteur ou celui qui a très peu de contrôle sur les choix. Comme vous l'avez vu, c'est thumbGallery, et cela n'autorise pas les images complètes, et il ne vous permet même pas de définir la taille des vignettes (ce que je leur laisse faire, seulement si elles peuvent appeler cette fonction par eux-mêmes) .

J'ai donc pensé à quelques solutions au problème. Je n'ai pas ces pages de base, mais j'ai les concepteurs construisent des modèles un peu comme wordpress. Je n'aime pas cette solution, car elle rend le processus de conception compliqué, bien que minutieux. Je ne veux pas faire en sorte que tout soit contrôlé, et c'est un moyen. Bien sûr, vous pouvez "afficher: none" à des éléments comme le concepteur et quelques autres trucs, mais je veux qu'ils aient la capacité de faire beaucoup de choses, sans la manière compliquée que Wordpress fait.

Ma question est de savoir comment trouver l'équilibre entre le simple et la flexibilité?

Toute aide, même les idées sont appréciées. Merci.

EDIT: J'ai oublié de mentionner. Le problème vient du simple fait que l'index possède toutes ces données, sinon je devrai faire beaucoup d'if/else et tel, et je ne voulais vraiment pas en faire un programme procédural, juste un que vous pouvez essentiellement choses vers le bas et nous sommes bons. Voir, module représente à la fois la galerie et la page. La plupart des pages n'auront pas d'images attachées, et les catégories auront des images, mais pas toujours du texte. Cela provoquera une erreur si j'appelle thumbGallery et c'est juste une page d'information, et si j'appelle une page d'information et c'est une catégorie, elle ne montrera pas les images (pour éviter l'erreur). Je pourrais, et j'ai commencé à construire ensemble dans ce qu'on appelle la page de base, mais le problème que j'ai noté est qu'il restreint la liberté du concepteur sans avoir à jouer avec php, et la plupart des concepteurs sont bêtes quand il s'agit php, malheureusement. Espionnellement OOP (pas d'infraction, je suis aussi un designer, mais j'arrive aussi au programme).

+0

Jetez un coup d'œil au modèle de conception [Front Controller] (http://martinfowler.com/eaaCatalog/frontController.html). – Smurf64

Répondre

1

Sans voir le reste de votre code, il est difficile de connaître la meilleure solution compte tenu de ce que vous avez déjà. J'ai développé mes propres frameworks d'application CMS depuis le début pour les 9 dernières années, et je serais heureux de vous donner quelques conseils. Je suppose que vous stockez tout le contenu du CMS dans une base de données. Stocker la configuration pour les paramètres de galerie dans la base de données pourrait être une solution possible. En théorie, vous devriez avoir différentes vues (suivant le modèle MVC) pour afficher la galerie de différentes manières. Une vue de liste pour montrer plusieurs vignettes d'image, une pour montrer une seule image, plus une vue pour énumérer des catégories peut-être.Par conséquent, dans la base de données, vous pouvez définir que la page X doit afficher la vue miniature au lieu d'une vue de catégorie.

Je ne sais pas si c'est une solution au problème que vous avez, mais c'est un exemple très simpliste de la façon dont je l'ai fait dans mes CMS dans le passé.

+0

Eh bien oui, je fais déjà quelque chose comme ça (page, catégorie). Mais pour quelque chose comme une vue de liste de catégories, c'est quelque chose que je n'ai pas besoin de stocker dans la base de données, plutôt peut être fait en PHP. En effet, les données pour les catégories sont déjà stockées dans la table des modules, et doivent seulement être appelées et affichées correctement (formatées via PHP). Le problème que j'ai spécifiquement est principalement sur combien le concepteur peut changer. Par exemple, un concepteur peut vouloir la page créée pour être: Wrapper {tête, Nav, Content, Pied de page} Ou peut-être: Wrapper {Gauche [En-tête, Nav], [content] droit, pied de page} –

+0

Mais votre suggestion est toujours bonne, et je vous remercie pour l'idée. Peut-être qu'avec l'explication que j'ai donnée, vous pourriez peut-être mieux comprendre. Le problème est que je veux que la personne qui fabrique les modèles soit capable de les faire facilement. Peut-être, peut-être ... Je pense qu'ils devraient avoir la possibilité d'utiliser un modèle de base, mais ils peuvent aller plus loin s'ils le souhaitent? Pensez-vous que c'est acceptable ou? –

+0

C'est définitivement une décision importante en matière de design. Offrir la possibilité de personnaliser une vue est évident. Mais, cette vue peut-elle être personnalisée pour chaque instance de la vue? La page A peut donc avoir une vue personnalisée pour une liste de catégories par rapport à la vue de catégorie B de la page? Comment la vue personnalisée serait-elle définie? La façon dont cela est fait dépend en fait de certaines des décisions et des philosophies que vous avez utilisées dans d'autres parties du CMS. Mon framework CMS était beaucoup plus compliqué et permettait pas mal de personnalisation, à la fois via la base de données et les vues personnalisées, etc. – Percy