小编est*_*why的帖子

自定义DevTools Elements侧边栏窗格如何与面板通信?

我正在创建我的自定义元素侧边栏窗格,如下所示:

chrome.devtools.panels.elements.createSidebarPane(
    "MyPane",
    function (sidebar) {
        sidebar.setPage('my-pane.html');
    }
);
Run Code Online (Sandbox Code Playgroud)

我-pane.html:

<html>
    <head>
    <script src="my-pane.js"></script>
    </head>
    <body>
    <!-- custom UI -->
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

在my-pane.js里面我正在观看当前选中的元素:

chrome.devtools.panels.elements.onSelectionChanged.addListener(function() {
    chrome.devtools.inspectedWindow.eval("$0", function (res) {
       <!-- process res and want to push detailed results into custom panel -->
    });
});
// expecting request from panel here
chrome.extension.onMessage.addListener(function (msg, _, sendResponse) {
    console.log(msg, _, sendResponse);
});
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都运行得很好:我可以选择并在窗格中围绕它构建自定义HTML UI.更进一步,我想在另一个Panel中显示一些更详细的UI.这就是我正在尝试(创建窗格后立即):

chrome.devtools.panels.create(
    'My details',
    'icon.png',
    'my-panel.html',
    function (panel) {
        panel.onShown.addListener(function (window) {
            chrome.extension.sendMessage({}, function (response) {
                console.log(response);
            });
        });
    } …
Run Code Online (Sandbox Code Playgroud)

google-chrome-extension google-chrome-devtools

7
推荐指数
1
解决办法
2345
查看次数

Tridion 2011事件系统如何阻止单个页面发布?

事件系统处理程序代码

[TcmExtension("My Handler")]
public sealed class EventSystem : TcmExtension
{
    public EventSystem()
    {
        EventSystem.Subscribe<Page, PublishEventArgs>((page, e, phases) => {
            if (shouldTerminatePublishing(page))
            {
                throw new Exception(ex, page);
            }
        }, EventPhases.Initiated, EventSubscriptionOrder.Normal);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,当发布多个页面并且Event System即将阻止其中一个(通过抛出异常)时,所有页面都被有效地阻止发布."生成可发布内容时忽略失败"复选框不会影响此行为.

如何防止任何给定页面发布但仍允许发布所有其他页面?

编辑

根据Quirijn的建议更新了代码:

public class MyResolver: IResolver
{
    public void Resolve(
        IdentifiableObject item,
        ResolveInstruction instruction,
        PublishContext context,
        ISet<ResolvedItem> resolvedItems)
    {
        var page = item as Page;

        if (null != page && instruction.Purpose == ResolvePurpose.Publish)
        {
            try
            {
                // Evaluate whether publishing is allowed
            }
            catch (Exception …
Run Code Online (Sandbox Code Playgroud)

tridion

7
推荐指数
1
解决办法
509
查看次数

是否可以混合模块化模板和传统VBScript CT?

特别是,我想到的情况是这样的:

@@RenderComponentPresentation(Component, "<vbs-legacy-ct-tcm-uri>")@@
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,在我的情况下,VBS代码在尝试访问组件字段时会中断,从而出现"错误13类型不匹配...".

(所以,如果我给出答案,我会说:"部分地,没有实际用途")

编辑 上面的DWT来自另一个CT,因此它实际上是组件链接的渲染,这就是为什么无论如何Nuno的建议无参数过载都不会有效.顺便说一句,VBS中的以下行不会中断并给出正确的值:

WriteOut Component.ID
WriteOut Component.Schema.Title
Run Code Online (Sandbox Code Playgroud)

编辑2

多米尼克绝对是怀疑:这是一个缺失的依赖.

更深入地了解这些信息通常很有用:

假设,原始CT看起来像这样("VBScript [Legacy]"类型):

[%
Call RenderComponent(Component)
%]
Run Code Online (Sandbox Code Playgroud)

该CT旨在从PT(也是基于VBS)调用.PT在开始时有很多"#include"陈述.

现在故事发生了变化:从另一个基于DWT的CT调用相同的CT.显然(感谢大家的宝贵帮助!),依赖关系现在没有被包含在任何地方.

使原始CT再次工作的解决方案是明确地手工挑选并包括所有必需的VBS TBB,因此原始CT变为:

[%
#include "tcm:<uri-of-vbs-tbb>"
Call RenderComponent(Component)
%]
Run Code Online (Sandbox Code Playgroud)

tridion

6
推荐指数
1
解决办法
333
查看次数

重写二进制链接以使用CDN

CDN整合似乎是Tridion人群中的热门话题.但是,不知何故,可用的讨论主要围绕推动CDN的内容.我特别感兴趣的是:

修改/添加内联图像出站链接以使用CDN的正确方法是什么?

最简单的方法是创建一些后处理TBB,对Output项进行操作,并将其置于'Default Finish Actions'中.虽然,在CD方面这样做似乎更正确,不是吗?

编辑

考虑更好的情况:如果不仅我想修改图像路径,而是将整个图像链接包装到ASP.Net控件中.我在哪里这样做?

编辑2

到目前为止,通过TBB实现了对ASP.Net控制替换的标记.顺利,只需要关注以下微妙的事情:

  • 考虑CSS内联样式(即:background-image:url(..))
  • 需要任何链接操作逻辑之后放置新的TBB (例如:从Html中提取二进制文件,在包中发布Bnaries,链接解析器)
  • 最快和最强大的实现可能是简单的字符串替换(与regexp或XML解析相反)
  • 为了保持标准的"预览"逻辑不变,需要一些条件来触发逻辑

cdn templating tridion tridion-2011

6
推荐指数
1
解决办法
219
查看次数

在<tridion:ComponentLink />中覆盖命名空间的最简单方法是什么

对于基于ASP.Net的Tridion2011驱动的站点,我需要用一些< custom:ComponentLink /> 替换标准生成的< tridion:ComponentLink />.

(假设这个自定义控件的语义是相同的,那就是:只需要替换名称空间部分.)

最简单,最不干扰的方法是什么?

我的猜测是我应该实现标准LinkTagHandler的替代方案.这是对的吗?

此解决方案的唯一[无穷小]缺点是它需要在cd_deployer_conf中显式配置所有标记处理程序.

编辑

找到了一个简单的简单解决方案,只针对别名命名空间的特定任务:

<TCDLEngine>
    <Properties>
        <Property Name="aspnet.tagprefix" Value="custom"/>
    </Properties>
</TCDLEngine>
Run Code Online (Sandbox Code Playgroud)

幸运的是,我的所有<tcdl:../>标签都被映射到了<custom:../>,否则,这个小作弊无法奏效.

总的来说,我更赞成Peter和Nuno关于创建自定义TCDL标签处理程序的建议.

(只需要赢得我的懒惰:-).

编辑2

哎呀,刚才注意到,Nuno就是上面提到的!

tridion tridion-content-delivery tridion-2011

5
推荐指数
2
解决办法
165
查看次数

使用Dropbox Datastore API作为Android应用程序的主要存储选项

我正在寻找一种方法来跨设备同步我的Android应用程序的SQLite数据.

Dropbox Datastore API似乎很合适(至少在概念上).我已经研究了可用的示例,但还不能理解这个API如何适应Android数据访问世界观,它的ContentProvider => ContentResolver => Adapter => ListView机器.

我的猜测是,需要某些管道才能更顺畅地集成Datastore API,甚至可以作为SQLite的直接替代品.它所属的最佳位置似乎接近ContentProvider.

以上假设是否正确,即:我应该尝试编写我的自定义ContentProvider,它将从Datastore API获取数据吗?或者可能存在/计划更好的选择?

datastore dropbox-api

5
推荐指数
1
解决办法
982
查看次数

将Tridion组件转储为XML

使用模块化模板将Tridion组件内容(基于给定模式,即:非任意)转储到XML中的最简单方法是什么?

具体来说,需要将组件的内容传递给/作为ASP.Net自定义控件,即:

<custom:MyControl runat="server"
    TextField="value1"..>
  <EmbeddedField>
    ..
  </EmbeddedField>
</custom:MyControl>
Run Code Online (Sandbox Code Playgroud)

我看到一种可能的方法是调整Default Dreamweaver组件设计 DWT TBB,但这似乎太费力了.

编辑

另一个模糊的主题是上面问题的第二部分:将XML嵌入到ASP.Net控制标记中.问题是需要转义XML.下面的脑力激荡器在DWT中进行(压力,Nuno的TBB写入输出):

<custom:MyControl runat="server">
    <xml>
        @@(Output).replace(RegExp.call(null, /&/.toString()[1], "g"), '&').replace(RegExp.call(null, /</.toString()[1], "g"), '<').replace(RegExp.call(null, />/.toString()[1], "g"), '>').replace(RegExp.call(null, String.fromCharCode(34), "g"), '"')@@
    </xml>
</custom:MyControl>
Run Code Online (Sandbox Code Playgroud)

(所有这些只是克服DWT神秘的JS转义规则所必需的.)

dwt tridion tridion-2011

3
推荐指数
1
解决办法
284
查看次数