コンテンツ ページのサイド バーをレンダリングするビューがあります。サイド バーは、1 つのページに複数回レンダリングできます。ページのレイアウトは、実際のページでは特定のビューにバインドされるいくつかのコンテンツ セクション ( Kooboo の用語では位置) を定義します。このような各ビューでは、汎用のサイド バー ビューを再レンダリングして、オプションでサイド バーをレンダリングする必要があります。
サイドバーのコンテンツは Kooboos データベースに保存されます。簡単にするために、次の 2 つのフィールドを持つ特定のコンテンツ タイプを使用しています。
Position
— レイアウトで定義された位置の ID と一致する、ページ内の位置の IDContent
— サイドバーの実際のコンテンツを構成する HTML フラグメント
サイド バー ビューのロジックは次のようになります。現在のページにバインドされているすべてのサイド バー データから、外側のビューから引数としてPosition
渡された位置に一致する単一のアイテムを選択し、見つかった場合はそれをレンダリングします。問題は、引数をビューに渡す方法がわからないことです
サンプル レイアウト フラグメント:
<!-- Header section -->
<section>
<div class="section-content">
@Html.FrontHtml().Position("Header")
@Html.FrontHtml().Position("HeaderSectionContent")
</div>
</section>
<!-- Main section -->
<section class="even">
<div class="section-content">
@Html.FrontHtml().Position("MainSectionContent")
</div>
</section>
位置にバインドされたビューの例Header
:
<div class="header-container">
<h1 class="page-title" @ViewHelper.Edit(ViewBag.Solution, "Title")>
@ViewBag.Solution.Title
</h1>
<!-- How to pass "Header" string as an argument into the Controls.Sidebar view? -->
@Html.FrontHtml().RenderView("Controls.Sidebar",ViewData)
<h2 @ViewHelper.Edit(ViewBag.Solution, "Perex")>
@Html.Raw(ViewBag.Solution.Perex)
</h2>
</div>
意図された汎用サイドバービューControls.Sidebar
:
@if (ViewBag.Sidebars != null)
{
// How to retrieve an argument and select the matching side bar data?
var sidebar = ViewBag.Sidebars ... ;
if (sidebar != null)
{
<div class="side-bar">
<h3>@item.Title</h3>
@Html.Raw(item.Content)
</div>
}
}
一日の終わりには、このビューを数回レンダリングし、データの可用性に関していくつかのサイドバーを条件付きでレンダリングできるようにする必要があります。
ビュー エディターで利用可能なパラメーターの定義を調べていましたが、これはクエリ文字列パラメーターへのアクセスを提供しているようです。これは、私が活用できる (したい) メカニズムではありません。Kooboo のドキュメントには、このトピックに関連する情報がありません。