2016-04-13 8 views
2

Ich habe zwei ähnliche Probleme, von denen ich vermute, dass sie eine gemeinsame Lösung haben.Wie fügen Sie Inhaltsteile nur bestimmten Typen oder bestimmten Inhaltselementen an?

1) Ich möchte benutzerdefinierte Teile erstellen, die angeschlossen werden können, aber nur für bestimmte Inhaltstypen, nur zum Beispiel Taxonomien. Es wäre wirklich cool, wenn das durch Migrationen möglich wäre, so etwas wie .Attachable(cfg => cfg.ToType("Taxonomy")), aber ich glaube nicht, dass es so ist.

Derzeit zu meinem benutzerdefinierten Teil zu verhindern, dass auf Inhalt verwendet wird, dass es nicht bei beabsichtigter ist, ich schreibe Kontrollen nur in den Treiber-Methoden:

protected override DriverResult Editor(CustomPart part, dynamic shapeHelper) 
{ 
    if (part.ContentItem.ContentType != "Taxonomy") return null; 

    return ContentShape("Parts_Custom_Edit", ... 
} 

Ist dies ein guter Weg, um darüber zu gehen? Wäre der Handler besser für diese Logik geeignet?

2) In ähnlicher Weise möchte ich in der Lage sein, verschiedene Teile an verschiedene einzelne Content Items bedingt anzuhängen. Zum Beispiel möchte ich nur Elternteile der ersten Ebene in einer Taxonomie haben einige Felder, während Kind Bedingungen einige andere haben.

Der beste Weg, den ich zur Zeit damit kommen kann, besteht darin, nur einen Teil zu erstellen, der alle Felder enthält und in den Driver-Methoden ähnliche Überprüfungen durchführt, um abhängig vom Container unterschiedliche Modelle zurückzugeben. Dann in der Vorlage Ansicht prüfe ich, welche machen Felder:

@if (Model.ThisField != null) { 
    <div>@Html.EditorFor(m => m.ThisField)</div> 
} 
else { 
    <div>@Html.EditorFor(m => m.ThatField)</div> 
} 

Im Idealfall würde Ich mag einen aufsteckbaren Teil erstellen, die die Zugabe von mehrer nicht aufsteckbaren Sekundärteilen an vorhandenen Inhaltselementen der Lage ist, wenn es auf eine Art angebracht ist, und zu neuen Inhaltselementen, wenn sie erstellt oder aktualisiert werden. Gibt es einen schmerzlosen Weg, dies zu tun? Ich denke, "Schweißen" könnte das sein, was ich brauche, aber ich konnte keine Dokumentation oder Anleitungen finden, die mir das Schweißen erklären könnten, als wäre ich fünf.

+0

Möchten Sie, dass ** Sie ** an bestimmte Typen anhängen können, oder ** immer ** an bestimmte Typen angehängt sind – devqon

+0

Ich möchte ** fähig ** sein. Ansonsten könnte ich sie unattachbar machen und sie bei der Migration anhängen. Im Falle der Anknüpfung an bestimmte Content Items muss ich allerdings sagen, dass dies immer programmatisch geschehen muss. – Lawyerson

+1

Ich muss Ihr Problem später noch einmal lesen, aber von dem, was Sie beschreiben, denke ich, ist der beste Weg, dies zu tun, die Teile im Content-Handler zu verschweißen. Sie haben Recht, wenn es um Dokumente über Schweißen geht, ich schlage vor, Sie nur Schritt durch die Weld () -Methode, um herauszufinden, wie es funktioniert, es ist nur ein paar Zeilen. – Xceno

Antwort

0

Ich denke, Sie müssen einen dynamischen Schweißansatz implementieren. Ich musste ein ähnliches Problem lösen, es ist here veröffentlicht. Hoffe das hilft.

+0

Ich habe mir deinen Code angeschaut und es scheint ziemlich so, als ob ich daran gedacht hätte, obwohl ich nicht wusste wo ich anfangen soll. Es scheint für eine einfache Aufgabe erstaunlich komplex zu sein, zu komplex für die Anforderungen des Projekts, die meine Frage ausgelöst haben, aber ich werde versuchen, es in Kürze selbst zu untersuchen. – Lawyerson

Verwandte Themen