0

Sitecore 6.5 ソリューションには、次のものがあります。

<sc:Text runat="server" Field="bodyText"/>

Sitecore.Context.Item["bodyText"]

私は後者をソリューションの多くの場所で使用しますが、最初の場所はあまり使用しません。後者を使用すると、web.configで設定され~/media/31F0E8084F9443789F25836A2B285D3E.ashxていても、メディアライブラリへのすべてのリンクが形式になっていることがわかりました。Media.UseItemPathstrue

ただし、最初に述べた方法を使用する<sc:Text />と、メディア ライブラリ アイテムへのリンクは正しい形式になります (GUID はありませんが、メディア ライブラリのフォルダー構造)。

どうしたの?

4

3 に答える 3

3

halbherzが後者について述べたように

Sitecore.Context.Item["bodyText"]

フィールドのリテラル値です。サイトコアパイプラインを経由しないRenderFieldため、リンクは拡張されません。

FieldRendererコードビハインドからフィールドをレンダリングする場合は、次のようなクラスを使用できます。

Sitecore.Web.UI.WebContols.FieldRenderer.Render("bodyText", Sitecore.Context.Item)
于 2012-08-06T10:21:41.003 に答える
1

さらに明確にするために(@halbherzと@martoの言うことは完全に正しいです)、〜なぜ〜がこのようになっているのかをよりよく理解できるようにします。

RichText フィールド内で、メディアや他のサイトコア アイテムへのリンクは、アイテムの「短い GUID」を使用してこの形式 (~/media/31F0E8084F9443789F25836A2B285D3E.ashx) で保存されるため、誰かがメディア/コンテンツ アイテムの名前を変更したり移動したりしても、リンクはそのまま残ります。有効である必要があります (項目のフル ネームとパスをフィールドに埋め込むのではなく)。

FieldRenderer (または sc:text / sc:image などの FieldRenderer から継承するコントロール) を使用すると、RenderFieldパイプラインが呼び出され、リンクが によって処理されLinkManagerます (構成の詳細については、web.config<LinkManager>セクションを参照してください)。LinkManager は、すべてのリンクが一貫した方法で処理されるように存在します。フィールド値を直接呼び出すと、このパイプラインがバイパスされ、フィールドの生のテキストが取得されます。

を使用して、これと同様の独自のリンクを作成できます。LinkManager.GetDynamicUrl(item);

于 2012-08-06T11:31:09.053 に答える
0

1つ目は、特定のパイプラインを通過するコントロールであり、保存されたアイテム参照をわかりやすいURLとして提供します。

2つ目は、編集されていない値を返す直接値呼び出しです。揚げたURLを取得するには、コントロールを使用する必要があります。

なぜ値を直接呼び出す必要があるのですか?

于 2012-08-06T09:06:55.937 に答える