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

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

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

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

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

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

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

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

2 ответа

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

Держите таблицу страниц и ссылок:

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

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

Опция 1:

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

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

Вариант 2:

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

Другие вопросы по тегам