Способ доступа к содержимому поля с жидкостью - PullRequest
0 голосов
/ 23 мая 2018

Я использую последнюю версию NuGet для ядра сада.Поскольку я хочу использовать Bulma в качестве CSS Framework, мне нужно создавать шаблоны.У меня есть одна из нескольких проблем: Как я могу получить доступ к содержимому поля из жидкого шаблона.

Например, тема блога имеет тип контента Article.Внутри статьи есть поле Субтитры .Я создал шаблон Article-TextField как

<h2 class="subtitle">{{ Model.Field.Text }}</h2>

Подобный шаблон .cshtml работает, но, по-видимому, с жидким шаблоном, нет доступа к свойству TextField Text .Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 23 мая 2018

Проблема в том, что модуль OrchardCore.ContentFields не регистрирует тип TextField в сервисе Liquid TemplateContext.GlobalMemberAccessStrategy, что препятствует доступу к любым членам объекта TextField.

модуль регистрируется DisplayTextFieldViewModel следующим образом:

TemplateContext.GlobalMemberAccessStrategy.Register<DisplayTextFieldViewModel>();

Мало того, что это не нужно, поскольку LiquidViewTemplate уже автоматически регистрирует модель, это также мало чем помогает, поскольку вы можете получить доступ только к модели.Field свойство, но не его Text свойство.

Например, это даст некоторый вывод:

{{ Model }}

Это также будет:

{{ Model.Field }}

Но, как вы правильно заметили, это не будет:

{{ Model.Field.Text }}

Это явно упущение в Orchard Core, особенно вМодуль ContentFields.

Поскольку вы используете пакеты NuGet, вы, очевидно, не сможете взломать его в исходном коде.Но то, что вы могли бы сделать, это добавить класс Startup в вашу тему, производный от StartupBase, и добавить следующий статический конструктор:

static Startup()
{
    TemplateContext.GlobalMemberAccessStrategy.Register<TextField>();
}

Убедитесь, что вы ссылаетесь на пакет Nuchet OrchardCore.ContentFields и импортируетеOrchardCore.ContentFields.Fields пространство имен для вашей темы для компиляции.

После этого вы сможете получить доступ к свойству Text из вашего шаблона Liquid.

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

...