Связывание компонентов изображения с использованием Javascript

У меня есть встроенный компонент в Tridion, который имеет поле изображения (с именем leadImage). Используя настраиваемое всплывающее окно, я хочу связать изображение в этом поле изображения (leadImage). Является ли это возможным? Это нужно сделать, нажав на событие «Сохранить» компонента и, следовательно, в основном jquery/javascript.

Изображение, которое нужно связать, уже находится в системе CMS. Он будет создан по умолчанию, выполнив какое-либо другое действие в пользовательском всплывающем окне. У меня будет имя tcmid/image и т. д. для изображения.

Не удалось найти много документации по Anguilla Api, которая помогла бы мне в этом.


person user1699386    schedule 30.01.2013    source источник
comment
Извините, ваш вопрос мне не очень ясен, что вы подразумеваете под встроенным компонентом? Пожалуйста, уточните подробнее.   -  person vikas kumar    schedule 30.01.2013
comment
В любом случае, есть много примеров того, как создавать настраиваемые всплывающие окна и прослушивать события сохранения в элементах модели предметной области.   -  person Boris Ponomarenko    schedule 30.01.2013
comment
Вы хотите, чтобы люди добавляли изображение в это поле? Вот что я понимаю, когда читаю ваш вопрос. Это текстовое поле? Ссылка на мультимедийный компонент? Я не уверен, что наличие тега JavaScript поможет вам вообще в этом вопросе.   -  person Hendrik Beenker    schedule 30.01.2013


Ответы (3)


Да, можно переопределить кнопку «вставить компонент» в графическом интерфейсе SDL Tridion с помощью платформы Anguilla.

Существует множество сообщений о фреймворке anquilla... я бы порекомендовал этот http://albertromkes.com/2012/01/30/tridion-gui-extensions-how-to-load-a-javascript-без-отображения-a-gui-элемента/, чтобы показать вам, как внедрить свой собственный javascript в определенное «представление»

Чтобы переопределить кнопку вставки компонента, вы просто удаляете обработчик событий:

// remove the default insert behavior which is to open up the item select dialog
$log.message("Removing handlers for the insert event");
$evt.removeAllEventHandlers(fieldBuilder, "insert");

Затем вы можете поместить туда свою собственную функциональность, добавив свой собственный обработчик событий:

// add our own insert behavior
$log.message("Adding a custom handler for the insert event");
$evt.addEventHandler(fieldBuilder, "insert", function(event) {
  // whatever it is you wish to do :)
}

Надеюсь это поможет!

person johnwinter    schedule 31.01.2013
comment
Спасибо Джон за быстрый ответ. Это именно то, что я искал. var imageField = fieldBuilder.getField(lead_image); - person user1699386; 31.01.2013
comment
Отлично, тогда вы можете принять мой ответ? это дает мне очки и позволяет другим узнать, что это было правильное решение :) - person johnwinter; 31.01.2013

Я предполагаю, что «встроенный компонент» является Component Link, позволяющим Multimedia Links, или, возможно, самим Multimedia Link (в параметрах поля схемы).

Готовые поля схемы по умолчанию

За исключением того факта, что вы создаете изображение с «каким-то другим действием в пользовательском всплывающем окне», чтобы установить связанный компонент по умолчанию, вы можете:

  1. Установите Default Value в связанном элементе в поле схемы
  2. Установите Default в шаблоне или логике рендеринга

Отношения

В противном случае создайте взаимосвязь между изображениями, используя один из множества подходов:

  • Списки, созданные вручную (компоненты «Список ссылок» или «Контейнер»)
  • Компоненты «Конфигурация» (пары «ключ-значение»)
  • Организационные элементы -- элементы в определенной папке
  • Соглашения об именах — элементы с похожими именами отображаются вместе.
  • Категории и ключевые слова (таксономическая классификация)

Авторы ожидают, что смогут контролировать, на какие изображения они ссылаются, или автоматически добавлять их для обработки. Он не обязательно должен быть в компоненте.

Изменения и BluePrinting

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

Если у вас есть программное требование добавить leadimage, подумайте о том, чтобы поместить его в логику шаблона, где его можно будет легко изменить в разных публикациях, во всех презентациях компонентов без повторного посещения каждого компонента. Также убедитесь, что в ваших идентификаторах компонентов используется правильный идентификатор публикации, где эти компоненты создаются.

Например, вам нужно обрабатывать локализованные версии, в которых tcm-id относится к публикации более низкого уровня, чем, скажем, публикация 020 Content.

Звучит как интересное требование, оставьте комментарий о том, что должно делать это другое действие.

person Alvin Reyes    schedule 31.01.2013

Спасибо Джон за быстрый ответ. Это соответствует тому, что я искал.

Поскольку в моем построителе полей будет много полей, я изменил код следующим образом:

var imageField = fieldBuilder.getField("lead_image"); // Where lead_image is the name for ImageField in this component

// remove the default insert behavior which is to open up the item select dialog
$log.message("Removing handlers for the insert event");
$evt.removeAllEventHandlers(imageField "insert");

// add our own insert behavior
$log.message("Adding a custom handler for the insert event");
$evt.addEventHandler(imageField , "insert", function(event) {
}

В addeventhandler можно будет установить Title и ImageIcon по мере необходимости? Не удалось найти его на Anquilla Api или где-либо еще.

person user1699386    schedule 31.01.2013
comment
Да, можно изменить значок и заголовок, я бы порекомендовал внедрить css в представление sdl tridion, css будет содержать детали изображения... что касается текста, вам придется удалить существующий ярлык и применить свой собственный используя JS. Возможно, вы могли бы принять мой ответ и задать свой запрос как новый вопрос, чтобы они не были перепутаны здесь ... плюс, тогда я могу вставить несколько примеров, чтобы помочь объяснить :) - person johnwinter; 01.02.2013