0

背景:私は、Slingで実行されているWebサイトの検索エンジンサイトマップを実装する任務を負っています。このサイトには複数の国固有のサイトがあり、すべての国固有のサイトは複数のローカリゼーションを持つことができます。たとえば、http://ca.example.com/frは、カナダのサイトのフランス語にローカライズされたバージョンであり、次のようにマップされます。 / content / ca/fr。このコンテンツ構造を変更することはできません。残念ながら、国とローカリゼーションノードの両方が同じsling:resourceTypeです。また、管理タイプでは、国のサイトごとに1つではなく、国とローカリゼーションのペアごとにsitemap.xmlが必要です。

サイトマップの生成は簡単な作業です。私の問題は、国とローカリゼーションのペアごとに「サイトマップ」ノードが必要なことです。国とローカリゼーションノードが追加された(そしてそれらが同じリソースタイプを持っている)ため、現在は考えられません。サイトマップノードを追加するための優れた自動化された方法。

/{country}/{localization}/sitemap.xmlのリクエストを処理スクリプトにマップする「仮想リソース」をなんとかして定義できればいいのですが。私はブラウジングしていて、にぶつかりましResourceProviderOptingServletが、絶対パスにかなり焦点を当てているようです-または既存のリソースにセレクターを追加することは、私にはオプションのようには思えません。

これを処理するための多かれ少なかれクリーンな方法がある場合、何かアイデアはありますか?新しい国/ローカリゼーションの追加は毎日行われるわけではありませんが、「サイトマップ」ノードを手動で追加する必要があることは、依然として最適なソリューションではありません。

Slingリゾルバーを使用する代わりに、サイトマップを1日にX回更新し、sitemap.xmlノードをJCRの単純なファイルリソースとして生成するサービスを実行する方がよいかどうかを検討してきました...しかしそのルートに行く前に、フィードバックをお願いします:)

編集:

要件が変更されたことが判明し、ローカリゼーションごとにサイトマップを構成できるようになりました。これにより、作業が簡単になり、Slingに対抗する必要がなくなります:)

4

3 に答える 3

3

Sling はリソース ベースのフレームワークであるため、リクエストが対象とする JCR にリソース (ノード) が必要です。

2 つのオプションがあります。1) サイトマップを表示するロジックを含むサイトマップ テンプレートを作成するか、サイトマップ コンポーネントを含めます。サイトマップ ロジックは、必要に応じてクラスまたはサービスに抽出できます。各サイトのサイト マップは次の場所にあります。 - /content/us/en/sitemap.xml - /content/ca/fr/sitemap.xml

2) 2 つの sling セレクターを使用して参照する単一のサイトマップ リソース (ノード) を作成します。国コードと言語コード - この方法ではキャッシングが可能ですが、単一のリソースであるため、キャッシュ クリアの問題が発生する可能性があります。

  • /content/sitemap.us.en.xml
  • /content/sitemap.ca.fr.xml

どのサイトマップをレンダリングするかを決定するための Sling Selector 情報を抽出するための PathInfo。

http://dev.day.com/docs/en/cq/current/javadoc/com/day/cq/commons/PathInfo.html

これを行う場合、各サイトにサイトマップを手動で追加し、リソースを /content// の下に保持する必要があります。

MSM を使用してブループリント サイトを作成することも検討できます (プラットフォームを使用している場合)。それを使用して、サイト テンプレートを作成できる新しいサイトを展開することもできます。

于 2011-07-11T21:21:45.313 に答える
2

/{country}/{localization}/sitemap.xml への GET をカスタム コードで処理する場合は、その場所にノードを作成し、必要に応じてその sling:resourceType を設定して、カスタム サーブレットまたはスクリプトを呼び出します。

これらの sitemap.xml ノードを自動的に作成するには、JCR オブザーバーを使用して、新しい /{country}/{localization} ツリーが作成されたときに通知を受け、その後で sitemap.xml ノードを作成できます。

構成可能なサイトマップの場合、プロパティを sitemap.xml ノードに追加し、カスタム サーブレットまたはスクリプトでそれらの値を使用して出力を形成できます。

リポジトリに sitemap.xml ノードがなくても、サーブレット フィルターまたはカスタム ResourceProvider を使用してこれを行うことができますが、これらのノードを使用すると、実装と理解がはるかに簡単になります。

于 2011-07-13T09:32:11.530 に答える