элементы запроса sitecore по URL клиента - PullRequest
2 голосов
/ 22 февраля 2012

Я ищу быстрый и грязный способ запроса файлов макетов определенной страницы по ее дружественному URL.Это, вероятно, легко, но я не могу найти решение.

В основном я хочу сказать что-то вроде следующего.Псевдокод:

var mainpage = Sitecore.EasyQueryUtility.GetItemByFriendlyUrl(requestedUrl);

или

var mainpage = Sitecore.EasyQueryUtility.GetOppositeOfFriendlyUrl(friendlyurl);

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

Если вы хотите получить путь к файлу aspx, который используется для макета вашей страницы, вы можете использовать:

Sitecore.Context.Item.Visualization.Layout.FilePath
1 голос
/ 23 февраля 2012

Похоже, что вы хотите сделать две вещи здесь:

  1. Определить элемент на основе его отрендеренного URL в адресной строке (т. Е. Дружественный URL)использованный предметом, как только вы определите его.

Если все верно, надеюсь, это поможет вам:

Примечание : непроверенный код, который я делал-the-fly

// if you have the full URL with protocol and host
public static Item GetItemFromUrl(string url)
{
    string path = new Uri(url).PathAndQuery;    
    return GetItemFromPath(path);
}

// if you have just the path after the hostname
public static Item GetItemFromPath(string path)
{
    // remove query string
    if(path.Contains("?"))
        path = path.split('?')[0];

    path = path.Replace(".aspx", "");

    return Sitecore.Context.Database.GetItem(path);
}

Получив элемент, вы можете получить имя макета следующим образом:

item.Visualization.GetLayout(Sitecore.Context.Device).Name;

Или физический путь файла макета к ASPX:

item.Visualization.GetLayout(Sitecore.Context.Device).FilePath;
0 голосов
/ 23 февраля 2012

Возможно, я вас неправильно понял, но если вы хотите контролировать формат дружественных URL-адресов, вы можете установить несколько атрибутов через класс Sitecore.Links.UrlOptions и передать его экземпляр в менеджер ссылок. Смотрите здесь для более подробной информации. (Примечание: класс LinkManager доступен только из SiteCore 6, я верю).

Код, который вы в итоге получите, выглядит следующим образом:

Sitecore.Links.UrlOptions urlOptions = (Sitecore.Links.UrlOptions)Sitecore.Links.UrlOptions.DefaultOptions.Clone(); 
urlOptions.SiteResolving = Sitecore.Configuration.Settings.Rendering.SiteResolving; 
string url = Sitecore.Links.LinkManager.GetItemUrl(item, urlOptions);

Затем вы можете установить поля, такие как AddAspxExtension, для URL-адресов, которые вы передаете.

Как видите, процесс зависит от передачи вами элемента - независимо от того, получен он через текущий контекст или получен по URL, с которого вы начинаете.

Если вы спрашивали о получении элемента определения макета, посмотрите на этот , который показывает вам, как.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...