【问题标题】:Image Component Linking Using Javascript使用 Javascript 链接图像组件
【发布时间】:2023-04-09 08:02:01
【问题描述】:

我在 Tridion 中有一个嵌入式组件,它具有 Image 字段(名为 LeadImage)。使用自定义弹出窗口,我想在此图像字段(leadImage)中链接图像。可能吗?这必须通过单击组件的“保存”事件来完成,因此主要是 jquery/javascript。

要链接的图像已在 CMS 系统中。默认情况下,它将通过在自定义弹出窗口中执行一些其他操作来创建。我将拥有图像的 tcmid/图像名称等。

找不到很多关于 Anguilla Api 的文档来帮助我实现这一目标。

【问题讨论】:

  • 抱歉你的问题我不是很清楚,嵌入式组件是什么意思?请详细说明。
  • 不管怎样,有很多关于如何创建自定义弹出窗口和侦听域模型项上的“保存”事件的示例。
  • 您要强制人们在此字段中添加图像吗?这就是我在阅读您的问题时所理解的。它是一个文本字段吗?多媒体组件链接?我不确定标签“JavaScript”是否会帮助你解决这个问题

标签: javascript tridion


【解决方案1】:

是的,可以使用 Anguilla 框架覆盖 SDL Tridion GUI 中的“插入组件”按钮。

那里有大量关于 anquilla 框架的帖子...我推荐这个 http://albertromkes.com/2012/01/30/tridion-gui-extensions-how-to-load-a-javascript-without-showing-a-gui-element/ 向您展示如何将您自己的 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 :)
}

希望这会有所帮助!

【讨论】:

  • 感谢约翰的快速回复。这正是我想要的。 var imageField = fieldBuilder.getField("lead_image");
  • 很好,那你能接受我的回答吗?这给了我积分并让其他人知道这是正确的解决方案:)
【解决方案2】:

我假设一个“嵌入式组件”是一个 Component Link 允许 Multimedia Links 或可能是 Multimedia Link 本身(在架构字段选项中)。

开箱即用的架构字段默认值

除了您使用“自定义弹出窗口中的其他操作”创建图像以设置默认链接组件之外,您可以:

  1. 在架构字段的链接项中设置Default Value
  2. 在模板或渲染逻辑中设置Default

关系

否则,使用多种方法之一创建图像之间的关系:

  • 手动精选列表(“链接列表”或“容器”组件)
  • “配置”组件(键值对)
  • 组织项目 -- 特定文件夹中的项目
  • 命名约定 - 具有相似名称的项目一起呈现
  • 类别和关键字(分类分类)

作者希望能够控制他们链接到哪些图像或让它们自动添加以进行渲染。它不一定必须在组件中。

变化和蓝图

虽然对特定字段进行扩展当然是可能的,但为特定架构字段中的特定字段创建此扩展存在风险。确保您的方法适用于新组件、新逻辑和架构更改。

如果您有添加leadimage 的编程要求,请考虑将其放置在模板逻辑中,以便跨出版物、跨所有组件演示文稿轻松更改它,而无需重新访问每个组件。 还要确保您的组件 ID 使用正确的发布 ID 用于创建这些组件的位置。

例如,您需要处理 tcm-id 来自比 020 内容出版物更低的出版物的本地化版本。

听起来是一个有趣的要求,请对其他操作应该做什么发表评论。

【讨论】:

    【解决方案3】:

    感谢约翰的快速回复。这与我正在寻找的一致。

    由于我的字段生成器将有很多字段,我将代码修改如下:

    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 或其他任何地方找到它。

    【讨论】:

    • 是的,可以更改图标和标题,我建议将 css 注入 sdl tridion 视图,css 将包含图像详细信息...至于文本,您必须删除现有标签并使用 JS 应用您自己的标签。也许您可以接受我的回答并将您的查询作为一个新问题提出,这样两者就不会在这里混淆......另外我可以粘贴一些示例来帮助解释:)
    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 2017-10-20
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2015-07-02
    相关资源
    最近更新 更多