Отображение сетки Umbraco в мега-меню

#razor #umbraco

#razor #umbraco

Вопрос:

Я хочу отобразить сетку Umbraco в мега меню, и я не могу использовать @currentPage.GetGridHtml(«») в этом сценарии. Мне нужно получить ее, используя переменную узла: myNode.getProperty(«menuGrid»)

Каков наилучший способ сделать это?

Ответ №1:

Вы можете использовать различные способы получения содержимого из сетки. Все они описаны здесь: https://our.umbraco.org/documentation/getting-started/backoffice/property-editors/built-in-property-editors/grid-layout/render-grid-in-template .

На мой взгляд, лучшим способом было бы создать пользовательский вид сетки / средство визуализации и просто использовать его здесь с правильным методом извлечения содержимого, например

 @CurrentPage.GetGridHtml(Html, "yourGridPropertyAlias", "customgridview")
@CurrentPage.GetGridHtml(Html, "yourGridPropertyAlias", "/views/othercustomgridview.cshtml")
  

Комментарии:

1. Спасибо. Моя проблема в том, что у меня нет доступа к currentPage. В меню отображается список стран, и при наведении курсора мыши на страну будет отображаться сетка. (У каждой страны своя сетка) Так обычно (как и с любым другим свойством) Я бы перебрал список своих стран и динамически отображал сетку для каждой из них. Здесь я не могу найти способ сделать это.

2. Хм, где вы отображаете эти данные? В template / view вы должны иметь возможность использовать currentPage или Model. Содержимое или, по крайней мере, создайте экземпляр класса UmbracoHelper и сделайте это с помощью назначенного элемента содержимого. Если я правильно помню, вы также можете сделать это: @Html.GetGridHtml(…) и передать модель с псевдонимом свойства, из которого вы хотите получить HTML-таблицу.

Ответ №2:

Предложения Марчина помогли найти решение.

На всякий случай, если кто-то ищет что-то подобное, у меня был свой индекс, у которого нет доступа к GetGridHtml. После преобразования в типизированный контент я восстановил доступ к этому свойству

  foreach (var country in countryNode.ChildrenAsList)
                                                {
                                                    var myNode = Umbraco.TypedContent(country.Id);
                                                    var property = myNode.GetGridHtml("menuGrid");
                                                }