umbraco でカスタマイズ可能なメニューを作成しようとしています。つまり、ユーザーはメニュー内の任意のメニュー項目を追加/削除/編集できる必要があります。(ユーザーは開発者ではありません)
しかし、私はそれを行う方法を知りません..マクロについて聞いたことがありますが、それらについてあまり知らないので、使用できません。
これも前にやったことがあると思います..
前もって感謝します
umbraco でカスタマイズ可能なメニューを作成しようとしています。つまり、ユーザーはメニュー内の任意のメニュー項目を追加/削除/編集できる必要があります。(ユーザーは開発者ではありません)
しかし、私はそれを行う方法を知りません..マクロについて聞いたことがありますが、それらについてあまり知らないので、使用できません。
これも前にやったことがあると思います..
前もって感謝します
通常、メニューは umbraco 内のノード構造を反映します。これは、クライアントがサイトのナビゲーションを制御できるようにする最も簡単な方法です。メニューに入れたくないノードがある場合は、ドキュメント タイプでumbracoNaviHideプロパティを使用できます。
利用可能なスターター キットのいくつかを試してみてください。それらには、ノードに基づいてナビゲーションを構築するマクロが付属しており、それらがどのように機能するかについての良いアイデアを提供します. スターターキットを使用して開始し、必要に応じて変更することもできます。umbraco を使い始めるときは、これをお勧めします。Umbraco には約 4 つほどのビルトイン スターター キットがあり、Umbraco には他のユーザーが提供したさらにいくつかのキットがあります。
Umbraco で提供されるデフォルトのナビゲーション テンプレートを使用するには:
Umbraco バックオフィスにログインして開発者セクションに移動すると、Scripting Files が表示されます。[スクリプト ファイル] を右クリックし、[作成] を選択します。Nav などのファイル名を選択し、[テンプレートの選択] メニューから [サイト マップ] を選択し、[作成] をクリックします。次の剃刀コードで終わるはずです。
@*
SITEMAP
=================================
This snippet generates a complete sitemap of all pages that are published and visible (it'll filter out any
pages with a property named "umbracoNaviHide" that's set to 'true'). It's also a great example on how to make
helper methods in Razor and how to pass values to your '.Where' filters.
How to Customize for re-use (only applies to Macros, not if you insert this snippet directly in a template):
- If you add a Macro Parameter with the alias of "MaxLevelForSitemap" which specifies how deep in the hierarchy to traverse
How it works:
- The first line (var maxLevelForSitemap) assigns default values if none is specified via Macro Parameters
- Next is a helper method 'traverse' which uses recursion to keep making new lists for each level in the sitemap
- Inside the the 'traverse' method there's an example of using a 'Dictionary' to pass the 'maxLevelForSitemap' to
the .Where filter
- Finally the 'traverse' method is called taking the very top node of the website by calling AncesterOrSelf()
NOTE: It is safe to remove this comment (anything between @ * * @), the code that generates the list is only the below!
*@
@inherits umbraco.MacroEngines.DynamicNodeContext
@helper traverse(dynamic node){
var maxLevelForSitemap = String.IsNullOrEmpty(Parameter.MaxLevelForSitemap) ? 4 : int.Parse(Parameter.MaxLevelForSitemap);
var values = new Dictionary<string,object>();
values.Add("maxLevelForSitemap", maxLevelForSitemap) ;
var items = node.Children.Where("Visible").Where("Level <= maxLevelForSitemap", values);
if (items.Count() > 0) {
<ul>
@foreach (var item in items) {
<li>
<a href="@item.Url">@item.Name</a>
@traverse(item)
</li>
}
</ul>
}
}
<div class="sitemap">
@traverse(@Model.AncestorOrSelf())
</div>
これにより、サイトの構造の ul/li メニューが生成されます。マクロを挿入して、これをテンプレートにプラグインします。
XSLT または Razor の既定のトップ ナビゲーション テンプレートを見てみましょう。これにより、どこから始めればよいか、Umbraco でナビゲーションが一般的にどのように機能するかがわかります。ナビゲーションは通常、コンテンツ セクションのコンテンツ構造を反映しているという Douglas の回答に同意します。
コンテンツ ツリー構造とは無関係にアイテムをナビゲーションに追加するセットアップが本当に必要な場合は、ホームページでマルチノード ツリー ピッカーを使用し、それをトップ ナビゲーション マクロのナビゲーションにします。