CMS: синхронизировать ссылки на внутренние страницы в содержимом страницы
Я сделал эту скромную CMS в PHP (и Zend Framework).
Содержимое страницы опубликованного сайта хранится в поле MySQL TEXT. При редактировании содержимого страницы можно создавать ссылки на другие внутренние страницы сайта.
Слагы страниц (SEO uri's) также доступны для редактирования в CMS.
Каков хороший способ синхронизации внутренних ссылок в контенте, когда конечный пользователь CMS изменяет слаг страницы, на который ссылается данный контент?
Я приветствую решения, от простых и надежных решений (без чрезмерного рефакторинга базы данных), до более сложных и гибких, которые требуют некоторого рефакторинга базы данных и тому подобное. Какие есть хорошие идеи, чтобы справиться с этим?
Заранее спасибо.
PS: это не должно быть указано в PHP/MySQL. Просто глобальная концепция, вероятно, подойдет, если только это не является чем-то непонятным, с которым PHP / MySQL, конечно, не в состоянии справиться.
2 ответа
Вот как к этому подходят некоторые системы управления контентом, и в целом это кажется наилучшим балансом в отношении производительности во время выполнения, производительности во время редактирования и управляемости:
Держите таблицу страниц и ссылок:
|PageID |LinksToID |
|----------|-------------|
|1 |2 |
|1 |3 |
- Когда вы сохраняете страницу (foo), найдите все ссылки на этой странице (не очень интенсивно), найдите, куда ссылается каждая из них (тривиально, поскольку, конечно, ваши страницы индексируются по URL, верно?).
- Заполните эту таблицу этой информацией (страница 1 содержит ссылки на страницы 2 и 3).
- Когда страница 3 будет переименована, вернитесь к этой таблице и извлеките все страницы, которые ссылаются на нее; искать их содержание для URL-адресов на страницу 3, заменить и обновить.
Не влияет на время выполнения, а влияние на время редактирования оптимизируется. И вы получите удобную, удобную для запроса карту всех перекрестных ссылок на вашем сайте. Бонус!
Опция 1:
При вставке / обновлении содержимого ищите в содержимом URL-адреса слагов и сохраняйте их в таблице, которая связывает URL-адреса слагов с их идентификаторами и идентификатором содержимого. ('Slug_content_map')
После этого вы можете добавить метод, который заменяет старый URL-адрес slug новым URL-адресом slug в содержимом при обновлении URL-адреса, если у содержимого есть запись в 'slug_content_map'.
Вариант 2:
При вставке / обновлении содержимого замените URL-адреса slug строкой, такой как {slugId:3}, а затем динамически замените ее при отображении содержимого. Этот метод имеет больше накладных расходов при отображении контента, так как вам придется искать слаг, чтобы заменить его.