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