Nano Hash - криптовалюты, майнинг, программирование

Когда DCP размещаются на странице в Tridion, как вы можете гарантировать, что все динамические визуализации компонента будут опубликованы вместе со страницей?

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

Когда вы создаете DCT с возможностью размещения элемента на странице, редактор контента может не захотеть публиковать компоненты напрямую, просто полагаясь на публикацию страницы, чтобы сделать все правильно. Мы могли бы рассмотреть три возможных желаемых сценария публикации:

  1. Публикация страницы должна вызывать отображение только презентаций статических компонентов (плюс любой код компакт-диска, необходимый для отображения динамических).
  2. Что помимо статических КП должны публиковаться любые динамические КП. Другие возможные динамические визуализации того же компонента не публикуются.
  3. Если динамический CP публикуется, соблюдается обычная семантика публикации компонентов, и все динамические отрисовки передаются брокеру.

Поведение Tridion по умолчанию похоже на сценарий 2), тогда как мой опыт показывает, что часто вам нужен сценарий 3), дающий вам полное и согласованное представление о любом заданном компоненте на стороне компакт-диска.

Каков наилучший способ реализовать сценарий 3 (включая правильную работу отмены публикации)?

18.02.2012

Ответы:


1

На мой взгляд, лучший ответ на ваш вопрос - реализовать собственный Resolver, который будет включать в себя необходимые презентации динамических компонентов. Я бы с осторожностью делал что-либо при отмене публикации, так как иногда вам может понадобиться сохранить DCP после отмены публикации данной страницы (для функций типа «последние новости» или любых других динамических запросов), но приведенный ниже пример кода сделает это простой для вас, чтобы адаптироваться, если вам нужно отменить публикацию всех DCP.

Предупреждение: приведенный ниже код не тестировался в производственной среде.

using Tridion.ContentManager;
using Tridion.ContentManager.CommunicationManagement;
using Tridion.ContentManager.ContentManagement;
using Tridion.ContentManager.Publishing;
using Tridion.ContentManager.Publishing.Resolving;

public class IncludeDynamicComponentPresentations : IResolver
{
    public void Resolve(
            IdentifiableObject item, 
            ResolveInstruction instruction,
            PublishContext context, 
            Tridion.Collections.ISet<ResolvedItem> resolvedItems)
    {

        if (!(instruction.Purpose == ResolvePurpose.Publish ||
            instruction.Purpose == ResolvePurpose.RePublish))
        {
            // Do nothing more when unpublishing
            return;
        }

        Session session = item.Session;
        foreach (ResolvedItem resolvedItem in resolvedItems)
        {
            // Only do something if we're dealing with a page
            if (!(resolvedItem.Item is Page)) continue;
            Page page = (Page)resolvedItem.Item;
            if (page.ComponentPresentations.Count > 0)
            {
                UsingItemsFilter filter = new UsingItemsFilter(session);
                filter.InRepository = page.ContextRepository;
                filter.ItemTypes = new[] { ItemType.ComponentTemplate };

                foreach (ComponentPresentation cp in page.ComponentPresentations)
                {
                    // Find all component templates linked to this component's schema
                    Schema schema = cp.Component.Schema;
                    foreach (ComponentTemplate ct in schema.GetUsingItems(filter))
                    {
                        if (!ct.Id.Equals(cp.ComponentTemplate.Id))
                        {
                            if (ct.IsRepositoryPublishable)
                            {
                                resolvedItems.Add(new ResolvedItem(cp.Component, ct));
                            }
                        }
                    }
                }
            }
        }
    }
}

Теперь вам нужно добавить это в GAC и изменить [Tridion]\Config\Tridion.ContentManager.Config, чтобы этот Resolver вызывался после каждого действия разрешения (при разрешении/сопоставлении для каждого типа элемента).

18.02.2012

2

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

Хороший пример этого есть на портале документации SDL Tridion, но в основном он позволяет вам создать собственный класс преобразователя в .net, где вы можете реализовать свою пользовательскую логику.

18.02.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..