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