MDa*_*MDa 5 tridion tridion-2011
我从今天早上起就一直试图解决这个问题,我知道我在这里遗漏了一些明显的东西,但我似乎无法找到它.
我们使用的是发布到服务器的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来处理代码.
任何人都知道如何解决这个问题?
编辑:
克里斯的答案实际上是我在这种特殊情况下所寻找的那个,但我觉得我应该指出,普里扬的功能应该被认为是这样的.所以,谢谢你们的帮助,这让我的生活变得更加轻松了!
我希望这个剃刀功能能帮助你.这是从组件链接或外部链接呈现链接标记非常有用的功能.
@helper RenderLink(
dynamic link, // the link to render. Handles components + internal / external links
string cssClass = null, // optional custom CSS class
string title = null // optional link text (default is the title of the component being linked to)
)
{
if(link == null)
{
return;
}
if (title == null)
{
title = link.title;
}
string classAttr = string.IsNullOrEmpty(cssClass) ? "" : " class='" + cssClass + "'";
dynamic href;
string tridionLink = "";
string targetAttr = "";
if (link.Schema.Title == "External Link")
{
href = link.link;
}
else if (link.Schema.Title == "Internal Link")
{
href = link.link;
tridionLink = "tridion:";
}
else
{
href = link;
tridionLink = "tridion:";
}
if(link.target != null)
{
targetAttr = link.target == "New window" || link.target == "Popup" ? " target='_blank'" : "";
}
<a @(tridionLink)href="@href"@classAttr@targetAttr>@title</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" LinkAttributes=" class="more""
TextOnFail="true">
<%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, "read_more") %>
</tridionComponentLink>
Run Code Online (Sandbox Code Playgroud)
更好的是,您可以考虑输出 TCDL 而不是 Taglib/ServerControl
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |