2016-05-06 1 views
1

指定された名前のページにプレースホルダの番号を取得する可能性はありますか?例題私はmy-placeholder1、my-placeholder2、my-placeholder3をページに持っています。私は3つのプレースホルダーに自分の名前にmy-placeholderが含まれていることを知る必要があります。Sitecoreプレースホルダの数を取得

答えて

0

いいえ、プレースホルダの番号を取得する方法はありません。

ページを動的に生成します。それはUser AUser Bのために全く異なる出力を生成することができます。

my-placeholder2は、1人のユーザには表示されず、別のユーザには表示されるレンダリングの中に入れることができます。

これは、最終ページに特定のキーが表示されているプレースホルダの数を表示できないためです。あなたは(私の意見ではreaaaaaaaly悪である)やろう可能性がどのような

、ページに割り当てられたレイアウトを取得し、すべてのレンダリングを取得し、それらのすべてのために彼らのcshtmlまたはaspx + ascxファイルや使用を得ることですいくつかの正規表現(htmlのもう一つの悪い点)は、特定のキーを持つプレースホルダを数えます。

もう一度 - これがレンダリングされたページで使用される番号であることを決して100%保証することはできません。

+0

私は内部にプレースホルダーを持つレンダリングを持っています。問題は、エディターがレンダリングを複数回追加できることと、同じ名前の2つのプレースホルダーで終わることです。どういうわけか、同じセクションに別のプレースホルダを付けて名前を制御できるようにする必要があります – Radu

+2

ダイナミックプレースホルダを使用する必要があるように聞こえます。市場のためのモジュールがあります:https://marketplace.sitecore.net/en/Modules/I/Integrated_Dynamic_Placeholders.aspx –

+0

リチャードが書いた@Radu:ダイナミックプレースホルダを使用してください。オンラインで多くの実装が無料で利用可能です。正直言って、なぜSitecore OOTBにはないのか分かりません。誰もが望み、必要とするものです。 –

1

あなたは使用することができます。

 var placeholderName = "my-placeholder"; 
     var renderingReferences = Sitecore.Context.Item.Visualization.GetRenderings(Sitecore.Context.Device, true); 
     var renderingsInPlaceholder = renderingReferences.Where(r => r.Placeholder.StartsWith(placeholderName, StringComparison.OrdinalIgnoreCase)); 
     var numberOfRenderingsInPlaceholder = renderingsInPlaceholder.Count(); 

をこのコードを使用すると、これらのプレースホルダ上のコンポーネントを持っているだけの場合に取り組んでいます。したがって、コンポーネントを持つプレースホルダをカウントします。

更新プレースホルダに複数のコンポーネントがある場合は、コンポーネントの数がカウントされます。

関連する問題