Переписать параметры URL в Sitecore - PullRequest
2 голосов
/ 09 мая 2011

У меня есть сайт, который показывает архив новостей на основе параметра "год" в URL.Примером может быть такой: domain.com / news / newsarchive? Year = 2008

Как я могу в Sitecore CMS переписать мои URL-адреса, чтобы удалить параметр "year"?Я хочу переписать свои URL-адреса примерно так: domain.com / news / newsarchive / 2008

Как это возможно в Sitecore?

Ответы [ 6 ]

3 голосов
/ 10 мая 2011

Это зависит от вашего решения.URL-адрес по умолчанию является индикатором того, какой элемент разрешен.Это означает, что URL / news / newsarchive / 2008 обычно разрешает элемент в дереве контента с этим путем.

Поэтому у вас есть несколько вариантов.

  1. Сделайте ваше дерево контента похожим на нужный вам URL.Переместите ваши новости, чтобы все новости, созданные в 2008 году, были в папке 2008 года.Затем в папке 2008 будет представлена ​​презентация, в которой будет показан архив за этот год.

  2. Переопределите способ разрешения элемента контекста.Это сделано в конвейере httpBeginRequest в процессоре ItemResolver, как я помню.

  3. Используйте подстановочный знак, как предлагает Ян, и у вас есть некоторый пользовательский код для получения года из вашего URL.

Надеюсь, что поможет

2 голосов
/ 08 мая 2012

Просто добавить к Йенс Миккельсен 2-й пункт в своем ответе.

Создайте свой собственный HttpRequestProcessor, как это:

public class CustomResolver : HttpRequestProcessor
{
    public override void Process(HttpRequestArgs args)
    {
        Assert.ArgumentNotNull(args, "args");
        //make sure you are in the right context, and that the pipeline hasn't resolved an item yet
        if ((Sitecore.Context.Item == null && Sitecore.Context.Database != null) 
            && (Sitecore.Context.Database.Name != "core") )
        {
            var requestUrl = args.Context.Request.RawUrl; // e.g. domain.com/news/newsarchive/2008
            //Do your magic here
            Item item = ResolveItemOnUrl(requestUrl);
            if (item != null)
            {
                Sitecore.Context.Item = item;
            }
        }
    }
}

И добавьте это к HttpRequestPipeline после ItemResolver

<pipelines>
  <httpRequestBegin>
    <processor patch:after="*[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']" type="yourNameSpace.CustomResolver,  yourNameSpace" />
  </httpRequestBegin>
</pipelines>

Это примерно то же самое, что Sitecore использует в Sitecore Ecommerce Services (SES) для разрешения продуктов.

0 голосов
/ 19 сентября 2012

Наилучший подход для этого, как сказал Йенс Миккельсен 1), сделать структуру вашего contenttree похожей на предпочитаемую структуру url.и если это невозможно 2) использовать подстановочный знак (элемент с * в качестве имени) в качестве дочернего элемента элемента newsarchive.Этот элемент обрабатывает все дочерние элементы, расположенные ниже элемента архива новостей, который не может быть найден в дереве.В коде подуровня вы можете прочитать путь к запрашиваемому элементу и обработать ваш код в соответствии с этим.

0 голосов
/ 11 мая 2012

Добавление к потенциальным решениям: модуль isapi_rewrite на уровне IIS.

Например, модуль от helicontech может выполнять довольно сложные переписывания http://www.helicontech.com/isapi_rewrite/doc/examples.htm

Это было бы правильным решением, если причина дляредирект должен был обрабатывать URL, нацеленные на более раннюю структуру сайта.Это позволит сохранить реализацию sitecore без «устаревших» ссылок.

0 голосов
/ 21 ноября 2011

Вы можете сделать именно это сейчас со следующим модулем с открытым исходным кодом, написанным Sitecore MVC Стивеном Папой:

https://github.com/Sitecore/Sitecore-Mvc-Routing

0 голосов
/ 10 мая 2011

Вы можете использовать Подстановочный знак .

...