2

私は英語のPDFをたくさん持っています。私は英語とドイツ語のウェブページを持っています。

ドイツ語のページで英語の PDF を表示したい場合、そのドイツ語版の PDF が利用できないため不可能なので、メディア ライブラリ アイテムのフォールバックを試みましたが、それでも解決しませんでした。

誰かがこれに代わるものを教えてください。

注: 英語のドキュメントをドイツ語版でアップロードしたくありません。他にも利用可能な言語があり、すべての言語で何度もアップロードすることはできません。

ドキュメントを英語のみでアップロードする必要がありますが、そのドキュメントがその言語にあるかどうかに関係なく、他のすべての言語で表示されます。

コードを変更する必要がある場合でも問題ありません。

前もって感謝します

4

3 に答える 3

1

PDF のアップロードにどのテンプレートを使用していますか? を使用している場合/sitecore/templates/System/Media/Unversioned/Pdf、これは継承元で/sitecore/templates/System/Media/Unversioned/Fileあり、この blob フィールドはとにかく共有としてマークされています。

ファイル テンプレート

共有フィールドは言語バージョン間で共有されるため、英語の PDF をアップロードし、ドイツ語のアイテムから同じメディア アイテムにリンクすると、元の英語の PDF にリンクされます。

Sitecore では、テンプレートにフィールドを追加するときに、「共有」というチェックボックスがあります。何のために?

于 2013-06-10T19:03:02.700 に答える
0

メディアを事前にバージョン管理する必要があるかどうかを確認することをお勧めします。言語に基づいてメディアをバージョン管理する必要があることがわかっている場合は、web.config で次の属性を更新する必要があります。

<!--By default, Media items are not versionable and the below setting is set to false in the web.config.  
    If you upload an image in one language, it will persist across all language versions.
    If you change this to true, then versioning will apply and you would have to set the media item into all language versions, 
    or enable fallback, but if enforce version presence is turned on and media template guids are included in EnforceVersionPresenceTemplates, 
    then you'll have to make sure all language versions at least exist-->
  <setting name="Media.UploadAsVersionableByDefault">
    <patch:attribute name="value">true</patch:attribute>
  </setting>

Alex Shyba の Partial Language Fallback モジュールはこれでうまく動作します。どのメディア テンプレートにもバージョンの存在を強制しないようにすることをお勧めします (管理者に空白の言語バージョンを強制的に作成させたくありません)。その後、英語版を作成し、それを上書きする必要がある場合にのみ言語版を作成できます。

部分言語フォールバックを使用する場合は、メディアのバージョン管理可能なテンプレート フィールドでフォールバックを有効にするチェックボックスがオンになっていることを確認する必要があります。

また、メディア プロバイダーを更新して、メディアの URL に言語を埋め込んで、キャッシュが機能しないようにすることもお勧めします。例: Directions.pdf という名前の PDF を作成し、それが www.site.com/media/Directions.pdf にロードされた場合、言語を切り替えると、非常にうまくキャッシュされます。そのため、メディア プロバイダーを更新して、メディア URL をコンテキスト言語でエンコードする必要があります。

ここでデモを見ることができます: https://github.com/Verndale-Corp/Sitecore-Fallback-FullDemo

public class CustomMediaProvider : MediaProvider
{
    public override string GetMediaUrl(MediaItem item, MediaUrlOptions options)
    {
        Assert.ArgumentNotNull((object)item, "item");
        Assert.ArgumentNotNull((object)options, "options");

        string result = base.GetMediaUrl(item, options);

        // Added by Verndale, check if language should be embedded
        UrlOptions urlOptions = UrlOptions.DefaultOptions;
        urlOptions = LanguageHelper.CheckOverrideLanguageEmbedding(urlOptions);
        if (urlOptions.LanguageEmbedding == LanguageEmbedding.Always && options.UseItemPath)
        {
            result = "/" + Sitecore.Context.Language.Name.ToLowerInvariant() + Sitecore.StringUtil.EnsurePrefix('/', result);
        }

        return result;
    }

    public static UrlOptions CheckOverrideLanguageEmbedding(UrlOptions urlOptions)
    {
        var thisSite = Sitecore.Context.Site;

        if (urlOptions.Site != null)
            thisSite = urlOptions.Site;

        if (!String.IsNullOrEmpty(thisSite.SiteInfo.Properties["languageEmbedding"]))
        {
            if (thisSite.SiteInfo.Properties["languageEmbedding"].ToLower() == "never")
                urlOptions.LanguageEmbedding = LanguageEmbedding.Never;
            else if (thisSite.SiteInfo.Properties["languageEmbedding"].ToLower() == "always")
                urlOptions.LanguageEmbedding = LanguageEmbedding.Always;
            else if (thisSite.SiteInfo.Properties["languageEmbedding"].ToLower() == "asneeded")
                urlOptions.LanguageEmbedding = LanguageEmbedding.AsNeeded;
        }

        return urlOptions;
     }
 }
于 2014-04-30T20:17:16.903 に答える