Question

Je crée un cms et je n'ai pas encore réglé le problème de l'emplacement de stockage de l'URL complète d'une page dans la structure.

Chaque page a un slug (nom convivial de la page) et chaque page a un parent nullable (pour les pages de niveau supérieur) et des enfants.

Où dois-je stocker l'URL complète (/ première page / sous-page) pour une page donnée? Est-ce que cela doit aller dans la base de données avec les autres propriétés de la page ou dans une cache?

Mettre à jour

Ce n'est pas la conception de la base de données que je demande, mais l'endroit où stocker l'URL complète sur une page donnée, de sorte que je n'ai pas besoin de parcourir l'URL complète pour obtenir la page demandée par l'utilisateur (/ first-page / sous-page)

Mise à jour 2

Je dois trouver quelle page appartient à l'URL actuellement demandée. Si l'URL demandée est / première page / sous-page, je ne souhaite pas scinder l'URL et parcourir en boucle la base de données (évidemment).

Je préférerais avoir l'URL complète dans le tableau afin de ne pouvoir effectuer qu'une seule requête (WHERE url = '/ première page / sous-page'), mais cela ne semble pas idéal. slug pour la page parent? Ensuite, je dois également mettre à jour le champ url pour tous les descendants.

Comment les autres personnes résolvent-elles ce problème? Le met-il dans la base de données? Dans un cache qui mappe / première page / sous-page avec l'id de la page? Ou sont-ils en train de scinder l’URL demandée et de boucler la base de données?

Merci

Anders

Était-ce utile?

La solution

Stockez-le dans une mémoire cache, car les serveurs Web devront rechercher les URL en permanence. Sauf si vous vous attendez à ce que les URL des pages changent très rapidement, la mise en cache réduira considérablement la charge de la base de données, qui constitue généralement votre goulet d'étranglement dans les sites Web gérés par base de données.

En gros, vous voulez un dictionnaire qui mappe l’URL - > tout ce dont vous avez besoin pour rendre la page. De nombreux serveurs Web utiliseront automatiquement le système de fichiers du système d'exploitation en tant que dictionnaire et disposeront souvent d'un cache intégré capable de reconnaître le changement de fichier dans le système de fichiers. Cela serait probablement beaucoup plus efficace que tout ce que vous pouvez écrire dans votre CMS. Par conséquent, il serait peut-être préférable que votre CMS implémente la structure directement dans le système de fichiers et gère d'autres correspondances avec des liens physiques ou bruts.

Autres conseils

Je viens de faire cela pour MvcCms . Je suis allé à l'idée de catégories de contenu / sous-catégories et de pages de contenu. Lorsqu'une catégorie / sous-catégorie de contenu est créée, je passe de manière récursive dans les parents, crée l'ensemble de l'itinéraire et le stocke ensuite dans la table des catégories. Ensuite, lorsque la page est demandée, je peux trouver la page de contenu correcte et savoir, en passant par une structure de navigation, si la navigation en cours de construction est la route actuelle ou active.

Cette approche nécessite certaines règles sur ce qui se passe quand une catégorie est modifiée. L’approche actuelle est qu’une fois que le chemin complet est défini pour une sous-catégorie, il ne peut plus être modifié ultérieurement avec les outils normaux.

La source est un fichier mvccms.codeplex.com

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top