Есть ли возможность получить номер заполнителей на странице с указанным именем. Например, у меня есть my-placeholder1, my-placeholder2, my-placeholder3 на странице, и мне нужно знать, что у меня есть 3 заполнителя, у которых есть мой-placeholder на свое имя.Sitecore получить количество заполнителей
ответ
Нет. Нет способа получить номер заполнителя.
Sitecore создает страницы динамически. Он может генерировать совершенно разные выходные данные для User A
и User B
.
my-placeholder2
может быть внутри рендеринга, который скрыт для одного пользователя и показан для другого.
Вот почему вы просто не можете сказать, сколько заполнителей с определенным ключом будет отображаться на последней странице.
Что вы могли бы попробовать сделать (что reaaaaaaaly зла на моем взгляде), чтобы получить расположение, назначенное на страницу, получить все визуализации и все они получают их cshtml
или aspx
+ ascx
файлов и использование некоторое регулярное выражение (другое плохое для html) для подсчета заполнителей с определенным ключом.
Но опять же - вы никогда не можете быть на 100% уверены, что это номер, который будет использоваться на отображаемой странице.
Вы можете использовать:
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();
Этот код работает только в случае, если у вас есть компонент на этих заполнителей. Поэтому он будет подсчитывать заполнители с компонентом на нем.
Обновление Если у вас несколько компонентов на заполнителе, будет подсчитано количество компонентов.
У меня есть рендеринг, внутри которого есть место. Проблема заключается в том, что редактор может добавлять несколько раз рендеринг, и в итоге я получаю 2 заполнителя с тем же именем. Мне нужно как-то добавить один и тот же раздел с другим заполнителем, чтобы я мог управлять именем. – Radu
Звучит для меня так, как будто вы должны использовать Dynamic Placeholders. На рынке есть модуль: https://marketplace.sitecore.net/en/Modules/I/Integrated_Dynamic_Placeholders.aspx –
@Radu только то, что написал Ричард: используйте динамические заполнители. Существует множество реализаций, доступных онлайн бесплатно. И, честно говоря, я понятия не имею, почему это еще не в Sitecore OOTB. Это то, что каждый хочет и нуждается. –