5

私は今朝からこの問題を解決しようとしてきました、そして私はここで明白な何かが欠けていることを知っています、しかし私はそれを見つけることができないようです。

サーバーに公開されているXMLファイルを使用しています。このファイルには、「続きを読む」など、すべての標準的な単語の翻訳が含まれています。これは、適切なパブリケーションにローカライズされたコンポーネントを含むページです。

Razorテンプレートでは、プレーンなニュースの概要アイテムの下にある次のコードを使用して、アイテム全体にリンクしています。

<a tridion:href="@news.ID" class="more" ><%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, "read_more")%></a>

つまり、サーバータグは問題なく機能しますが、次のように解決されます。

<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="&lt;%= DefaultLabels.TranslatedTerm(((HomePage)Page).Location, &#34;read_more&#34;) %&gt;" LinkAttributes=" class=&#34;more&#34;" TextOnFail="true"/>

お気づきかもしれませんが、ページにはプレーンテキストとして書き込まれます(liveDocsによると、LinkTextパラメーターは最初にStringとして宣言されているため、驚くことではありません)。

私が奪うなら

tridion:href

最初の例では、次のように記述します

href

それは正常に動作し、コードは翻訳された文字列に解決され、リンクされます...コンポーネントのTCM IDにすぎず、完全なニュース項目が記載された正しいページではありません。

Razorで関数を作成し、linkTextを置き換え、テンプレート自体にComponentLinkを設定しようとしましたが、役に立ちませんでした。このテンプレートのコードを少し調整するだけで機能するはずですが、表示されないため、コードを処理するためのカスタムTBBを検討し始めました。

誰かがこれを解決する方法を知っていますか?

編集:

クリスの答えは、実はこの特定の状況で私が探していたものでしたが、プリヤンクの機能もそのように見なされるべきものであることを指摘する必要があると思います。両方の助けに感謝します、それは私の人生を少し楽にしてくれました!

4

2 に答える 2

8

このカミソリ機能がお役に立てば幸いです。これは、コンポーネント リンクまたは外部リンクからリンク タグをレンダリングするのに非常に役立つ機能です。

@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> 
}
于 2012-08-27T16:39:30.113 に答える
2

リンクを解決するためにデフォルトのテンプレートを使用するのではなく、次のように自分でリンクを出力することをお勧めします。

<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" 
    ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" 
    AddAnchor="false" LinkAttributes=" class=&#34;more&#34;" 
    TextOnFail="true">
        <%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, &#34;read_more&#34;) %>
</tridionComponentLink>

Taglib/ServerControl ではなく TCDL を出力することを検討することをお勧めします。

于 2012-08-27T15:45:47.973 に答える