0

凡例:私はSitecoreプロジェクトに取り組んでいます。このプロジェクトでは、単一のコンテンツツリーを備えた多言語サイトがあり、ほとんどのアイテムにはサポートされている各言語のバージョンがあります。現在のコンテキスト言語のバージョンを持たないアイテムを除外する、アイテムをクエリするクリーンな方法を開発したいと思います。

アイデア:特定のページでサポートされている言語を表すために、共有チェックボックスリストフィールドを持つテンプレートからすべてのテンプレートを継承することを考えていました。

:明確にするために、これは言語フォールバックとは異なります。コンテキスト言語に翻訳されていないアイテムを非表示にします。

質問:Sitecoreパイプラインを使用してこれを行うクリーンな方法はありますか?これは、XSLTとコンテンツツリーをクエリするAPIコードが、この共有テンプレートフィールドを毎回参照する必要がないことを意味しますか?

4

3 に答える 3

4

Sitecoreクエリでそれをクエリする良い方法はありません。次のように、クエリの結果からそれを検出してフィルタリングできます。

IEnumerable<Item> items = // some code
myItems.Where(x => x.Versions.Count > 0);

すべてのアイテムが返される前にフィルタリングを検討している場合、チェックボックスのアイデアは1つの可能な解決策ですが、もちろん実際の言語と非同期になる傾向があります。LuceneとAdvancedDatabaseCrawlerモジュールを使用して、クエリ可能なバージョンを持つ言語のリストを含むインデックスにDynamicFieldをパックすることも検討できます。もちろん、luceneは汎用クエリに常に適しているとは限りません。

于 2012-06-06T13:25:59.863 に答える
1

私はしばらく前に同様の問題を抱えていました。私の場合、特定の言語のバージョンがないページで、空白のページではなく404ページが見つかりませんを返すようにしました。この問題に関するブログ投稿を作成しました。http://www.cognifide.com/blogs/sitecore/sitecore-displaying-pages-without-a-language-version/

あなたの場合、ページにチェックボックスを追加する必要はありません。Item.Versions.Countが0より大きいことを確認してください。

于 2012-06-06T13:24:59.357 に答える
0

Alex Shybaの部分言語フォールバックモジュールを使用して、サイトのenforceVersionPresenceをtrueに設定し、Fallback.EnforceVersionPresenceTemplatesでベーステンプレートGUID(たとえば、すべてのページで使用されるベーステンプレート)を指定することもできます。基本的なGetItemデータベースコマンドで、彼のコードは現在のコンテキスト言語の言語バージョンがあるかどうかを確認し、ない場合はnullを返します。これにより、サイトコアから404が自動的に返されます。

httpBeginRequestパイプラインをチェックインするものの代わりにこれを使用することにより、GetChildrenおよびマルチリストフィールドのGetItemsメソッドを使用するときにアイテムが返されるのを防ぐこともできます。

言語フォールバックとバージョンプレゼンスの実施に関する10のブログシリーズの投稿があります:http ://www.sitecore.net/Community/Technical-Blogs/Elizabeth-Spranzani/Posts/2014/03/Fallback-Series-Post -3.aspx

ありがとう、リズ

于 2014-04-30T20:24:57.697 に答える