Как хранить ссылки между страницами в CMS - PullRequest
3 голосов
/ 11 октября 2009

Я создаю интерфейс для ecms. Основная цель фронтэнда - рендеринг html-страниц на основе контента, хранящегося в базе данных.

У меня есть одна таблица на страницу, каждая таблица состоит из поля xml с содержимым страницы и некоторыми метаданными. (Я решил хранить XML в базе данных, чтобы использовать функции, предлагаемые SQL Server 2008, такие как проверка xquery или xsd)

Я думаю о том, как сохранить ссылки между страницами, чтобы в будущем можно было изменить схему URL (я не совсем уверен, что это требуется).

В настоящее время я выделил два типа внутренних ссылок:

  • Обычные ссылки - как тег <a>, окруженный текстом.
  • Список ссылок со встроенным контентом - например, список связанных новостей (для каждого элемента мне нужно отобразить заголовок со ссылкой и рефератом)

В настоящее время я вижу следующие решения:

для обычной ссылки:

  • Храните его в окружении токена, например: $PAGE_LINK[unique identifier of the content] и замените такие токены правильными ссылками на этапе рендеринга. (Этот подход взят из Livesite - ECMS, с которой я работал)
  • Сохраните его как <a href="local://unique identifier of the content"> и замените содержимое атрибута href. с соответствующей ссылкой.
  • Предположим, что схема URL является статической.

и для списка ссылок со встроенным контентом:

  • Храните в базе данных как можно больше связей (чтобы использовать мой ORM).
  • Сохраните его как список уникальных идентификаторов содержимого в формате XML как часть содержимого XML на странице (это дает возможность заказа бесплатно и немного более гибко). Пример:

    <related_articles>
      <resource type="news" content_id="233"/>
      <resource type="news" content_id="231"/>
      <resource type="blog_post" content_id="233"/>
    </related_articles>
    

Вопросы: Знаете ли вы какие-либо другие подходы к этой проблеме? Как это делается в ведущих системах CMS, таких как: Drupal, Joomla, N2, Wordpress и так далее? Какое решение вы бы выбрали?

1 Ответ

1 голос
/ 14 октября 2009

Я думаю, это во многом зависит от того, какую функциональность вы ожидаете от ссылок.Я использовал пару CMS 'в прошлом, и одна из вещей, которые мне нравились в некоторых из них, это то, что вы могли блокировать удаление или деактивацию страниц, на которые были ссылки.Таким образом, я увернулся от множества звонков в службу поддержки.Еще одна замечательная возможность - сообщать о неработающих ссылках, если вы позволяли людям нарушать ссылки.

Они использовали схему ссылок по умолчанию, которую можно настраивать, а затем она сопоставляла ссылки в содержимом для поиска соответствующего содержимого.Это будет сделано, когда контент будет сохранен / опубликован.Для ссылок, сгенерированных системой, внутренний код будет регистрировать ссылку в том же индексе, в котором она была сгенерирована.

Подводный камень, которого следует избегать, - это кэширование.Если вы кэшируете отображаемые страницы, вы должны сделать этот кеш недействительным, если ссылка каким-либо образом изменится.

HTH.

...