У меня есть две похожие проблемы, которые, как я подозреваю, имеют общее решение.
1) Я хотел бы создавать настраиваемые части, которые можно прикреплять, но только к определенным типам контента, например, только к таксономиям. Было бы очень здорово, если бы это было возможно из коробки с помощью миграций, например, что-то вроде .Attachable(cfg => cfg.ToType("Taxonomy"))
, но я так не думаю.
В настоящее время, чтобы моя пользовательская часть не использовалась для контента, для которого она не предназначена, я просто пишу проверки в методах драйвера:
protected override DriverResult Editor(CustomPart part, dynamic shapeHelper)
{
if (part.ContentItem.ContentType != "Taxonomy") return null;
return ContentShape("Parts_Custom_Edit", ...
}
Это хороший способ сделать это? Будет ли обработчик лучше подходить для такой логики?
2) Точно так же я хотел бы иметь возможность условно прикреплять разные части к разным отдельным элементам контента. Например, я хотел бы, чтобы только родительские термины первого уровня в таксономии имели некоторые поля, а дочерние термины — некоторые другие.
Лучший способ, который я могу придумать в настоящее время, чтобы справиться с этим, — это просто создать одну часть, которая содержит все поля, и выполнить проверки, аналогичные приведенным выше, в его методах драйвера, чтобы вернуть разные модели в зависимости от его контейнера. Затем в представлении шаблона я проверяю, какие поля отображать:
@if (Model.ThisField != null) {
<div>@Html.EditorFor(m => m.ThisField)</div>
}
else {
<div>@Html.EditorFor(m => m.ThatField)</div>
}
В идеале я хотел бы создать одну присоединяемую часть, которая способна добавлять несколько неприсоединяемых вторичных частей к существующим элементам контента, когда он прикреплен к типу, и к новым элементам контента, когда они создаются или обновляются. Есть ли безболезненный способ сделать это? Я думаю, что «Сварка» может быть тем, что мне нужно, но я не смог найти никакой документации или руководств, которые могли бы объяснить сварку мне, как будто мне пять лет.