CMS: синхронизировать ссылки на внутренние страницы в контенте страницы

Я сделал эту скромную CMS на PHP (и Zend Framework).

Содержимое страницы опубликованного веб-сайта сохраняется в поле MySQL TEXT. При редактировании содержимого страницы можно создавать ссылки на другие внутренние страницы веб-сайта.

Заголовки страниц (SEO uri) также доступны для редактирования в CMS.

Как правильно синхронизировать внутренние ссылки в контенте, когда ярлык страницы, на который есть ссылка, изменен конечным пользователем CMS?

Я приветствую решения, от простых и надежных (без излишнего рефакторинга базы данных) до более сложных и гибких, требующих некоторого рефакторинга базы данных и т. Д. Какие есть хорошие идеи, чтобы справиться с этим?

Заранее спасибо.

PS .: Это не обязательно указывать в PHP / MySQL. Просто глобальная концепция, вероятно, подойдет, если, конечно, это не что-то неясное, с чем PHP / MySQL не может справиться.


person Decent Dabbler    schedule 11.10.2010    source источник


Ответы (2)


Вот как к этому подходят некоторые системы управления контентом, и в целом кажется, что это лучший баланс между производительностью во время выполнения, производительностью во время редактирования и управляемостью:

Ведите таблицу страниц и ссылок:

|PageID    |LinksToID    |
|----------|-------------|
|1         |2            |
|1         |3            |
  1. Когда вы сохраняете страницу (foo), найдите все ссылки на этой странице (не очень интенсивно), найдите, где каждая из них ссылается (тривиально, поскольку, конечно, ваши страницы проиндексированы по URL-адресу, верно?).
  2. Заполните эту таблицу этой информацией (на странице 1 есть ссылки на страницы 2 и 3).
  3. Когда страница 3 будет переименована, вернитесь к этой таблице и вытащите все страницы, которые ссылаются на нее; искать в их содержании URL-адреса на страницу 3, заменять и обновлять.

Нет влияния на время выполнения, а влияние времени редактирования оптимизировано. И вы получаете удобную, удобную для запроса карту всех перекрестных ссылок на вашем сайте. Бонус!

person Rex M    schedule 11.10.2010

Опция 1:

Выполняйте поиск в содержимом служебных URL-адресов при вставке / обновлении содержимого и сохраняйте их в таблице, которая связывает служебные URL-адреса с их идентификаторами и с идентификатором содержимого. ('slug_content_map')

Затем вы можете добавить метод, который заменяет старый URL-адрес заголовка новым URL-адресом заголовка в содержимом, когда URL-адрес обновляется, если в содержимом есть запись в 'slug_content_map'.

Вариант 2:

При вставке / обновлении содержимого замените служебные URL-адреса строкой, например {slugId: 3}, а затем замените ее динамически при отображении содержимого. У этого метода больше накладных расходов при отображении контента, так как вам придется искать ярлык, чтобы заменить его.

person Clay Hinson    schedule 11.10.2010