现在我一直在实施用户界面2012,经过一些障碍后,它运行得很好.我一直在寻求优化任何UI可编辑字段的可用性,并遇到相关的挑战.
在一个组件中,有几个非强制字段,因此当它们为空时不应显示.一旦编辑器进入UI并选择包含所述字段的组件<add text>,就会<add internal link to component media>出现几个标签,如和.
我希望将这些标签更改为更能描述其内容的内容,因为当字段不为空时,将在页面中添加其他html.
例如(使用Razor Mediator):
@if(Component.Fields.location != null) {
<span class="row">
<strong>Where:</strong>
<span>@RenderComponentField("location", 0)</span>
</span>
} else {
<tcdl:ComponentField name="location"></tcdl:ComponentField>
}
Run Code Online (Sandbox Code Playgroud)
当位置字段为空时,它只是说<add text>.我想改变它<Add location to event>.
我已经尝试在tcdl-tags之间放置一些东西,但即使在UI2012中没有编辑它们也会显示.我一直在搜索SDL Live内容网站,但我找不到任何参考.有人有想法吗?
我一直试图解决这个问题已经有一段时间了,但是我无法想出一些正常的东西.
你看,在我们的网站上有很多可点击的图像或div,提供了覆盖整个图像的组件链接.如果激活XPM并尝试选择组件,它将触发其组件链接单击事件,并将您引导至正确的页面.
我一直在寻找一种快速的解决方案,只有在编辑时才能禁用此行为,到目前为止,我已经提出了几个解决方法,坦率地说这不是我正在寻找的.
例如,您可以使用奇妙的Razor Mediator条件(IsSiteEditEnabled),但是,如果您当前的发布/页面/服务器已启用进行站点编辑,则此函数始终解析为true.这意味着如果您插入特定于模板的代码,例如
@if(!IsSiteEditEnabled){
<a tridion:href="#"> other code, ending in closing of </a>...
}
Run Code Online (Sandbox Code Playgroud)
未激活站点编辑(XPM)时,不会输出链接,但可以激活.简而言之,就是暂存服务器.
除非没有其他选项,否则我将需要一个Live发布服务器来使代码工作,但这会造成编辑人员认为登台服务器上的链接被破坏的问题.
我觉得这里有一些我不知道的东西.我相信像你这样的人可能遇到过这个问题:)
这是其中一个块
<article class="block-2x2 banner">
<tcdl:ComponentField name="component_link"></tcdl:ComponentField>
@if(!IsSiteEditEnabled){
@:<a tridion:href="@Fields.component_link">
}
<div class="image-container">
<tcdl:ComponentField name="image"><img src="@Fields.image" alt="@Fields.image.altText"></tcdl:ComponentField>
</div>
<div class="hgroup">
<h4 class="primary-title">@RenderComponentField("header", 0)</h4>
<h5 class="secondary-title">@RenderComponentField("title", 0)</h5>
</div>
@if(!IsSiteEditEnabled){</a>}
</article>
Run Code Online (Sandbox Code Playgroud) 我从今天早上起就一直试图解决这个问题,我知道我在这里遗漏了一些明显的东西,但我似乎无法找到它.
我们使用的是发布到服务器的XML文件,其中包含所有标准单词的翻译,例如"read more".它是一个页面,其中的组件已在适当的出版物中进行了本地化.
在我们的Razor模板中,我们在简单新闻摘要项目下方使用以下代码,该项目又链接到完整项目.
<a tridion:href="@news.ID" class="more" ><%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, "read_more")%></a>
Run Code Online (Sandbox Code Playgroud)
事实是,服务器标签工作正常,但得到解决
<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="<%= DefaultLabels.TranslatedTerm(((HomePage)Page).Location, "read_more") %>" LinkAttributes=" class="more"" TextOnFail="true"/>
Run Code Online (Sandbox Code Playgroud)
正如您可能注意到的那样,它在页面上以纯文本形式写入(这并不奇怪,因为根据liveDocs,LinkText参数首先被声明为String).
如果我带走了
tridion:href
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,将其写为
href
Run Code Online (Sandbox Code Playgroud)
它工作正常,代码解析为一个翻译的字符串,甚至链接......只是组件的TCM ID,而不是带有完整新闻项目的正确页面.
我尝试在Razor中创建一个函数,尝试替换linkText,尝试在模板中设置ComponentLink,但无济于事.我觉得它应该只对这个模板的代码进行一些微调,但我没有看到它,我开始寻找自定义TBB来处理代码.
任何人都知道如何解决这个问题?
编辑:
克里斯的答案实际上是我在这种特殊情况下所寻找的那个,但我觉得我应该指出,普里扬的功能应该被认为是这样的.所以,谢谢你们的帮助,这让我的生活变得更加轻松了!
我这次关于XPM的问题相对简单。这是关于创建页面类型的,编辑者可以使用该页面类型作为其新网站页面的基础。定义页面类型时,可以使用现有页面将其启用为示例页面,包括其组件。您可以复制这些组件,以使编辑者可以自由编辑这些组件,而又不会破坏使用这些组件的现有页面。在SDL Live内容文档中,他们解释了以下内容:
将设置从“包括此组件演示文稿”更改为“包括包含此组件副本的组件演示文稿”。如果在此页面上的多个组件演示文稿中使用此组件,则保存该页面会使所有这些组件演示文稿具有最后为这些组件演示文稿中的任何一个配置的设置。出现许多新控件。
这意味着每当编辑者单击XPM中的“新页面”时,此页面类型均可用,并且使用用户特定的前缀复制其中定义的组件。您可以在定义为页面类型本身的页面中定义此内容,方法是单击组件演示选项卡,然后单击组件并选择页面类型设置。请注意以下几点:
如您所见,内容的副本是在050-Web-Global中创建的,在我们的蓝图中,该出版物是错误的出版物。但是,在弹出窗口中,您无法选择正确的内容位置,只能选择页面类型所在的位置。
我已经使用特定于UI的蓝图上下文设置对此进行了测试,您应在其中定义在何处创建内容和页面。但是,在创建新页面时,将组件复制到050-web-global内部;错误的出版物。在我们进行培训时,我想像这样动态创建的组件可能会将CMS的内容放在错误的位置,从而使CMS无法用于其他出版物。是否有这种行为的原因,如果是,是否有使其正常工作的方法?
大家好,我一直在研究一套Razor模板,这些模板既可以使用体验管理器进行站点编辑,也可以使用Twitter引导程序完全响应多个屏幕宽度.因此,我需要根据Experience Manager编辑器添加或删除的内容动态操作DOM输出,但仍然保持响应式设计.这种结构的一部分是遵守twitter bootstrap规定的规则.
twitter引导程序通过使用类引入动态计算的div宽度,可实现出色的响应式设计.例如,A <div class="span12>使用包装器的整个宽度."span6"有效地使用了一半,并且还计算了一定的余量以允许另一个具有"span6"的div.但是,这只有在调用前面的类时才有效<div class="row-fluid">,并且只要跨度<numbers>实际上恰好合计为12.当我需要关闭<div class="row-fluid">实际达到此数字时出现问题.
澄清一下:它必须像这样输出
<div class="row-fluid">
<div class="span6">..code</div>
<div class="span4">..code</div>
<div class="span2">..code</div>
</div>
Run Code Online (Sandbox Code Playgroud)
的<div class="span[#]">呈现与一个分量模板中,以便允许内的多个组件<div class="row-fluid>,其中所述页面模板呈现.
但是,从组件模板级别来看,我似乎无法检索到该页面本身实际存在的该模板的实际组件数量.我根据组件本身的模式选项计算所用组件的宽度.我使用以下组件模板代码来正确呈现它:
@{
var spanClass = String.Empty;
if (Fields.HasField("component_width") && Fields.component_width != null) {
if (Fields.component_width.ToLower() == "full") {
spanClass = "span12";
} else if (Fields.component_width.ToLower() == "half") {
spanClass = "span6";
} else if (Fields.component_width == "40%") { …Run Code Online (Sandbox Code Playgroud)