我正在创建我的自定义元素侧边栏窗格,如下所示:
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) 事件系统处理程序代码
[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) 特别是,我想到的情况是这样的:
@@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) CDN整合似乎是Tridion人群中的热门话题.但是,不知何故,可用的讨论主要围绕推动CDN的内容.我特别感兴趣的是:
修改/添加内联图像出站链接以使用CDN的正确方法是什么?
最简单的方法是创建一些后处理TBB,对Output项进行操作,并将其置于'Default Finish Actions'中.虽然,在CD方面这样做似乎更正确,不是吗?
编辑
考虑更好的情况:如果不仅我想修改图像路径,而是将整个图像链接包装到ASP.Net控件中.我在哪里这样做?
编辑2
到目前为止,通过TBB实现了对ASP.Net控制替换的标记.顺利,只需要关注以下微妙的事情:
对于基于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就是上面提到的!
我正在寻找一种方法来跨设备同步我的Android应用程序的SQLite数据.
Dropbox Datastore API似乎很合适(至少在概念上).我已经研究了可用的示例,但还不能理解这个API如何适应Android数据访问世界观,它的ContentProvider => ContentResolver => Adapter => ListView机器.
我的猜测是,需要某些管道才能更顺畅地集成Datastore API,甚至可以作为SQLite的直接替代品.它所属的最佳位置似乎接近ContentProvider.
以上假设是否正确,即:我应该尝试编写我的自定义ContentProvider,它将从Datastore API获取数据吗?或者可能存在/计划更好的选择?
使用模块化模板将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转义规则所必需的.)