niedziela, 30 kwietnia 2017

Tagi, Umbraco Tag Service

Tagi w Umbraco Tag Service




W poprzednim poście opisałem jak zaimplementować do Umbraco możliwość dodawania tagów. Dziś będzie o tym, jak wykorzystać to w kodzie i umożliwić filtracje po tagach.
Aby mieć możliwość pobrania dokumentów z Tagiem o określonej nazwie, potrzebujemy UmbracoHelper’a. Ja stworzyłem klasę, którą wstrzykuję w miejsca gdzie potrzebuję pobrania czegokolwiek dodatkowego z Umbraco, a tak wygląda jej kluczowy element:

    public class UmbracoEventHandler : ApplicationEventHandler
        private static UmbracoHelper _umbracoHelper;

        public UmbracoHelper Umbraco => _umbracoHelper ?? (_umbracoHelper = new UmbracoHelper(UmbracoContext.Current));

Na potrzeby wyświetlania tej listy, utworzyłem nowy kontroler, który jest odpowiedzialny tylko i wyłącznie za to.
    public class UmbracoEventHandler : ApplicationEventHandler
[DonutOutputCache(CacheProfile = "Page.Cache")]
        public override ActionResult Index(RenderModel model)
        {
            var pageViewModel = new PageViewModel();
            var extendedModel = _pageModelExtender.ApplyLayoutToModel(pageViewModel, model.Content);
            var tagName = Request.QueryString["tag"];
            var articles = new List();
            var articlesWithTag = _nodeHelper.Umbraco.TagQuery.GetContentByTag(tagName).ToList();
            var header = $"Posty otagowane {tagName}";
            articlesWithTag.ForEach(article =>
            {
                articles.Add(new ArticleCardViewModel
                {
                    Title = article.GetPropertyValue("title"),
                    ShortDescription = article.GetPropertyValue("shortDescription"),
                    Tags = article.GetPropertyValue("tags").Split(','),
                    CardImage = article.GetImage("cardImage", _nodeHelper).WithQuality(80).WithHeight(160).WithWidth(330).WithCrop(),
                    Url = article.Url
                });
            });
            var modelForArticles = new ArticleListViewModel
            {
                Title = header,
                Articles = articles
            };
            var viewModel = new ArticleByTagViewModel
            {
                Id = extendedModel.Id,
                Title = header,
                Footer = extendedModel.Footer,
                Header = extendedModel.Header,
                Description = "Lista wszystkich postów które zostały otagowane " + tagName,
                ArticlesListModel = modelForArticles
            };
            return View("Tag", viewModel);
        }
Kod odpowiedzialny za pobranie wszystkich dokumentów z określonym tagiem to zmienna „articlesWithTag”. Po drodze tworzę także dodatkowe modele i pakuję w odpowiadającą mi strukturę tak, by widok mógł pozostać czysty.
Nazwę taga, który ma być brany pod uwagę, pobieram z parametru w linku (patrz zmienna „tagName”). Jeżeli chodzi o razora, to reużyłem istniejący widok kart postów, skorzystałem z Section buildera i efekt końcowy jest zadowalający:



Dziś krótko, ale używanie tag service jest dość proste i stwierdziłem, że nie ma co nadmiernie się rozpisywaćJ
Udanej Majówki!

Brak komentarzy:

Prześlij komentarz