Лучший подход к управлению псевдонимами элементов контента

Мы думаем о переходе с Kentico CMS на Kontent. Пока что мы нашли ответы на большинство наших вопросов, связанных с навигацией. Но один вопрос остается неясным. Как реализовать псевдонимы страниц в приложении MVC.NET+Kontent.

Не редкий бизнес-случай, когда какая-то страница, скажем, sub-productAA, перемещается с productA на ProductB.

Например: из /products / ProductA / sub-productAA становится /products / ProductB / sub-productsAA. Предположим, что sub-productAA рекламировался на стороннем веб-сайте по оригинальному URL-адресу: /products / ProductA / sub-productAA.

Теперь исходный URL мертв. Как справиться с этой ситуацией?

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

Спасибо,

1 ответ

Решение

Kontent не предоставляет встроенных средств для обработки псевдонимов страниц. Вам, как автономной CMS, решать, как сопоставлять элементы контента с URL-адресами.

Я не думаю, что для этого есть какое-то единственно правильное решение. Если у вас нет огромного количества псевдонимов для управления, вы можете обрабатывать их в Kontent, создав тип контента, который имеет ярлык и связанный элемент, чтобы вы могли использовать его для хранения псевдонимов и перенаправления на правильный элемент контента. Для вашего примера:

  • Элемент типа содержимого продукта имеет ярлык "ProductB/sub-productsAA"
  • элемент типа содержимого псевдонима имеет ярлык "ProductA/sub-productAA"

Затем у вас есть действие, которое извлекает контент из продуктов по ярлыку:

var response = await _deliveryClient.GetItemsAsync<Product>(new EqualsFilter($"elements.{Product.SlugCodename}", productUrlSlug));

и если ничего не возвращается, выполните еще один поиск по псевдонимам:

var response = await _deliveryClient.GetItemsAsync<ProductAlias>(new EqualsFilter($"elements.{ProductAlias.SlugCodename}", productUrlSlug));

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

Обратной стороной является то, что редакторы контента должны управлять псевдонимами. Неплохая вещь, так как они должны думать о последствиях изменения URL-адресов.

Альтернативный подход - отслеживать псевдонимы на вашем сервере. Вы можете использовать веб-перехватчики для получения уведомлений об изменениях содержимого. Если ярлык продукта был изменен, вы можете сохранить старое значение и использовать настраиваемое промежуточное ПО для перенаправления на новую версию. Больше работы, но без редактора.

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