2016-05-06 2 views
1

Есть ли возможность получить номер заполнителей на странице с указанным именем. Например, у меня есть my-placeholder1, my-placeholder2, my-placeholder3 на странице, и мне нужно знать, что у меня есть 3 заполнителя, у которых есть мой-placeholder на свое имя.Sitecore получить количество заполнителей

ответ

0

Нет. Нет способа получить номер заполнителя.

Sitecore создает страницы динамически. Он может генерировать совершенно разные выходные данные для User A и User B.

my-placeholder2 может быть внутри рендеринга, который скрыт для одного пользователя и показан для другого.

Вот почему вы просто не можете сказать, сколько заполнителей с определенным ключом будет отображаться на последней странице.

Что вы могли бы попробовать сделать (что reaaaaaaaly зла на моем взгляде), чтобы получить расположение, назначенное на страницу, получить все визуализации и все они получают их cshtml или aspx + ascx файлов и использование некоторое регулярное выражение (другое плохое для html) для подсчета заполнителей с определенным ключом.

Но опять же - вы никогда не можете быть на 100% уверены, что это номер, который будет использоваться на отображаемой странице.

+0

У меня есть рендеринг, внутри которого есть место. Проблема заключается в том, что редактор может добавлять несколько раз рендеринг, и в итоге я получаю 2 заполнителя с тем же именем. Мне нужно как-то добавить один и тот же раздел с другим заполнителем, чтобы я мог управлять именем. – Radu

+2

Звучит для меня так, как будто вы должны использовать Dynamic Placeholders. На рынке есть модуль: 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(); 

Этот код работает только в случае, если у вас есть компонент на этих заполнителей. Поэтому он будет подсчитывать заполнители с компонентом на нем.

Обновление Если у вас несколько компонентов на заполнителе, будет подсчитано количество компонентов.