前文
[ContentType(...)]
public abstract class _BaseSitePage : PageData { ... }
[ContentType(...)]
public abstract class _ContentPage : _BaseSitePage
{
[Display(Name = "Content 1", GroupName = SystemTabNames.Content, Order = 4)]
public virtual ContentArea Content1 { get; set; }
}
public abstract class _FixedBodyLayoutPage : _ContentPage
{
[Display(Name = "Body", GroupName = SystemTabNames.Content, Order = 100)]
public virtual ThreeColumnRowBlock Body{ get; set; }
}
のインスタンスを作成する際に、ローカル ブロックのインスタンスを定義済みのブロックとして_FixedBodyLayoutPage
配置したいと考えています。また、編集ページにインスタンスのプロパティのみを表示し、 .ThreeColumnRowBlock
Content1
ThreeColumnRowBlock
Content1
[Editable(false), ScaffoldColumn(false)]
public override ContentArea Content1
{
get { return this.GetPropertyValue(x => base.Content1); }
set { this.SetPropertyValue(x => base.Content1, value); }
}
ThreeColumnRowBlock
問題は、Content1 コンテンツ領域内のインスタンスを登録する適切な方法が見つからないことです。API には ContentReference が必要ですが、ローカル ブロックにはそれがありません。
部分的に見つかった解決策: ローカル ブロックの代わりに共有ブロックを使用できます。
しかし、その後、深いナビゲーションなしで編集ページのプロパティを編集できなくなります。極力避けたいもの。これらすべての入れ子は CMS の概念を壊しており、オブジェクトの階層ではなくコンテンツに集中する必要があります。
何らかの方法でローカル ブロックを共有ブロックにバインドすることは可能ですか? または、ページ エディター内に共有ブロック プロパティを表示するように episerver に強制しますか?
また、ローカル ブロックの代わりに共有ブロックのインスタンスを抽出して返す get/set を実装しようとしています。しかし、それはエピサーバーをだますものではありません。編集ページに間違ったインスタンスのデータが表示される。