Comments
Description
Transcript
OpenCms8.5日本語ドキュメント
Alkacon ® Alkacon Software GmbH An der W achsfabrik 13 DE - 50996 Köln Geschäftsführer Alexander Kandzior Amtsgericht Köln HRB 54613 Tel: +49 (0)2236 3826 - 0 Fax: +49 (0)2236 3826 - 20 http://www.alkacon.com OpenCms 8.5.1 Documentation Thursday, February 7, 2013 Document version 1.2 - ja1.0 Japanese Translatation by ubicast Co. Ltd. 内容 イントロダクション ..................................................................................................................... 6 ページエディター ................................................................................................................ 7 ツールバー............................................................................................................................... 7 使用できる機能 .................................................................................................................................7 2.1.1 エディットポイント コンテンツ追加 .......................................................................................................... 7 ............................................................................................................... 7 2.3.1 新しいコンテンツを作る....................................................................................................................7 2.3.2 既存のコンテンツを探す....................................................................................................................9 クリップボード ................................................................................................................. 9 コンテクストメニュー ....................................................................................................... 9 2.5.1 プロパティ ...................................................................................................................................... 10 2.5.2 Attributes(属性) ........................................................................................................................... 10 2.5.3 有効性 ............................................................................................................................................. 10 2.5.4 ロックレポート ............................................................................................................................... 10 2.5.5 カテゴリー割り当て ........................................................................................................................ 10 2.5.6 SEO オプション .............................................................................................................................. 10 2.5.7 戻す ................................................................................................................................................ 10 2.5.8 ワークプレースを表示 ..................................................................................................................... 10 公開 .................................................................................................................................11 サイトマップエディター .......................................................................................................12 サイトマップエディターを開く ..............................................................................................12 サイトマップエディターツールバー .......................................................................................12 公開 ..................................................................................................................................13 ページ作成 .......................................................................................................................13 3.4.1 コンテナーページ ............................................................................................................................ 13 3.4.2 モデルページを編集する.................................................................................................................. 13 3.4.3 タイプページ................................................................................................................................... 14 3.4.4 Function pages................................................................................................................................ 14 クリップボード ...............................................................................................................14 すべてのリソースを表示 コンテキスト .................................................................................................15 ...................................................................................................................15 最後のページを表示 .........................................................................................................15 ページタイプ ..........................................................................................................................15 3.9.1 新規ページ ...................................................................................................................................... 15 3.9.2 詳細ページ ...................................................................................................................................... 16 3.9.3 ファンクション詳細ページ .............................................................................................................. 17 © ubicast Co. Ltd. Page 2 of 78 3.9.4 Navigation level ............................................................................................................................... 18 3.9.5 Hide in navigation ............................................................................................................................ 19 コンテンツエディター.................................................................................................................21 インラインエディター.................................................................................................................22 インライン編集をサポートする領域 .......................................................................................22 設定 ........................................................................................................................................23 5.2.1 フォーマッタ................................................................................................................................... 23 5.2.2 ネストしているコンテンツ .............................................................................................................. 23 5.2.3 詳細 ................................................................................................................................................ 23 エレメントグループ ....................................................................................................................24 説明 ........................................................................................................................................24 モデルページとの組み合わせ ..................................................................................................24 エレメントグループの使用 .....................................................................................................24 継承グループ...............................................................................................................................27 説明 ........................................................................................................................................27 基本的な定義 ..........................................................................................................................27 使用法.....................................................................................................................................27 7.3.1 新規に継承グループを作成する ....................................................................................................... 27 7.3.2 既存の継承グループを使う .............................................................................................................. 27 7.3.3 継承グループを変更する.................................................................................................................. 27 インターナル ..........................................................................................................................31 コレクター ..................................................................................................................................32 実装 ........................................................................................................................................32 設定 ........................................................................................................................................32 JSP ファイルのコレクターの使用 ...........................................................................................32 リストをドロップ可能にする ..................................................................................................33 コレクターのある詳細ページを使用します .............................................................................33 コードの例..............................................................................................................................34 XSD 選択エレメント ...................................................................................................................35 定義 ........................................................................................................................................35 ひとつまたは複数の選択 .........................................................................................................36 コンテンツエディター ............................................................................................................36 JSP の中で値にアクセス.........................................................................................................37 例............................................................................................................................................38 ADE 設定 ....................................................................................................................................39 サイトマップ設定 ...................................................................................................................39 モジュール設定.......................................................................................................................39 設定の継承..............................................................................................................................40 Solr 検索の統合 ..........................................................................................................................41 要約 ........................................................................................................................................41 OpenCms でコンテンツを探す ...............................................................................................41 © ubicast Co. Ltd. Page 3 of 78 11.2.1 デモ ................................................................................................................................................ 41 11.2.2 クイックスタートの例 ..................................................................................................................... 41 11.2.3 11.2.3 アドバンスサーチ機能 .......................................................................................................... 44 11.2.4 標準の OpenCms Solr コレクターを使用する................................................................................... 44 OpenCms コンテンツのインデックス作成 ..............................................................................45 11.3.1 検索設定 ......................................................................................................................................... 45 11.3.2 インデックス化されたデータ........................................................................................................... 49 Behind the walls......................................................................................................................52 11.4.1 リクエストハンドラー ..................................................................................................................... 52 11.4.2 パーミッションチェック.................................................................................................................. 52 11.4.3 設定可能なポストプロセッサー ....................................................................................................... 52 11.4.4 多言語サポート ............................................................................................................................... 53 11.4.5 多言語の依存性解決 ........................................................................................................................ 53 11.4.6 結果キャッシュの抽出 ..................................................................................................................... 53 よくある質問 ..........................................................................................................................53 一般的に Solr はどのように統合されますか? .................................................................................. 53 11.5.1 以下のコードは Java API に対してどのようにプログラムするかの簡単な例です: ........................................................ 54 11.5.2 どうやって特定の言語でテキストをソートしますか? ..................................................................... 54 11.5.3 問い合わせ結果をハイライトするには?.......................................................................................... 55 11.5.4 Solr メーリングリストでの質問 ....................................................................................................... 56 SEO ............................................................................................................................................57 イントロダクション ................................................................................................................57 エイリアス..............................................................................................................................57 12.2.1 シンプルエイリアス ........................................................................................................................ 57 12.2.2 リライトエイリアス ........................................................................................................................ 57 12.2.3 インターナル................................................................................................................................... 57 12.2.4 SEO オプションダイアログ ............................................................................................................. 58 12.2.5 エイリアスダイアログを編集する .................................................................................................... 59 12.2.6 新規エイリアスを作成する .............................................................................................................. 60 12.2.7 既存のエイリアスを編集する........................................................................................................... 60 12.2.8 エイリアスをエクスポート、インポートする ................................................................................... 61 robots.txt と XML サイトマップの自動生成 .............................................................................62 12.3.1 XML サイトマップ生成 .................................................................................................................... 62 12.3.2 robots.txt の生成 .............................................................................................................................. 63 CMIS ...........................................................................................................................................64 CMIS 経由での OpenCms へのアクセス..................................................................................64 CMIS の統合 ...........................................................................................................................65 13.2.1 project: ............................................................................................................................................ 65 13.2.2 description:...................................................................................................................................... 66 13.2.3 Index: .............................................................................................................................................. 66 13.2.4 rendition: ......................................................................................................................................... 66 13.2.5 property:.......................................................................................................................................... 66 13.2.6 CMIS の制限.................................................................................................................................... 67 13.2.7 CMIS クライアントのプログラム例 ................................................................................................. 67 © ubicast Co. Ltd. Page 4 of 78 JSP の基本..................................................................................................................................70 JSP 機能 .................................................................................................................................70 JSP <cms>-taglib...............................................................................................................70 14.2.1 どのように taglib ディレクティブを追加するか? .............................................................................. 70 14.2.2 使用できるタグ ............................................................................................................................... 70 14.2.3 使用できる EL 機能 ......................................................................................................................... 71 © ubicast Co. Ltd. Page 5 of 78 イントロダクション この文書は Alkacon Software - The OpenCms Experts によって作成されました。Alkacon は、ミッションクリティカル な OpenCms プロジェクトに必要となる、セキュリティと利便性の実現するサポートパッケージ及び標準サービスを提 供しています。詳しいサービス内容については、[email protected] までお問い合わせください。 この文書は、ローカル環境にインストールした OpenCms(Version >= 8.5.1)へのリンクを含んでいます。この OpenCms には、OpenCms v8 Modules(modules-v8)と、OpenCms Developer Modules (dev-demo)を一緒にイ ンストールしてください。インタラクティブな OpenCms8 の開発デモを利用するには、OpenCms を起動し、メインのサ ーブレットが次の URL でアクセスできる状態にしてください:http://localhost:8080/opencms/opencms。そうすると、こ の文書内のリンクが使用でき、"Wonderful world of flowers"の中の該当するデモページを表示できます。 Alkacon OpenCms Demo Modules をインストールした OpenCms をまだ起動していない場合、ここから最新版をダ ウンロードし、ダウンロードした ZIP の中の OpenCms サーバーインストール手順(installation.html)にしたがってセッ トアップしてください。 この文書は、GNU FDL Free Documentation License by Alkacon Software GmbH の基に配布されます。この文書 に対する寄贈やフィードバックを歓迎致します。 この文書の翻訳は、日本のソリューション・プロバイダーである株式会社ユビキャストが行なっています。日本語に関 するお問い合わせは、[email protected] まで。 © ubicast Co. Ltd. Page 6 of 78 ページエディター ページエディターはメインビューであり、プレビューしながらページのコンテンツを加えたり、配置したり、編集したりする ことができます。さらに、ここから、サイトマップ操作、公開、ファイル属性、プロパティ操作などの、全てのユーザータス クへのアクセスを提供します。 ツールバー ツールバーは web ページのオフラインプレビューを参照しているときに、右上の色付きのエディットポイント をクリ ックすることで切り換えることができます。ツールバーはウィンドウ上部にあり、その時、表示されているページで使用 できる編集オプションを表示します。 2.1.1 使用できる機能 公開:公開ダイアログを開きます。 クリップボード:クリップボード(お気に入りや最近編集したコンテンツにアクセス出来ます)を開きます。 コンテンツ追加:「コンテンツ追加」は ページにコンテンツをドラッグ&ドロップで 加えます。 エディットポイント:「エディットポイント」マークをクリックするとページ上の編集可能なエレメントをクレー(の ポイント)でマークします。 コンテキスト:現在のページのコンテクストメニューを表示します。 サイトマップ:サイトマップエディターに切り替わります。 エディットポイント ツ ー ル バ ー の エ デ ィ ッ ト ポ イ ン ト を ク リ ッ ク す る と 、 ページ上のすべてのエレメントについてエディットモ ードをオン/オフする(入れる/切る)ことができます。エディットポイントは、すべての編集可能なエレメントの上に表 示されます。 コンテンツ追加 2.3.1 新しいコンテンツを作る 「コンテンツ追加」をクリックするとギャラリーダイアログが開き、現在のコンテナーページに加えることが出来るコンテ ンツタイプのリストが表示されます。 © ubicast Co. Ltd. Page 7 of 78 コンテンツ管理者は、このダイアログで新しいコンテンツを作成したり、既にあるコンテンツを検索したりすることができ ます。新しいコンテンツを作成するためには、使いたいコンテンツタイプを選んでページにドラッグするだけで、新しい インスタンスが内部で作成されます。 エレメントをドラッグしている間、エレメントがドロップ出来るセクションがハイライト表示されます。 © ubicast Co. Ltd. Page 8 of 78 2.3.2 既存のコンテンツを探す 既にあるコンテンツを再度使うためには、「コンテンツ追加」のアイコンをクリックし、ひとつ、またはいくつかのリソース タイプを選び、「要素を検索」ボタンをクリックします。表示されているエレメントはすべてページの上にドラッグできます。 それぞれの「タイプ」、「ギャラリー」、「カテゴリー」、「詳細」のひとつまたは複数の条件を選択することで、検索を絞り 込むことができます。「要素を検索」ボタンをクリックすると、与えられた条件にマッチした結果を表示します。 クリップボード ツールバーのクリップボードアイコンをクリックすると、自分のお気に入りと最近使用したエレメントの一覧を表示します。 ドラッグ&ドロップで、クリップボードから直接ページにコンテンツを追加することができます。 お気に入りに追加を使って、コンテンツエレメントをお気に入りに追加できます。 コンテクストメニュー ツールバーのコンテクストメニューアイコンをクリックし、以下の機能を選択します。 プロパティ: 現在のコンテナーページのプロパティの設定 Attributes(属性): コンテナーページの属性、作成日、最終更新日の表示 有効性: スケジュール公開、及び、有効性の設定 Lock report(ロックレポート): 現在のコンテナーページのロック状況を表示 © ubicast Co. Ltd. Page 9 of 78 カテゴリー割り当て: 現在のコンテナーページのカテゴリー割り当ての設定 SEO options(SEO オプション): サーチエンジン最適化の設定 戻す:コンテナーページを最後に公開したバージョンに戻します ワークプレースを表示:ワークプレースを開きます ログアウト:ワークプレースからログアウトします 2.5.1 プロパティ コンテナーページのプロパティを編集するには、コンテクストメニューから「プロパティ」を選択します。「基本プロパティ」 「個別プロパティ」「共通プロパティ」があります。「基本プロパティ」は、利用可能なプロパティのサブセットです。 2.5.2 Attributes(属性) 属性情報は、 コンテナーページの追加的なメタデータ、たとえばページタイトル、リソースタイプ、ファイスサイズ、リ ソースの状態(新規、変更済み、削除済み等)、作成日等の情報を表示します。さらに、最終変更日やそのページが 所属しているプロジェクト、ロケールや現在のユーザーが持っている権限についても表示します。 2.5.3 有効性 コンテナーページのオンライン上での公開設定を行うことができます。 スケジュール公開:公開予定日の機能を使うと、ページは指定された日時に自動的に公開されます。 公開日:公開日を設定すると、ページは選択された日時からオンライン上で閲覧可能になります。(※この公開日 の機能は、ページの「公開」を実行しても即公開ではなく、指定された日時に自動的に公開されます。) 期限日:期限日を設定すると、ページは選択された日時までオンライン上で閲覧可能であり、期限日以降は、ウ ェブサイトからは消えます。リソースとしてワークプレース上には残ります。(※ページが公開されている必要があ ります。) 日付は、キーボードで入力するか、日付項目をクリックして表示されるカレンダーウィジェットを使って設定できます。 2.5.4 ロックレポート ロックレポートは現在のページのロック状況を表示します。もし別のユーザーによってそのページがロックされている場 合には、そのユーザーと関連するプロジェクトについての情報が取得できます。このダイアログは継承されたロックも 参照することができます。 2.5.5 カテゴリー割り当て 現在のページのカテゴリー割り当てをするためのウィジェットを開きます。 2.5.6 SEO オプション コンテナーページの「タイトル」「デスクリプション」「キーワード」のプロパティを設定を行うことができます。さらに、その ページにエイリアスを設定することが可能です。書き換えルールは、テンポラリーリダイレクト(302)、パーマネントリダ イレクト(301)、ページ表示(200)が選択可能です。設定済みのエイリアスは下部に表示されます。 2.5.7 戻す 現在のコンテナーページを最後に公開した状態に戻します。 2.5.8 ワークプレースを表示 新しいウィンドウでワークプレースを開きます。ワークプレースはコンテンツとリソースをマネージメントするためのより高 度なオプションが特徴で、管理オプションを多数提供します。 ワークプレースには管理者、開発者等のユーザーのみ がアクセスできるような運用を推奨します。 © ubicast Co. Ltd. Page 10 of 78 公開 作業が完了し、変更を公開したいときには、変更したコンテンツがオンラインバージョンのウェブサイトで見られるように 公開する必要があります。編集したページ、及び、その他の変更を公開するためには、 「公開」のアイコンをクリックし ます。 公開リストには、現在のユーザーによって追加、修正、削除された、まだ公開されていないすべてのリソースが 含まれています。変更が加えられていないリソースは公開リストには表示されません。リソースが別のユーザーによ ってロックされている場合は、公開リストには表示されません。公開リストは、それぞれのユーザーセッションを代表す るセクションにわかれます。リソースごとの選択/非選択、すべてのリソースの選択/非選択、セッションごとの選択 /非選択が利用可能です。マウスオーバーで「削除」チェックボックスが表示されます。(※アイテムを公開リストから 削除しても、公開リストダイアログが再度開かれたときに、また表示されます。または、公開時に「関連リソースと共に 公開」チェックボックスで表示されます。) 「関連リソースと共に公開」はオリジナルのリソースに関係のあるすべての新規/変更されたリソース(例:イメー ジ、リンクされたリソース)、及び、オリジナルのリソースに直接リンクされているシブリングを公開します。(※シブ リングは UNIX ファイルシステムのハードリンクによく似た仕組みです。) © ubicast Co. Ltd. Page 11 of 78 サイトマップエディター サイトマップエディターは、新しいコンテナーページを作成したり、既成のページナビゲーション情報を変更したりする ことで、サイト構造を編集することを可能にします。サイトマップは、コンテナーページのツリーを表示することでウェブ サイトの構造を表します。ユーザーは、新しいコンテナーページをナビゲーションツリーの様々なレベルにドロップする ことや、タイトルなどの追加情報を入力すること、新しいサブサイトマップを作成すること、ドラック&ドロップでページの 順番を入れ替えることなどができます。このサイトマップの階層構造は、サイト構造を表し、URL を表します。これは ワークプレースの仮想ファイルシステム(VFS)のファイルツリーとよく似ていますが、まったく同一ではありません。 サイトマップエディターを開く ツールバーのサイトマップアイコンをクリックします。サイトマップエディターはページツリーをナビゲーション順で表示 します。マウスをページ(サイトマップエントリー)の上に動かすと「コンテキストメニュー」アイコンと「移動」アイコンが表 示されます。 サイトマップエディターツールバー 公開: 公開ダイアログを開きます クリップボード: 削除された、または最近変更されたページを表示します ページ作成: コンテンツ管理者がサイトマップに新しいページを作成します すべてのリソースを表示:すべてのリソースを表示する VFS エクスプローラービューに切り替えます コンテクストメニュー: サイトマップのコンテクストメニューを表示します エディットポイント:ページエディターに戻ります © ubicast Co. Ltd. Page 12 of 78 公開 ページ作成 サイトマップツールバーのページ作成で、新しいページを ドラッグ&ドロップで作成することができます。「新規ページ」 (コンテナーページ)、「スペシャル」(タイプページ)、「Function pages」(ファンクションページ)の3つのタイプから選択 可能です。 3.4.1 コンテナーページ 事前に定義したモデルページを基に新しいコンテナーページを作成しします。新しいコンテナーページはサイトマップ の中の必要な場所にドラッグすることができます。 もし表示されているページが、現在表示されていないサブページを含んでいたら、そのページの後に、新しいページを 同じナビゲーションレベルで挿入できます。また、フォルダー構造は、マウスをフォルダーアイコンの上に動かすことで、 ドラッグ&ドロップしている間展開され、フォルダーの中に新しいページを挿入できます。 3.4.2 モデルページを編集する モデルページを編集するには、 ページ作成ダイアログ の中の「新規ページ」タブを開き、該当するコンテナーペー ジのコンテクストメニューから 編集アイコンをクリックします。この変更は、すべての新規ページのモデルについて 適用されますので、この操作は注意して行なって下さい。(※既存のページには適用されません。)新しいページのデフ ォルト要素を加えたり削除したりできます。モデルページについての詳細はモデルページを参照してください。 © ubicast Co. Ltd. Page 13 of 78 3.4.3 タイプページ リソースタイプに対する詳細ページを作成します。リソースタイプ毎に1つの詳細ページを作成すると、その詳細ペー ジを利用してそのリソースタイプの個別コンテンツを表示することができます。その為、リソースタイプの個別コンテン ツ毎にコンテナーページをサイトマップに作成する必要はありません。 詳細ページは、検索結果、コンテンツコレクターリスト等からリンクされます。この時、個別コンテンツを表示するため の URL は、各ページの UrlName から生成されます(UrlName はデータ定義により、任意のデータ項目から使用す る事ができます)。詳しくは詳細ページを参照してください。 3.4.4 Function pages ページ作成ダイアログの「Function pages」を選択すると、特殊な目的を持ったページの選択ができます。 3.4.4.1 HTML Redirect 「HTML Redirect」はページナビゲーションからアクセスができ、サイト内部や外部のリンク先にリダイレクトします。ナ ビゲーションから除外されている場合があるかもしれませんが、ページやサブサイトが、別の場所に移動された場合 に、ユーザーのブックマークからリンク切れになることを防ぎます。 3.4.4.2 Navigation level Navigation level を参照してください。 3.4.4.3 function detail page function detail page を参照してください。 クリップボード サイトマップツールバーからクリップボードを選ぶと、サイトマップエディターの中で最近編集したページと削除したペー ジのリストが表示されます。 変更済: 変更済みリストはデフォルトとして表示され、サイトマップエディターのなかで最近変更されたページを含みま す。リストエントリーの上でマウスオーバーすると、バーの右側に、サイトマップエディターにそのページを表示できる 機能が現れます。クリッックすると、クリップボードは閉じられ、選択されたページがエディターの中で点滅します。 削除済: このリストは、サイトマップから公開されずに削除されたすべてのページを含んでいます。リストエントリーの上 でマウスオーバーすると、削除取り消し機能がバーの右側に現れ、クリックすると、削除される前の状態に復元します。 © ubicast Co. Ltd. Page 14 of 78 すべてのリソースを表示 OpenCms 仮想ファイルシステム上の全てのサイトフォルダーツリーとリソースを表示します。このオプションが選択さ れた時、ページ新規作成と移動機能は使えなくなります。ユーザーは他のオプションにアクセスするためファイルツリ ーをブラウズし、コンテクストメニューを使うことができます。このオプションは、適正に表示されないリソースタイプを 含んでいることに留意してください。 コンテキスト コンテクストメニューは現在のサブサイトマップの使用可能なオプションを表示します。 親サイトマップを表示 エイリアスを編集 リフレッシュ ワークプレースを表示 ログアウト 最後のページを表示 ページエディターで最後に編集されたページに戻ります。 ページタイプ 3.9.1 新規ページ サイトマップエディターの ページ作成ダイアログを有効にするためには、最低ひとつのモデルページを作成し、サ イトマップコンフィグに設定しなくてはなりません。サイトマップツリーに新規ページをドラッグするとき、モデルページは サイトナビゲーションの中に新規ページを作るためのマスターコピーとして使用されます。テンプレート開発者は、テン プレートの実装を終了した後、ウェブサイトの構築を始める前の段階でモデルページを作成し、サイトマップコンフィグ の設定を行います。 モデルページのデモページを参照します エレメントグループデモのあるモデルページのデモページを参照します 3.9.1.1 モデルページ作成手順 1. 2. 3. 4. エクスプローラービューで、新しいコンテナーページを新規作成します。 プロパティ「template」がサイトフォルダーの中にセットされていない場合は、プロバティ「template」を適宜、セッ トします。 異なる設定のテンプレートが複数ある場合、テンプレート毎に複数のモデルページを作成します。 サブサイトマップの以下のフォルダーに、このコンテナーページを設置します。 /{sitefolder}/{sub sitemap path}/.content/.new/ 5. 作成したモデルページをクリックしてプレビュー画面を開き、このモデルページをクリックし、ページを設置したい 箇所にドロップします。 3.9.1.2 サイトマップコンフィグの設定 サイトマップコンフィグにモデルページを設定します。 /{sitefolder}/{sub sitemap path}/.content/.config 「Model pages」タブの中に、モデルページのパスを追加します。 すると、設定されたモデルページが、サイトマップエ © ubicast Co. Ltd. Page 15 of 78 ディターの中のページ作成ダイアログの「新規ページ」のリストの中に表示されます。ダイアログに表示されるタイトル 及び、説明文は、「Title」プロパティと「Description」プロパティを編集します。モデルページは、新しいページを作成す るための雛形として使用されます。さらに、上位のサイトマップから継承したモデルページの表示をコントロールするた めには、「Model pages」タブの「Disabled」チェックボックスを使用します。 留意点:ウェブサイト上の共通のコンテナーパーツを整理するには、エレメントグループや継承グループのような他の 方法を用いて、モデルページにまとめることが可能です。 3.9.2 詳細ページ /.content/配下のコンテンツは、コンテナーページには直接ドロップせず、コレクターなどを使って、詳細ページの URL を自動生成します。また、詳細ページにアクセスするための URL は UrlName から生成され、この UrlName は、例え ば、「Title」フィールドの値がマッピングされます。 詳細ページのデモを参照します 3.9.2.1 使用例 コンテナーページにドロップされたすべてのリソースは、モジュールコンフィグもしくはサイトマップコンフィグで指定され たディレクトリの中に自動的につくられます。通常、リソースは/.content/配下に設置されます。リソースがリストか らコレクターを使ってリンクされる場合、編集者はそのコンテンツの URL を見た目の良い URL にするために、 /.content/をパスから削除するような必要はありません。 これは、ナビゲーションの中で「詳細ページ」と呼ばれるページをひとつ作成し、/.content/を含まないリソースリンク を生成するために、リソースの「Title」プロバティを URL に使用するという考えです。 生成された URL: /dev-demo/collector-with-detail-page/generated_resource_title /dev-demo/collector-with-detail-page/は、詳細ページのパスで generated_resource_title は マッピングされた「Title」プロパティから生成された URI です。 3.9.2.2 設定 設定はテンプレートとリソースタイプ定義を含んでいるモジュールに関連しています。以下のマッピングをコンテンツタ イプの XML スキーマ定義に加えてください。もしそのタイプに Title フィールドがない場合、タイトルに対応したフィー ルドを使用してください。 <mapping element="Title" mapto="urlName" /> detailview="true"属性を xmlcontent が表示されているテンプレート jsp の<cms:container>タグに加えま す。 これは、通常は、センターカラムにあります。 <cms:container name="centercolumn" type="center" width="450" detailview="true" .../> リソースをリストするコレクターを用いる時には、リソースパス ${content.filename}を <cms:link>で囲みます。<cms:link>は、適切な URL を生成します。 © ubicast Co. Ltd. Page 16 of 78 <%@page buffer="none" session="false" taglibs="c,cms" %> <div> <cms:contentload collector="myCollector" param="..." editable="true"> <%-- Access the content --%> <cms:contentaccess var="content" /> <c:set var="link"><cms:link>${content.filename}</cms:link></c:set> <a href="${link}">${content.value.Title}</a> </cms:contentload> </div> 3.9.2.3 使用法 サイトマップエディターの中の「ページ作成」 ダイアログを開きます。 「スペシャル」タブから詳細ページをドロップします。 詳細ページがサイトマップコンフィグによって自動的に設定されます。 リンクはコレクターリストの中に自動的に生成されます。 3.9.3 ファンクション詳細ページ ファンクション詳細ページは、ダイナミックファンクションのための詳細ページの仕組みです。ここでは、ダイナミックファ ンクションのための詳細ページの作成と設定の方法を記述します。ローカルにインストールされたバージョン 8.5 以上 の OpenCms を前提にしています。 ダイナミックファンクションのデモを参照します ファンクション詳細ページのデモを参照します 3.9.3.1 使用例 サイトの中の複数のページに表示されるフォームから POST されるデータを受け、リクエストの結果をナビゲーション の中のひとつのページに表示します。たとえば、サイトの中の複数のページの検索フォームの統合を行い、ナビゲーシ ョンの中の一つのページに検索結果を表示します。OpenCms 8.0.3 以降では、そのような結果ページを定義するため にファンクション詳細ページを使用することができます。 3.9.3.2 一般的なステップ 以下のステップで、ダイナミックファンクションとそのファンクション詳細ページを作成します。 モジュールの中にダイナミックファンクションエレメント(JSP)を作成します。 作成したダイナミックファンクションに対するファンクション詳細ページを作成し、設定を行います。 ダイナミックファンクションをコンテナーページにドロップします。 サイトマップエディターを使ってファンクション詳細ページをウェブサイト構造にドロップします。 3.9.3.3 ダイナミックファンクションを作成 テンプレート開発者のロールを持ったユーザーだけがダイナミックファンクションを編集できるので、そのファンクション はモジュール内に作成するべきです。 /system/modules/[module name]/functions/ 「コンテンツ追加」ダイアログの「要素を検索」において、ファンクションを表示しないようにするには、以下の 「search.exclude」プロパティを適切にセットします: ドラッグ & ドロップ オプションは ワークプレースユーザーのロールを持つユーザーが利用可能です。 © ubicast Co. Ltd. Page 17 of 78 3.9.3.4 ファンクション詳細ページを作成 ● フォーム要素を持つ JSP を実装します。このフォームは、サイト内のいくつかのコンテナーページから 利用されます。${cms.functionDetail['Name of the function detail page']}を 「フォーム」タグの action 属性に使用します。 <%@page buffer="none" session="false" taglibs="c,fn,cms" %> <div class="box box_schema1"> <form action="${cms.functionDetail['simplecalculator']}" method="post"> … </form> </div> もう 1 つ JSP を実装します。これはフォームデータを処理し、詳細ページに対して HTML の出力を行います。 エクスプローラービューより、/system/modules/[module name]/functions/フォルダーの中にフォー ム JSP と詳細ページ JSP のふたつのダイナミックファンクションエレメントを作成します。ひとつはフォーム JSP から参照され、もうひとつは詳細ページ用の JSP です。 モジュールコンフィグの/system/modules/[module name]/.config を編集し、「Functions」のタブにフ ァンクション詳細ページを設定します。「Function」に新しいファンクションを選択します。「Name」に独自の名前を 定義します。これはフォーム JSP でファンクションパラメーターとして使われたものと同じ名前にします。このモジ ュールコンフィグを設定ののち、ファンクション詳細ページはサイトマップエディターの中の「ページ作成」ダイアロ グの「Function pages」タブの中に表示されます。 JSP テンプレート上の「container.info」プロパティを編集します。functionDetail=[container name attribute]を設定します。この値をファンクション詳細ページが表示されるコンテナーの属性名を設定します。 3.9.3.5 用法 フォームが含まれるダイナミックファンクションエレメントをコンテナーページにドロップします。 サイトマップエディターの「ページ作成」を開きます。 「Function pages」タブから設定済みのファンクション詳細ページを、モデルページとしてナビゲーションに加えま す。 3.9.4 Navigation level 「Navigation level」は特殊なフォルダーです。フォルダーへのアクセス({XXX}/index.html)は、サイトマップエディター上 で最上位に表示されるファイルまたはフォルダーにリダイレクトされます(※「NavPos」プロパティの一番小さい値のも の)。もし、インデックスページなしで一つのフォルダーの中にいくつかのサブページをリストしたい場合、このオプショ ンを使います。 ナビゲーションレベルのデモを参照します。 3.9.4.1 使用例 ウェブサイトには、製品説明のリストがあり、それは製品の下のナビゲーションの中にリストされています。ユーザーが 製品フォルダーを選択したとき、一番初めの製品が選択されます。インデックスページはありません。また、製品の順 番が変更された後は、リストの一番初めの製品が表示されます。これは、ナビゲーションレベルの最初のサブページ に自動的にリダイレクトするものです。 3.9.4.2 「Navigation level」を使用 サイトマップエディターの「Function pages」タブを開きます。 © ubicast Co. Ltd. Page 18 of 78 サイトマップに「Navigation level」をドラッグ&ドロップします。 「Navigation level」のコンテクストメニューから「サブ・ページ作成」クリックしてページを作成します。 3.9.4.3 実装詳細 <cms:navigation>タグは「Navigation level」を完全にサポートします。「Navigation level」へのリンクを通常の方 法で 構築します。クラス「CmsJspNavElement」と「CmsJspNavBuilder」は自動的に「Navigation level」を認 識し、リストのなかの最初のアイテムへのリンクを直接生成します。 クラス「CmsJspNavElement」 は ナビゲーションの中の「Navigation level」を認識するあたらしい方法を提供しま す。この情報はたとえば、スタイルシートなどに有用です。以下の例では、ナビゲーションのなかで選択されたページ の場合、クラス指定「current」をレンダリングし、ナビゲーション中のラベルハイライト表示する為に使用されます。 例 <cms:navigation type="treeForFolder" startLevel="1" endLevel="4" var="nav"/> <c:forEach items="${nav.items}" var="elem"> […] <c:set var="link"><cms:link>${elem.resourceName}</cms:link></c:set> <a href="${link}" <c:if test="${nav.isActive[elem.resourceName] and !elem.navigationLevel }"> class="current" </c:if> >${elem.navText}</a> […] </c:forEach> 完全なナビゲーションの JSP は、以下をチェックして下さい。 github 上の例を参照します。 3.9.5 Hide in navigation 「Hide in navigation」とは、CmsJspNavBuilder で作られたナビゲーションメニューの中で見えないコンテナーペー ジまたは他のページです。 3.9.5.1 説明 リソースは、ウェブサイトのナビゲーションメニューの中に表示させず、サイトマップから隠すことができます。隠れたペ ージは、サイトマップエディターでは表示され、編集することができます。 © ubicast Co. Ltd. Page 19 of 78 この特徴は、以下のような状態であるページに有用だと考えられます。 コンタクトページや検索や位置情報ページのように、あらかじめ定義されているページから直接アクセスされるペ ージ リソースの詳細ページ 3.9.5.2 利用法 サイトマップを開きます。 コンテクストメニューを開き、「Hide in navigation」を選択します。 コンテクストメニュー 「Show in navigation」 を使い、ナビゲーションプロパティを有効にします。 © ubicast Co. Ltd. Page 20 of 78 コンテンツエディター OpenCms 8.5 のコンテンツエディターは、使いやすさとスピードのために HTML 5 で完全に書き直されました。このエ ディターはコンテンツタイプのストラクチャーを記述する XML スキーマに基づいて自動的に生成されます。これはコン テンツ管理者のために豊かなユーザーインターフェイスを提供し、XML スキーマに基づいた XML ファイルを生成しま す。生成された XML は OpenCms レポジトリに保存されます。 コンテンツエディターの主な特徴: クライアントサイドで実行し、レスポンスの良い非常に高いユーザーエクスペリエンスを提供します。 自動的に xml スキーマから生成され、必要なプログラミングを行います。 豊かなユーザーインターフェイス(ウィジェット)を多数提供します。 特別なケースにはカスタムのユーザーインターフェイス(ウィジェット)に拡張することが可能です。 XML スキーマに対して妥当なコンテンツ生成し、データベースに保存します。 © ubicast Co. Ltd. Page 21 of 78 インラインエディター インライン編集は OpenCms 8.5 で導入された新しい機能で、これはページ編集のユーザーエクスペリエンスを改善 します。 インライン編集ではコンテンツ管理者がコンテンツを直接ブレビューページで変更することができます。フォー ムベースのコンテンツエディターは通常通りにリソースのコンテンツ全体を編集することに使用できます。カーソルをテ キストの上に動かしたときにインライン編集が可能で、編集カーソルが現れます。 インライン編集フィールドをクリックすると、ハイライトされ、オプションでフォーマットツールバーが現れます。 インライン編集のデモを参照します。 インライン編集をサポートする領域 インライン編集は OpenCmsString と HtmlWidge タイプのコンテンツ領域で可能です。 将来のバージョンではこのリ © ubicast Co. Ltd. Page 22 of 78 ストを増やしてゆく予定です。 設定 インライン編集はフォーマッタ JSP の中で設定されます。リソースタイプのそれぞれのフォーマッタは それ自身の挙 動を規定します。例えば、記事はセンターカラムにもサイドカラムにもドロップできますが、エディターはセンターカラム の記事だけを編集できるべきです。これを実現するには、センターカラムコンテナー用のフォーマッタのみがインライン 編集を可能にするべきです。 5.2.1 フォーマッタ Title 項目 をもった xmlcontent があります。この xmlcontent 項目のためのインライン編集機能 はフォーマッタ jsp の なかで、以下の設定を行います。 1.インライン編集を可能にするために、属性 rdfa="rdfa"を<cms:formatter>タグに加えます。 <cms:formatter var="value" rdfa="rdfa" /> 2.値を囲んでいるエレメントの属性に${rdfa.フィールド名}を加えます。 <span ${rdfa.Text}>${value.Text}</span> 5.2.2 ネストしているコンテンツ EL では、ネストされた(入れ子にされた)コンテンツフィールドは、以下の例のようにアクセスできます: <cms:formatter var="content" val="value" rdfa="rdfa"> <c:forEach items="${content.valueList.Paragraph}" var="paragraph"> <h2>${paragraph.value.Headline}</h2> <span>${paragraph.value.Text}</span> </c:forEach> </cms:formatter> ${content.valueList.Paragraph} はCmsJspContentAccessValueWrapperオブジェクトのリストを戻 します。 ${paragraph.value.Headline} と${paragraph.value.Text}はネストされた項目の値にアクセスします。 インライン編集に必要な css 属性を出力するには、.valueをrdfa に置換します。インライン編集を可能にするため に、${paragraph.rdfa.Headline}と${paragraph.rdfa.Text}をフィールドコンテンツを囲んでいる HTML タグに加えます: <cms:formatter var="content" val="value" rdfa="rdfa"> <c:forEach items="${content.valueList.Paragraph}" var="paragraph"> <h2 ${paragraph.rdfa.Headline}>${paragraph.value.Headline}</h2> <span ${paragraph.rdfa.Text}>${paragraph.value.Text}</span> </c:forEach> </cms:formatter> 5.2.3 詳細 <cms:formatter>タグの rdfa 属性は val 属性と同じように使用されます。コンテンツが Title という名前のフ ィールドを持っていると想定します。EL 式${rdfa.Title}は、コンテンツフィールドのインライン編集を可能にする ために必要な特定の css 属性を獲得します。これにより自動的に生成された css 属性は HTML エレメントの属性とし て設定され、フィールドコンテンツを囲みます。また、インライン編集機能は、cms:stripHtml()、または、 cms:trimToSize()とともに JSP によって操作されたされたフィールドコンテンツには適用できません。 © ubicast Co. Ltd. Page 23 of 78 エレメントグループ エレメントグループは OpenCms8 の新しいリソースタイプで、コンテンツエレメントのグループを参照します。 Element group(エレメントグループ)デモを参照します。 説明 エレメントグループは、継承グループと似たコンテンツエレメントで、ユーザーはこの中に他のエレメントをドロップする ことができます。ユーザーはこのグループの中のエレメントを編集、削除、置換することが可能で、また順序の変更もで きます。エレメントグループにおけるすべての変更は、そのエレメントグループがドロップされたすべてのコンテナーペ ージに影響します。 モデルページとの組み合わせ エレメントグループの最も一般的なケースは、モデルページとの組み合わせです。以下で述べるような効果をサイト上 で得たい場合は、エレメントグループをモデルページの適切なコンテナーにドロップし、エレメントグループの中のエレ メントを編成します。 ● 作成したすべてのページに共通のコンテンツパートが表示されます。例:ヘッダー、フッター、サイドコラム ● これらのコンテナーの中で将来行われるすべての変更が、このページモデルを使っているすべ てのページに有効になります。例としては、 ○ 編集 ○ 新規エレメントのドロップ ○ エレメント削除 ○ エレメントの順序の変更 エレメントグループの使用 ● 「コンテンツ追加」ダイアログからの他のコンテンツと同様に、エレメントグループをコンテナーページ にドロップします。 ● 編集アイコンをクリックして、エレメントグループエディターを開きます。エレメントグループダイアログはオ ーバーレイの中に開き、そこでタイトルとエレメントグループの記述を編集できます。 ● エレメントグループが編集されている間、 ADE ツールバーはアクティブであり、通常通り使用できます。 © ubicast Co. Ltd. Page 24 of 78 ● 「コンテンツ追加」ダイアログからエレメントグループに新規エレメントをドラッグ&ドロップします。 ● エレメントグループにすでに存在するエレメントを編集または削除します。 ● グループ内のエレメントを再整列します。 ● エレメントグループエディターの OK ボタンをクリックして、すべての変更を保存します。 © ubicast Co. Ltd. Page 25 of 78 エレメントグループでのエレメントへのすべての変更、たとえば、編集、エレメンツの削除、エレメントのグループ内での移 動、エレメントの設定変更などはこのページモデルを使用しているすべてのページに適用されます。 © ubicast Co. Ltd. Page 26 of 78 継承グループ 継承グループは、OpenCms8.5 のコンテナーページで利用できる新しいコンテンツタイプです。 説明 継承グループはコンテンツエレメントのセットを ひとつのオブジェクトとしてページにドロップできるという点でエレメント グループと似ています。しかし、エレメントグループは特定の一部のページに対してだけにエレメントの内容を変更する ことが出来ません。エレメントグループに変更を加えるときは、その変更はそのエレメントグループを使用しているすべ てのページに反映されてしまいます。この問題を継承グループが解決します。 あるページで継承グループを変更するとき、その変更はそのページとそのページの親フォルダーの配下のページ だけに反映されます。言い換えると、変更は子ページのグループに“継承”されますが、それ以外のどこにも継承され ません。例えば、あなたがテンプレートの右コラムのために継承グループを定義したいとき、サイト上のすべての場所 で見たいいくつかの共通コンテンツを定義し、そしてさらにより特定のコンテンツをサイトのサブセクションそれぞれの ために追加します。 基本的な定義 もし、a.html の親フォルダーが直接/間接的に b.html の親フォルダーのサブフォルダーであれば、コンテナーページ a.html を別のコンテナーページ b.html の継承ページとよびます。 反対に、b.html を a.html の先祖ページと呼びます。 /d1/b.html a.html の先祖ページ /d1/a.html b.html の継承ページ /d1/d2/a.html b.html の継承ページ /d1/d2/d3/a.html b.html の継承ページ /d4/c.html b.html の継承ページでは無い コンテナーページを編集するとき、そのページの親フォルダーを現在のフォルダーとよびます。これは重要です。なぜ なら、継承グループデータは、個々のコンテナーページにではなく、フォルダーに属したデータだからです。その為、 同じフォルダーの中のコンテナーページは、同じ継承グループであるため、違うコンテンツを持つことはできません。 使用法 7.3.1 新規に継承グループを作成する 「コンテンツ追加」をクリックし、ギャラリーダイアログを開き、「タイプ」タブから、「Inheritance group」をページ上にドラ ッグすることで、コンテナーページの中に新規の継承グループを作成することができます。他のリソースと同様に、一 旦、それを編集すれば、継承グループは VFS の中に作成されます。 7.3.2 既存の継承グループを使う 存在する継承グループをコンテナーページで使用するには、ギャラリーメニューを開き、タイプ「継承グループ」 を選び ます。 一度作成されると、継承グループはコンテナーページの上に自由にドロップできます。 7.3.3 継承グループを変更する 継承グループを編集するには、まず、継承グループを含んでいるコンテナーページを開く必要があります。 継承グル ープのエディットポイントの上にマウスオーバーし、編集シンボルをクリックします。すると、継承グループエディターが ポップアップします。これで様々なアクションを実行できます。 © ubicast Co. Ltd. Page 27 of 78 7.3.3.1 タイトルとデスクリプションを変更する ダイアログのテキストフィールドを使って、継承グループのタイトルとデスクリプションを変更することができます。 継承 グループを表示している間、タイトルとデスクリプションは表示されませんが、それらは主にギャラリーダイアログを使っ て継承グループを見つけるために使われます。 7.3.3.2 コンテンツエレメントを追加する 継承グループに新しいコンテンツエレメントを追加するには、追加コンテンツダイアログを開き、それを継承グループの 中ラッグします。 © ubicast Co. Ltd. Page 28 of 78 新規エレメントをページ上の継承グループに追加するとき、新規エレメントはすべての派生ページの同じ継承グループ に継承されること留意してください。デフォルトにより、新規エレメントは派生ページの継承グループの下部に現れます。 7.3.3.3 コンテンツエレメントを削除する 継承グループエディターの「削除」アイコンをクリックすると、どこの継承グループにコンテンツエレメントが追加されて いるかにより、挙動が異なります。 たった今編集されたページ内の継承グループ、または、現在のフォルダーの中のいずれかのページ内の継承グループ に追加されたコンテンツエレメントならば、単に継承グループから削除され、どんな派生ページの継承グループにもコン テンツエレメントは現れません。しかし、先祖フォルダーの継承グループに追加されたコンテンツエレメントならば、コン テンツエレメントは隠され、そしてまた派生ページの継承グループでも隠されます。しかし、先祖ページのコンテンツエ レメントは影響を受けません。違いは、隠されたエレメントは派生ページの中で再び「見える」ように設定できることで す。 7.3.3.4 コンテンツエレメントを並び替える 継承グループは ドラッグ&ドロップで再度並び替えできます。継承グループの中での並べ換えには、ただ移動アイコ ンでエレメントをドラッグして並べ替えます。 7.3.3.5 継承ステータス もし継承グループのエレメントが現在のフォルダーに加えられていないなら、ツリー型の「継承情報」アイコンがエレメ ントのトグルメニューから利用可能です。マウスをこのアイコンの上におくと、どのフォルダーからこのエレメントが継承 フォルダーに追加されたのかが分かります。 © ubicast Co. Ltd. Page 29 of 78 7.3.3.6 隠されているエレメントを表示する 継承グループエディターの「Show removed」ボタンは先祖フォルダーの中の継承グループから隠されていたエレメント を表示します。他のエレメントと区別するために、斜線で表示されます。そして、表示したいエレメントの「エディットポイ ント」にマウスオーバーし、「追加」ボタンをクリックします。 7.3.3.7 保存 継承グループへのすべての変更は、「保存」ボタンをクリックした場合にのみ有効になります。そして、継承グループエ ディターはクローズします。 7.3.3.8 Break up(ブレークアップ) 「Break up」ボタンをクリックすると、継承グループは、グループコンテナーの場合と同じように、コンテナーページ の中に個々のコンテンツエレメントで置き換えられます。このアクションは、「保存」ボタンを押したあとではなく、即 時に有効になることに留意してください。 © ubicast Co. Ltd. Page 30 of 78 7.3.3.9 編集設定 他のコンテナーページエレメントと同様に、継承グループエレメントのエレメント設定は編集できます。しかし、エレメン ト設定は、そのエレメントが現在のフォルダーの継承グループに加えられた場合にのみ、エレメントについて変更でき ることに留意してください。もし、エレメントが別のフォルダーの継承グループに加えられていた場合(先祖ページ等)は、 エレメント設定を編集するオプションは表示されません。 インターナル 継承グループの実装に使われるふたつのリソースタイプがあります。「inheritance_group」タイプと 「inheritance_config」タイプです。「inheritance_group」は、新しい継承グループ、または、存在する継承グループを ギャラリーからページにドラッグするときに、コンテナーページに実際に挿入したコンテンツのタイプです。 これらはこれ らが表す継承グループの内部 id だけを含みます。 「inheritance_config」タイプのリソースは継承グループの実際のコンテンツを含みます。フォルダーのための継承グル ープ変更は同じフォルダーの中に含まれている「.inherited」という名前のファイル(「inheritance_config」タイプのファ イル)に保存されます。ひとつのフォルダーにつき、ひとつのファイルだけが使われるので、複数の継承グループのデ ータは同じファイルに保存されます。 この config ファイルのコンテンツは手作業で編集しなければなりません。 © ubicast Co. Ltd. Page 31 of 78 コレクター シンプルなコレクターのデモを参照する。 実装 <cms:collector>タグとともに使うことのできるコレクターを開発する際、新しいコレクターは、 I_CmsResourceCollector インターフェースを実装するべきです。org.opencms.file.collectors パッケ ージはすでに A_CmsResourceCollector をもつこのインターフェースの標準実装を提供しています。固有のコレ クターを開発する場合は、このクラスを拡張してください。 以下のメソッドを実装する必要があります。 List<String> getCollectorNames(); getCollectorNames()は、ひとつまたは複数のコレクター名をストリングのリストとして返却します。 String getCreateLink(CmsObject cms, String collectorName, String param)throws CmsException, CmsDataAccessException; getCreateLink(CmsObject, String, String)は、コレクターから生成されたリスト上の「新規」ボタン(直接 編集)をクリックした場合の実行すべきリンクを返却します。このメソッドが null を返却した場合、それは選択したコレ クター実装が「リンク作成」、をサポートしていないことを意味するので、「新規」ボタンはこのコレクターによって生成さ れたリストの上には現れません。 String getCreateParam(CmsObject cms, String collectorName, String param)throws CmsDataAccessException; getCreateParam(CmsObject,String,String)は getCreateLink(CmsObject,String,String)に 渡されなければならないパラメータを返却します。このメソッドが null を返却した場合、選択したコレクター実装は「リ ンク作成」をサポートしていないことを意味するので、「新規」ボタンはこのコレクターによって生成されたリストの上に は現れません。 List<CmsResource> getResults(CmsObject cms, String collectorName, String param)throws CmsDataAccessException, CmsException; getResults(CmsObject, String, String)は指定されたコレクターを使って org.opencms.file.CmsResource オブジェクトのリストを返却します。 設定 opencms-vfs.xml を編集し、以下の行を<collectors>ノードに追加し、その後サーブレットコンテナーをリスタ ートします。 <collector class="org.opencms.dev.demo.CmsSimpleResourceCollector" order="180" /> JSP ファイルのコレクターの使用 リソースを集めるには、<cms:contentload>タグを使います。 <cms:contentload collector="…" param="…" editable="true"> <cms:contentaccess var="content" />… </cms:contentload> このタグは以下のパラメータが必要です。 collector – コレクターの名前 param – コレクターパラメータ、標準パラメータシンタックスは次の通りです: © ubicast Co. Ltd. Page 32 of 78 [path]|[resource type]|[count] editable – true に設定すると、リストの直接編集オプションが使用可能になります。 <cms:contentaccess var="content"/>で、イテレーションの中の現在のエレメントの CmsXmlContent に アクセスします。 <%@page buffer="none" session="false" taglibs="c,cms" %> <%-- The JSP HTML should be surround by block element --%> <div> <%-- Read collector parameter,e.g. from request --%> <c:set var="folder" value="${param.folder}" /> <c:set var="type" value="${param.type}" /> <c:set var="count" value="${param.count}" /> <ul> <%-- Use <cms:contentload> with new collector --%> <cms:contentload collector="myCollector" param="${folder}|${type}|${count}"> <%-- Access the content --%> <cms:contentaccess var="content" /> <c:set var="link"><cms:link>${content.filename}</cms:link></c:set> <li><a href="${link}">${content.value.Title}</a></li> </cms:contentload> </ul> </div> リストをドロップ可能にする コンテナーページに JSP を直接ドロップする一般的な方法は、ダイナミックファンクションを使うことです。 ● 新規ダイナミックファンクションを作成する。通常、このリソースタイプは、モジュールの一部であり、 /system/modules/mymodule/functions/の中に作成します。 ● Dev Demo モジュールの中では、 コレクター JSP は以下のフォルダー内にあります。 /system/modules/org.opencms.dev.demo/functions/ ● 「myCollector」を含んでいる JSP を選択します。Dev Demo 内では、以下の jsp です: /system/modules/org.opencms.dev.demo/pages/collector.jsp ● コレクターパラメータを定義するためには、ダイナミックファンクションの中に初期リクエストパラメー タを設定します。これらのパラメータは、collector.jsp の中で使われています。: ○ ○ folder=/dev-demo/collector-with-detail-page/.content/article/ type=ddarticle ○ count=5 ADE 内のコンテナーページを開き、新しいダイナミックファンクションをコンテナーページの中にドロップすることができ ます。 コレクターのある詳細ページを使用します ● サイトマップエディターに行き、ダイアログを開きます。 ● コレクターのために設定されたリソースタイプのために、「タイプページ」タブからページをトラッグ します。 ● OpenCms は新しい詳細ページをサブサイトマップのために自動的に設定します。 リソースを開くためにリンクをクリックすると、リソースの詳細ページが開きます。 このリストの中では詳細ページ url が © ubicast Co. Ltd. Page 33 of 78 使われています。 コードの例 シンプルなコレクタークラス JSP の例: CmsSimpleResourceCollector.java simple-collector.jsp © ubicast Co. Ltd. Page 34 of 78 XSD 選択エレメント OpenCms では、XSD 選択エレメントは XML スキーマ定義を拡張します。XSD 選択は OpenCms タイプのひとつま たは複数の選択を任意の順序で提供します。この章では、XSD の中での選択エレメントの使い方と EL で JSP 内の 値にアクセスする方法を紹介します。 定義 <xsd:choice>ノードは、OpenCms タイプを記述するために、<xsd:sequnce>と同様に使うことができます。 こ れはネストされた XML コンテンツの XML スキーマ定義の中で定義する必要があります。ルートスキーマの中の要素 は、optional でなくてはなりません。 属性 minOccurs="0"要素に加えて、これを optional にします。ルート xml のスキーマ定義: <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:include schemaLocation="opencms://opencms-xmlcontent.xsd" /> <xsd:include schemaLocation="opencms://system/modules/org.opencms.dev.demo/schemas/nested/options.xsd" /> <xsd:element name="DevDemoSettingsArticles" type="OpenCmsDevDemoSettingsArticles" /> <xsd:complexType name="OpenCmsDevDemoSettingsArticles"> <xsd:sequence> <xsd:element name="DevDemoSettingsArticle" type="OpenCmsDevDemoSettingsArticle" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="OpenCmsDevDemoSettingsArticle"> <xsd:sequence> <xsd:element name="Title" type="OpenCmsString" /> <xsd:element name="Options" type="OpenCmsDevDemoTextOption" minOccurs="0" maxOccurs="1" /> <xsd:element name="Image" type="OpenCmsVfsFile" /> </xsd:sequence> <xsd:attribute name="language" type="OpenCmsLocale" use="optional" /> </xsd:complexType> … </xsd:schema> <xsd:choice>ノードを使い、選択の要素を定義します。エレメント、選択オプションである<xsd:choice>を定義 するものも optional である必要があります。 <xsd:choice>のあるネストされた XML スキーマ定義: © ubicast Co. Ltd. Page 35 of 78 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:include schemaLocation="opencms://opencms-xmlcontent.xsd"/> … <xsd:complexType name="OpenCmsDevDemoTextOption"> <xsd:choice minOccurs="0" maxOccurs="3"> <xsd:element name="Text" type="OpenCmsString" minOccurs="0" /> <xsd:element name="Html" type="OpenCmsHtml" minOccurs="0" /> <xsd:element name="Link" type="OpenCmsVarLink" minOccurs="0" /> </xsd:choice> <xsd:attribute name="language" type="OpenCmsLocale" use="optional"/> </xsd:complexType> </xsd:schema> ひとつまたは複数の選択 <xsd:choice>エレメントは、単数、及び、複数の選択として使用できます。単数選択を使用するためには、 <xsd:choice>ノード上でどんな属性も使用できません。これはデフォルト設定です。 複数選択を使用する場合、以下の属性を設定します。: minOccurs="0" と maxOccurs="[max number of elements]"、例:maxOccurs="5" 単一選択: <xsd:choice> <xsd:element name="VariableLink" type="OpenCmsVarLink" minOccurs="0" /> <xsd:element name="LinkGallery" type="OpenCmsVfsFile" minOccurs="0" /> <xsd:element name="DownloadGallery" type="OpenCmsVfsFile" minOccurs="0" /> </xsd:choice> 複数選択: <xsd:choice minOccurs="0" maxOccurs="5"> <xsd:element name="VariableLink" type="OpenCmsVarLink" minOccurs="0" /> <xsd:element name="LinkGallery" type="OpenCmsVfsFile" minOccurs="0" /> <xsd:element name="DownloadGallery" type="OpenCmsVfsFile" minOccurs="0" /> </xsd:choice> コンテンツエディター ※複数選択の形式で定義した場合のエディター © ubicast Co. Ltd. Page 36 of 78 JSP の中で値にアクセス <xsd:choice>ノードの要素は、ネストされたコンテンツと同様の方法でアクセスできます。コンテンツ値が読み込ま れる前に、ルートエレメントと選択エレメントが存在することをテストします。ネストされたルート要素の存在の確認は: <c:if test="${value.Options.exists}"> … </c:if> 選択エレメントの値をチェックします。検査には isSet を使います。そのエレメントが存在し、値が空文字でなかった 場合には、 isSet は true が戻ります。 <c:if test="${value.Options.exists && value.Options.value.Text.isSet}"> <div>${value.Options.value.Text}</div> </c:if> 同様に、他の選択エレメントにもアクセスします: ${value.Options.value.Html.exists} ${value.Options.value.Html.isSet} ${value.Options.value.Html} ${value.Options.value.Link.exists} ${value.Options.value.Link.isSet} ${value.Options.value.Link} ネストされたコンテンツの中の選択エレメントの例 (v8InfoBox): © ubicast Co. Ltd. Page 37 of 78 <c:if test="${value.FurtherInfo.value.Link.exists && (value.FurtherInfo.value.Link.value.VariableLink.isSet || value.FurtherInfo.value.Link.value.LinkGallery.isSet || value.FurtherInfo.value.Link.value.LinkGallery.isSet || value.FurtherInfo.value.Link.value.DownloadGallery.isSet)}"> <c:choose> <c:when test="${value.FurtherInfo.value.Link.value.VariableLink.isSet}"> <c:set var="infolink"> ${value.FurtherInfo.value.Link.value.VariableLink} </c:set> </c:when> <c:when test="${value.FurtherInfo.value.Link.value.LinkGallery.isSet}"> <c:set var="infolink"> ${value.FurtherInfo.value.Link.value.LinkGallery} </c:set> </c:when> <c:when test="${value.FurtherInfo.value.Link.value.DownloadGallery.isSet}"> <c:set var="infolink"> ${value.FurtherInfo.value.Link.value.DownloadGallery} </c:set> </c:when> </c:choose> <c:set var="infotext">${infolink}</c:set> ... <div class="boxbody_listentry"> <c:set var="link"><cms:link>${infolink}</cms:link></c:set> <a href="${link}">${infotext}</a><br/> </div> </c:if> ${value.FurtherInfo.value.Link.exists} は選択エレメントの存在をチェックします。 ${value.FurtherInfo.value.Link.value.VariableLink.isSet}は選択エレメントの値をチェックしま す。 例 選択エレメントの使用法の完全な例は、テンプレートⅢと開発デモの中で見ることができます。 1. インフォボックスの中のルート XSD (v8-modules) 2. 追加情報を含むネストされた XSD (v8-modules) 3. 選択エレメントを含むネストされた XSD (v8-modules) 4. フォーマッターJSP (v8-modules) 5. 設定のある記事のルート XSD (dev-demo) 6. 選択エレメントを含んだネストされた XSD (dev-demo) © ubicast Co. Ltd. Page 38 of 78 ADE 設定 サイトマップ設定 ADE の「追加」ダイアログにより、ページがリソースタイプによって構成され、主要な設定は「.content/.config」 ファイルで行います。サブサイトマップのための設定は、サブサイトマップを基点とした「.content/.config」ファイ ルを利用します。 サイトマップ設定ファイルには4つのタブがあります: Resource types(リソースタイプ):リソースタイプの名前、新規作成時のファイル名のパターン、デフォルトフ ォルダー、フォーマッタ(任意)等を定義します。 Model pages(モデルページ):新規のコンテナーページを作成するためにサイトマップエディターによって使 用されるモデルを定義します。 Property configuration(プロパティ設定):ADE の中のプロパティダイアログで表示される「基本プロパティ」 タブで、どのプロパティを表示されるかを定義します。 Detail pages(詳細ページ):サイトマップの中でリソースタイプの個別コンテンツを表示するために使われる 詳細ページを定義します。 モジュール設定 モジュールが新規のリソースタイプ(モジュールのマニフェストで定義された)を OpenCms に追加し、モジュールがイ ンストールされた後にこれを自動的に ADE で使用可能にしたい場合、 タイプ「module_config」の「.config」ファイル をあなたのモジュールのルートフォルダーの中におくことができます。 モジュールコンフィギュレーションファイルは3つのオプションを提供します: Resource types(リソースタイプ):リソースタイプの名前、新規作成時のファイル名のパターン、デフォルトフ ォルダー、フォーマッタ(オプショナル)等を定義します。 Property configuration(プロバティ設定):ADE の中のプロパティダイアログのための「基本プロパティ」タブ の下でどのプロパティが表示されるかを定義します。。 Functions(ファンクション):モジュールとともに送られたダイナミックファンクションを定義します。(少なくとも 識別のための名前と JSP プロバイダーが必要です。) © ubicast Co. Ltd. Page 39 of 78 設定の継承 © ubicast Co. Ltd. Page 40 of 78 Solr 検索の統合 要約 Apache Solr は成長を重ね、今や Lucene をベースにしたエンタープライズプラットフォームと呼ぶことができるよう になりました。これは他に類をみない REST API によるエンタープライズ検索サーバーです。ドキュメントを HTTP 経由で XML、JSON、または バイナリー形式で入力(”インデックス”と呼ばれます)します。これを HTTP GET を通 して問い合わせを行い、 XML, JSON, またはバイナリー形式で結果を受け取ります。 Solr とは正確には何であり、 どのように機能するのかについてのより詳細な知識を得るには、 Apache Solr プロジェクトのウェブサイトを参照く ださい。このバワフルでフレキシブルな Apache Solr の REST のようなインターフェースで検索することは、 開発の 手間を軽減します。さらに、AJAX ベースの快適な検索機能性を有する GUI をインターネット/イントラネットアプ リケーションのエンドユーザーに提供することができます。 OpenCms でコンテンツを探す OpenCms 8.5 は Apache Solr を統合します。そして、フルテキスト検索だけでなくパワフルなエンタープライズ検 索プラットフォームでもあります。 11.2.1 デモ OpenCms v8 モジュールはオープンソースの UI Ajax Solr を使い、 Solr をベースにした OpenCms 検索デモンス トレーション を提供しています。 (Ajax Solr Project on github.com): ここをクリックして OpenCms ソーラ検索デモを実行する。 11.2.2 クイックスタートの例 11.2.2.1 REST のようなクエリーを送る 最終更新日が昨日から今日の間であり、プロパティ’X’の値’Y’をもつ全ての記事を表示すると想定します。 http://localhost:8080/opencms/opencms/handleSolrSelect? fq=type:v8article &fq=lastmodified:[NOW-1DAY TO NOW] &fq=Title_prop:Flower パラメータの説明 http://localhost:8080/opencms/opencms/handleSolrSelect // The URI of the OpenCms Solr Select Handler configured in 'opencms-system.xml' ?fq=type:v8article // Filter query on the field type // with the value 'v8article' &fq=lastmodified:[NOW-1DAY TO NOW] // Filter query on the field lastmodified // with a range query from 'NOW-1DAY TO NOW' &fq=Title_prop:Flower // Filter query on the field Title_prop // with the value 'Flower' 注:Solr クエリー構文 Solr のクエリー構文について、一般的な概要は Solr query syntax を参照して下さい。 より高度な機能については、 Searching - Solr Reference Guide - Lucid Imagination が役立ちます。 Solr のクエリー構文で使用する多数の記号(もっとも顕著なのがプラス記号: "+")が URL では特別な記号であり、 手動で URL リクエストを構築している場合、それらの記号を適切に URL エンコードしなければならないことに留意 して下さい。 © ubicast Co. Ltd. Page 41 of 78 q= +popularity:[10 TO *] +section:0 http://localhost:8983/solr/select?q=%2Bpopularity:[10%20TO%20*]%20%2Bsection:0 詳細は Nested Queries in Solr の Yonik Seeley のブログを参照してください。 新たな OpenCms Solr リクエストハンドラーには、「Solr の有効な」値を渡すことができます(handleSolrSelect)。 Solr クエリー構文については Solr Wiki ページが役立ちます。: Search and Indexing 11.2.2.2 レスポンスを取得する Solr によって作成されたレスポンスは、デフォルトで XML または JSON になります。 追加パラメータ'wt'で、 Solr に使われる QueryResponseWriter を指定することができます。前述の問い合わせ例では、結果は以下のよ うになります。 <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">7</int> <lst name="params"> <str name="qt">dismax</str> <str name="fl">*,score</str> <int name="rows">50</int> <str name="q">*:*</str> <arr name="fq"> <str>type:v8article</str> <str>contentdate:[NOW-1DAY TO NOW]</str> <str>Title_prop:Flower</str> </arr> <long name="start">0</long> </lst> </lst> <result name="response" numFound="2" start="0"> <doc> <str name="id">51041618-77f5-11e0-be13-000c2972a6a4</str> <str name="contentblob">[B:[B@6c1cb5</str> <str name="path">/sites/default/.content/article/a_00003.html</str> <str name="type">v8article</str> <str name="suffix">.html</str> <date name="created">2011-05-06T15:27:13Z</date> <date name="lastmodified">2011-08-17T13:58:29Z</date> <date name="contentdate">2012-09-03T10:41:13.56Z</date> <date name="relased">1970-01-01T00:00:00Z</date> <date name="expired">292278994-08-17T07:12:55.807Z</date> <arr name="res_locales"> <str>en</str> <str>de</str> </arr> <arr name="con_locales"> <str>en</str> </arr> <str name="template_prop"> /system/modules/com.alkacon.opencms.v8.template3/templates/main.jsp</str> <str name="style.layout_prop">/.content/style</str> <str name="NavText_prop">OpenCms 8 Demo</str> <str name="Title_prop">Flower Today</str> <arr name="content_en"> © ubicast Co. Ltd. Page 42 of 78 <str>News from the world of flowers Flower Today In this [...]</str> </arr> <date name="timestamp">2012-09-03T10:45:47.055Z</date> <float name="score">1.0</float> </doc> <doc> <str name="id">ac56418f-77fd-11e0-be13-000c2972a6a4</str> <str name="contentblob">[B:[B@1d0e4a2</str> <str name="path">/sites/default/.content/article/a_00030.html</str> <str name="type">v8article</str> <str name="suffix">.html</str> <date name="created">2011-05-06T16:27:02Z</date> <date name="lastmodified">2011-08-17T14:03:27Z</date> <date name="contentdate">2012-09-03T10:41:18.155Z</date> <date name="relased">1970-01-01T00:00:00Z</date> <date name="expired">292278994-08-17T07:12:55.807Z</date> <arr name="res_locales"> <str>en</str> <str>de</str> </arr> <arr name="con_locales"> <str>en</str> </arr> <str name="template_prop"> /system/modules/com.alkacon.opencms.v8.template3/templates/main.jsp </str> <str name="style.layout_prop">/.content/style</str> <str name="NavText_prop">OpenCms 8 Demo</str> <str name="Title_prop">Flower Dictionary</str> <arr name="content_en"> <str>The different types of flowers Flower Dictionary There are [...]</str> </arr> <date name="timestamp">2012-09-03T10:45:49.265Z</date> <float name="score">1.0</float> </doc> </result> </response> 11.2.2.3 Java-API で問い合わせを行う String query="fq=type:v8article&fq=lastmodified:[NOW-1DAY TO NOW]&fq=Title_prop:Flower"; CmsSolrResultList results = OpenCms.getSearchManager().getIndexSolr("Solr Online Index").search(getCmsObject(), query); for (CmsSearchResource sResource : results) { String path = searchRes.getField(I_CmsSearchField.FIELD_PATH); Date date =searchRes.getMultivaluedField(I_CmsSearchField.FIELD_DATE_LASTMODIFIED); List<String> cats = searchRes.getMultivaluedField(I_CmsSearchField.FIELD_CATEGORY); } クラス org.opencms.search.solr.CmsSolrResultList は'OpenCms resource documents'(CmsSearchResource)のリストをカプセル化します。 このリストは、そのエントリーが CmsSearchResource であり CmsResource を拡張する ArrayList とまったく 同様にアクセスでき、そして、メンバーとして I_CmsSearchDocument の Solr 実装を保持します。 これは、結果リ ストを List と同じやりかたで扱い、そのエントリーを CmsResource と同じやり方で作業することを可能にしていま す。 © ubicast Co. Ltd. Page 43 of 78 11.2.2.4 Solr の問い合わせで CmsSolrQuery クラスを使用する CmsSolrIndex index = OpenCms.getSearchManager().getIndexSolr("Solr Online Index"); CmsSolrQuery squery = new CmsSolrQuery(getCmsObject(), "path:/sites/default/xmlcontent/article_0001.html"); List<CmsResource> results = index.search(getCmsObject(), squery); 11.2.3 11.2.3 アドバンスサーチ機能 オートサジェスト/入力/訂正:http://wiki.apache.org/solr/Suggester ファセット検索:http://wiki.apache.org/solr/SimpleFacetParameters ハイライト:http://wiki.apache.org/solr/HighlightingParameters 範囲クエリー:http://wiki.apache.org/solr/SolrQuerySyntax ソート:http://wiki.apache.org/solr/CommonQueryParameters スペルチェック: http://wiki.apache.org/solr/SpellCheckComponent シソーラス/類義語: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters 11.2.3.1 複数のコア(インデックス)に問い合わせを行う 「コア」 はいくつかのインデックスを考えるための Solr の用語です。正確な表現をすれば、インデックスのかわ りにコアと言います。異なるアプリケーション間で全てのデータを管理する単一の Solr サーバーが必要な場合、 複数のコアが必須となります。詳細は Solr Core Administration を参照してください。そこで複数の Solr コアを 設定したとして、問い合わせを行う場合にどのコア/インデックスを検索したいのかを Solr/OpenCms に指示し なくてはなりません。これは特別なパラメータで行われます: http://localhost:8080/opencms/opencms/handleSolrSelect? // The URI of the OpenCms Solr Select Handler // configured in 'opencms-system.xml' &core=My Solr Index Name // Searches on the core with the name 'My Solr Index Name' &q=content_en:Flower // for the text 'Flower' 11.2.4 標準の OpenCms Solr コレクターを使用する OpenCms version 8.5 は 単純なクエリー文字列を指定する byQuery、クエリー文字列とユーザーのリクエストコ ンテキストを使用できる byContext を標準 Solr コレクターとして提供しています。このコレクターを実装しているク ラスは org.opencms.file.collectors.CmsSolrCollector にあります。 © ubicast Co. Ltd. Page 44 of 78 <cms:contentload collector="byQuery" preload="true" param="fq=parent-folders:/sites/default/&fq=type:ddarticle&sort=lastmodified desc"> <cms:contentinfo var="info" /> <c:if test='${info.resultSize != 0}'> <h3>Solr Collector Demo</h3> <cms:contentload editable="false"> <cms:contentaccess var="content" /> <%-- Title of the article --%> <h6>${content.value.Title}</h6> <%-- The text field of the article with image --%> <div class="paragraph"> <%-- Set the requied variables for the image. --%> <c:if test="${content.value.Image.isSet}"> <%-- Output of the image using cms:img tag --%> <c:set var="imgwidth">${(cms.container.width - 20) / 3}</c:set> <%-- Output the image. --%> <cms:img src="${content.value.Image}" /> </c:if> ${cms:trimToSize(cms:stripHtml(content.value.Text), 300)} </div> <div class="clear"></div> </cms:contentload> </c:if> </cms:contentload> OpenCms コンテンツのインデックス作成 11.3.1 検索設定 OpenCms でのシステム全体における検索設定は'opencms-search.xml' で行われます。 (<CATALINA_HOME>/webapps/<OPENCMS_WEBAPP>/WEB_INF/config/opencms-search.xml) 11.3.1.1 組込み/HTTP Solr サーバー OpenCms のバージョン 8.5 から、による新たなオプションノード(XPath: opencms/search/solr)が使用可能 になりました。単に OpenCms に組み込まれた Solr サーバーを使用可能にするには、opencms-search.xml を以下のように編集します: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE opencms SYSTEM "http://www.opencms.org/dtd/6.0/opencms-search.dtd"> <opencms> <search> <solr enabled="true"/> [...] </search> </opencms> オプションとしては、Solr のホームディレクトリと Solr の設定ファイル名が指定できます。OpenCms はこれらふたつ のパスから<solr_home><configfile>にコンタクトします。この設定例は以下のようになります: <solr enabled="true"> <home>/my/solr/home/folder</home> <configfile>rabbit.xml</configfile> </solr> システム全体で Solr を使用不可能にするには、<solr/>-ノードを削除するか、’enabled’属性を’false’にしま す。 © ubicast Co. Ltd. Page 45 of 78 <solr enabled="false"/> 外部の HTTP Solr サーバーと接続するためには<solr enabled="true"/>の行をを以下のように書き換えます。 <solr enabled="true" serverUrl="http://mySolrServer" /> OpenCms の SolrSelect リクエストハンドラーは外部の HTTP Solr サーバーをサポートしません。しかし HTTP Solr サーバーが直接 http://<your_server>に接続できる場合、権限のチェックは行われずインデックス化 されたデータにアクセスできます。これは OpenCms の VFS であなたが権限を設定したリソースに対して責任が あることを意味します。しかし org.opencms.search.solr.CmsSolrIndex.search(CmsObject, SolrQuery) または org.opencms.search.solr.CmsSolrIndex.search(CmsObject, String)を使用して、HTTP Solr サーバーの権限をチェックすることもできます。OpenCms の将来のバージョンでは、Solr サーバーへの安全なア クセスする機能がつくでしょう。 11.3.1.2 検索インデックス OpenCms にはデフォルトとして"Solr Online"インデックスがあります。新規のインデックスを追加するためには、 デフォルト設定をコピーテンプレートとして使えます。 <index class="org.opencms.search.solr.CmsSolrIndex"> <name>Solr Online</name> <rebuild>auto</rebuild> <project>Online</project> <locale>all</locale> <configuration>solr_fields</configuration> <sources> <source >solr_source< /source > </sources> </index> 11.3.1.3 インデックスソース Solr のインデックスソースは、Lucene インデックスの場合とまったく同じ方法で opencms-search.xml ファイルで 設定できます。 XML コンテンツのために高度な XSD フィールドマッピングを使うには、新しいドキュメントタイプ xmlcontent-solrをインデックス化されたドキュメントタイプのリストに加えなくてはなりません。 © ubicast Co. Ltd. Page 46 of 78 <indexsource> <name>solr_source</name> <indexer class="org.opencms.search.CmsVfsIndexer"/> <resources> <resource>/sites/default/</resource> </resources> <documenttypes-indexed> <name>xmlcontent-solr</name> <name>containerpage</name> <name>xmlpage</name> <name>text</name> <name>pdf</name> <name>image</name> <name>msoffice-ole2</name> <name>msoffice-ooxml</name> <name>openoffice</name> </documenttypes-indexed> </indexsource> 11.3.1.4 新しいドキュメントタイプ OpenCms バージョン 8.5 では、xmlcontent-solr とよばれる新しいドキュメントタイプがあります。 この実装 (CmsSolrDocumentXmlContent) はローカライズされたコンテンツを取り出し、これはのちに Solr インプット ドキュメントとして利用されます。 XML コンテンツのためのカスタムフィールドのセクションで説明した通り、XML リ ソースタイプの XSD の中で定義された要素と Solr ドキュメントのフィールドの間でマッピングを定義することが可 能です。 XSD フィールドマッピングを定義した値は、xmlcontent-solr という名のドキュメントタイプによって取得さ れます。 <documenttype> <name>xmlcontent-solr</name> <class>org.opencms.search.solr.CmsSolrDocumentXmlContent</class> <mimetypes> <mimetype>text/html</mimetype> </mimetypes> <resourcetypes> <resourcetype>xmlcontent-solr</resourcetype> </resourcetypes> </documenttype> 11.3.1.5 Solr デフォルトフィールド設定 OpenCms Solr インデックスのためのデフォルトフィールド設定は、クラス org.opencms.search.solr.CmsSolrFieldConfiguration によって実装されています。もっとも簡単なソーラフィールド 設定は、opencms-search.xml で宣言され、以下のようになります。CmsSolrFieldConfiguration の拡張も参照し てください。 <fieldconfiguration class="org.opencms.search.solr.CmsSolrFieldConfiguration"> <name>solr_fields</name> <description>The Solr search index field configuration.</description> <fields/> </fieldconfiguration> 11.3.1.6 Lucene インデックスを Solr インデックスへ移行 すでに存在する Lucene フィールド設定は簡単に Solr インデックスに変換できます。 そのためには、新規の Solr フ © ubicast Co. Ltd. Page 47 of 78 ィールド設定を作成します。そのため、 Solr デフォルトフィールド設定セクションで紹介されたコードをテンプレートと して使うことができ、 そのテンプレートに変換したい Lucene インデックスからフィールドのリストをコピーすることが できます。 Lucene フィールド名から Solr フィールド名にマッピングするには以下の方法があります: 完全な名前の一致:OpenCms は名称-属性値のような同一の名称を持っている明示的な Solr フィールドを 決定しようとします。例:OpenCms は<field name="meta"> ... </field>と定義している Solr フィ ールドを探します。この方法を有効に使うためには、Solr の schema.xml を手動で編集しなければならず、そ して実際の Lucene フィールド名に従った明示的なフィールド定義を加えなくてはなりません。 特定タイプフィールド:既存の Lucene 設定では特定のフィールドタイプ定義はされていませんが、Solr の schema.xml でフィールド用にそれぞれのデータタイプを定義します。この特定タイプ(言語特定フィールド 分析/トークン化のように)を Solr の schema.xml を変更することなく使いたいのであれば、これらのフィー ルドのためにタイプ属性を定義しなくてはなりません。タイプ属性の値は、schema.xml の中で設定された、 *_で始まる、それぞれの<dynamicField>のどんな名前でも可能です。すると Solr ドキュメント中の結果 フィールドは<luceneFieldName>_<dynamicFieldSuffix>と名付けられます。 フォールバック:もしタイプ属性を定義しておらず、schema.xml の中に Lucene フィールド名に従って明示的 に名付けられたフィールドが存在しなければ、OpenCms は text_general をフォールバックとして使用し ます。 例: Lucene フィールド<field name="title" index="true"> ... </field>は title_txt と名付けられたダイナミックフィールドとして Solr インデックスに保存されます。 元のフィールド設定: <fieldconfiguration> <name>standard</name> <description>The standard OpenCms 8.0 search field configuration.</description> <fields> <field name="content" store="compress" index="true" excerpt="true"> <mapping type="content"/> </field> <field name="title-key" display="-" store="true" index="untokenized" boost="0.0"> <mapping type="property">Title</mapping> </field> <field name="title" display="%(key.field.title)" store="false" index="true"> <mapping type="property">Title</mapping> </field> <field name="keywords" display="%(key.field.keywords)" store="true" index="true"> <mapping type="property">Keywords</mapping> </field> <field name="description" store="true" index="true"> <mapping type="property">Description</mapping> </field> <field name="meta" display="%(key.field.meta)" store="false" index="true"> <mapping type="property">Title</mapping> <mapping type="property">Keywords</mapping> <mapping type="property">Description</mapping> </field> </fields> </fieldconfiguration> 変換後: © ubicast Co. Ltd. Page 48 of 78 <fieldconfiguration class="org.opencms.search.solr.CmsSolrFieldConfiguration"> <name>standard</name> <description>The standard OpenCms 8.0 Solr search field configuration.</description> <fields> <field name="content" store="compress" index="true" excerpt="true"> <mapping type="content"/> </field> <field name="title-key" store="true" index="untokenized" boost="0.0" type="s"> <mapping type="property">Title</mapping> </field> <field name="title" store="false" index="true" type="prop"> <mapping type="property">Title</mapping> </field> <field name="keywords" store="true" index="true" type="prop"> <mapping type="property">Keywords</mapping> </field> <field name="description" store="true" index="true" type="prop"> <mapping type="property">Description</mapping> </field> <field name="meta" store="false" index="true" type="en"> <mapping type="property">Title</mapping> <mapping type="property">Keywords</mapping> <mapping type="property">Description</mapping> </field> </fields> </fieldconfiguration> 11.3.2 インデックス化されたデータ 以下のセクションでは、デフォルトではどのデータがインデックス化され、OpenCms の設定/追加フィールド設定 の実装/マッピングの方法を示します。 11.3.2.1 Solr インデックススキーマ(schema.xml) Solr の schema.xmlをまず見て下さい。 <CATALINA_HOME>/webapps/<OPENCMS>/WEB-INF/solr/conf/schema.xml ファイル中に、 以前簡 単に要約した OpenCms で使われるフィールド定義があります。 11.3.2.2 デフォルトインデックスフィールド OpenCms では、デフォルトでいくつかのリソース情報がインデックス化されます: id – ストラクチャーid はドキュメントの一意な識別名として使われる (リソースのストラクチャー id) path – ルートパス(リソースのルートパス、例: /sites/default/flower_en/.content/article.html) path_hierarchy - フルパス(フィールドタイプ:text_path でトークン化したパス) parent-folders – 親フォルダー(それぞれのパスのためのエントリーを含んでいる複数のフィールド) type – タイプ名(リソースタイプ名) res_locales – XML コンテンツのロケールノードとバイナリファイルの場合はすべての使用可能なロケール created – 作成日 (リソース自体が作成された日) lastmodified – 最終更新日 (リソース自体の最終更新日) contentdate –コンテンツの日付 (リソースのコンテンツが修正された日付) © ubicast Co. Ltd. Page 49 of 78 released – リソースのリリース日と期限日 content – すべてのリソースデータ(すべての言語、type text_general)を保持する一般的なコンテンツフ ィールド contentblob –インデックス化のパフォーマンスを向上させるための、シリアライズ化された抽出結果 (content_blob) category – 一般的なテキストの全てのカテゴリー category_exact – ファセットのための、全カテゴリーの正確な文字列 text_<locale> - 言語指定検索(デフォルト言語: en, de, el, es, fr, hu, it)のために最適化された、本文のコン テンツ timestamp –最後にドキュメントがインデックス化された時間 *_prop –検索可能なテキストを持つリソースのすべてのプロパティ (フィールド名: <Property_Definition_Name>_prop as text_general) *_exact –正確な文字列を保持していないリソースのすべてのプロパティ (フィールド名: <Property_Definition_Name>_exact as string) 11.3.2.3 XML コンテンツのカスタムフィールド フィールドマッピングを伴う宣言的なフィールドコンフィギュレーションは、DefaultAppinfoTypes.xsd で定義 されている XML リソースタイプである XSD-Content-Definition によって生成されます。 <xsd:complexType name="OpenCmsDefaultAppinfoSearchsetting"> <xsd:sequence> <xsd:element name="solrfield" type="OpenCmsDefaultAppinfoSolrField" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attribute name="element" type="xsd:string" use="required" /> <xsd:attribute name="searchcontent" type="xsd:boolean" use="optional" default="true" /> </xsd:complexType> <xsd:complexType name="OpenCmsDefaultAppinfoSolrField"> <xsd:sequence> <xsd:element name="mapping" type="OpenCmsDefaultAppinfoSolrFieldMapping" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attribute name="targetfield" type="xsd:string" use="required" /> <xsd:attribute name="sourcefield" type="xsd:string" use="optional" /> <xsd:attribute name="copyfields" type="xsd:string" use="optional" /> <xsd:attribute name="locale" type="xsd:string" use="optional" /> <xsd:attribute name="default" type="xsd:string" use="optional" /> <xsd:attribute name="boost" type="xsd:string" use="optional" /> </xsd:complexType> XML コンテンツエレメントのための検索フィールドマッピングは直接 XSD コンテンツ定義の中で宣言することがで き、この機能を使用した XSD は以下のようになります: © ubicast Co. Ltd. Page 50 of 78 <searchsettings> <searchsetting element="Title" searchcontent="true"> <solrfield targetfield="atitle"> <mapping type="property">Author</mapping> </solrfield> </searchsetting> <searchsetting element="Teaser"> <solrfield targetfield="ateaser"> <mapping type="item" default="Homepage n.a.">Homepage</mapping> <mapping type="content"/> <mapping type="property-search">search.special</mapping> <mapping type="attribute">dateReleased</mapping> <mapping type="dynamic" class="org.opencms.search.solr.CmsDynamicDummyField">special</mapping> </solrfield> </searchsetting> <searchsetting element="Text" searchcontent="true"> <solrfield targetfield="ahtml" boost="2.0"/> </searchsetting> <searchsetting element="Release" searchcontent="false"> <solrfield targetfield="arelease" sourcefield="*_dt" /> </searchsetting> <searchsetting element="Author" searchcontent="true"> <solrfield targetfield="aauthor" locale="de" copyfields="test_text_de,test_text_en" /> </searchsetting> <searchsetting element="Homepage" searchcontent="true"> <solrfield targetfield="ahomepage" default="Homepage n.a." /> </searchsetting> </searchsettings> 11.3.2.4 ダイナミックフィールドマッピング もし、'static piece of content' -> 'specified field defined in the Solr schema'のフィールドマッピングがもっと“ダ イナミック”であることが必要な場合、インターフェース org.opencms.search.fields.I_CmsSearchFieldMapping を実装することができます。 11.3.2.5 カスタムフィールド設定 フィールドマッピングを伴う宣言的なフィールド設定は opencms-search.xml の中で定義できます。すでに OpenCms Lucene フィールド設定と全く同じ機能を使うことができます。 ● インデックスから Solr インデックスへの移行を参照してください。 11.3.2.6 CmsSolrField 設定を拡張する 標準の設定オプションでは不十分な場合、Java クラス org.opencms.search.solr.CmsSolrFieldConfiguration を拡張して opencms-search.xml 中で Solr フィールドの設定で指定することにより利用することができます。 <fieldconfiguration class="your.package.YourSolrFieldConfiguration"> <name>solr_fields</name> <description>The Solr search index field configuration.</description> <fields/> </fieldconfiguration> © ubicast Co. Ltd. Page 51 of 78 Behind the walls 11.4.1 リクエストハンドラー クラス org.opencms.main.OpenCmsSolrHandlerは標準的な Solr サーバーのリクエストハンドラーと同 じ機能を提供します。OpenCms のデフォルトシステム設定 (opencms-system.xml) では、Solr リクエストハ ンドラーが以下のように設定されています: <requesthandlers> <requesthandler class="org.opencms.main.OpenCmsSolrHandler" /> </requesthandlers> OpenCms アプリケーションの WEB-INF/web.xml に以下のようにハンドラークラスを追加すれば、Servlet としても 利用できます。 <servlet> <description>The OpenCms Solr servlet.</description> <servlet-name>OpenCmsSolrServlet</servlet-name> <servlet-class>org.opencms.main.OpenCmsSolrHandler</servlet-class> <load-on-startup>1</load-on-startup> </servlet> [...] <servlet-mapping> <servlet-name>OpenCmsSolrServlet</servlet-name> <url-pattern>/solr/*</url-pattern> </servlet-mapping> 11.4.2 パーミッションチェック OpenCms はパーミッションチェックをすべての結果ドキュメントに対して行い、その中からユーザーが検索すること を許可していないものを捨て、次に最も適合する結果ドキュメントへと拡張していきます。このセキュリティーチェック はたいへんコストがかかるので、純粋なインデックスを基にしたパーミッションチェックに置き換えるべきです。 11.4.3 設定可能なポストプロセッサー OpenCms は Solr ドキュメントがパーミッションチェックをされた後、Solr ドキュメントを検索後処理する機能を提供し ます。この機能は検索結果がリターンされる前に、見つかったドキュメントにフィールドを加えることを可能にします。ポ ストプロセッサーを有効に使用するためには、オプショナルなパラメータを検索インデックスに加えて下さい。 <index class="org.opencms.search.solr.CmsSolrIndex"> <name>Solr Offline</name> <rebuild>offline</rebuild> <project>Offline</project> <locale>all</locale> <configuration>solr_fields</configuration> <sources> [...] </sources> <param name="org.opencms.search.solr.CmsSolrIndex.postProcessor">my.package.MyPostProcessor</par am> </index> パラメータに指定されたクラス org.opencms.search.solr.CmsSolrIndex.postProcessor は org.opencms.search.solr.I_CmsSolrPostSearchProcessor の実装でなければなりません。 © ubicast Co. Ltd. Page 52 of 78 11.4.4 多言語サポート OpenCms の Solr 検索インデックスには、 多言語サポートのための仕組みがあります。バイナリードキュメントは、 抽出されたテキストを基に言語を自動的に決定します。 その仕組は以下で参照できます: http://code.google.com/p/language-detection/ XML コンテンツは言語/ロケール情報 を持っており、ローカライズされたフィールドはアンダースコアに続くロケールを 表す文字列で終わります。 例: content_en, content_de or text_en, text_de.リソースタイプの XSD 中で定義された すべてのフィールドのマッピングは‘_<locale>’で拡張できます。 11.4.5 多言語の依存性解決 OpenCms では、リソースのファイル名に基づき複数のリソースに分散されたドキュメントをインデックス化するというコ ンセプトがあります。 標準的な実装は以下にあります: org.opencms.search.documents.CmsDocumentDependency 11.4.6 結果キャッシュの抽出 インデックスパフォーマンスの向上ために、抽出結果は org.opencms.search.extractors.I_CmsExtractionResult を実装したクラスによりキャッシュされます。 よくある質問 11.5.1 一般的に Solr はどのように統合されますか? 標準的な Solr サーバーは、デフォルトでインストールされる http://localhost:8983/solr/select からアクセスできる HTTP-インターフェースを提供します。 http://wiki.apache.org/solr/SolrQuerySyntax に記載されている Solr 検索を試すことができます。 HTTP レスポンスは JSON か XML になり、http://localhost:8983/solr/select?q=*:*&rows=2 の応答は以下のように なります。 <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">32</int> <lst name="params"> <str name="q">*:*</str> <int name="rows">2</int> <long name="start">0</long> </lst> </lst> <result name="response" numFound="139" start="0"> <doc>...</doc> <doc>...</doc> </result> </response> Solr は Java で実装されていて、 solrj とよばれる Apache ライブラリがあり、それは 実行中の Solr サーバーに Java コードを書くことでアクセスできます: OpenCms における Solr の統合は、Java と HTTP 両方のインターフェースを提供します:OpenCms に対して Solr の問い合わせを送るためのデフォルト URL は http://localhost:8080/opencms/opencms/handleSolrSelect になり、 このハンドラーはどんな構文的に正しければどんなソーラクエリーにも応答できます。 (http://wiki.apache.org/solr/SolrQuerySyntax). © ubicast Co. Ltd. Page 53 of 78 以下のコードは Java API に対してどのようにプログラムするかの簡単な例です: ////////////////// // SEARCH START // ////////////////// CmsObject cmsO = new CmsJspActionElement(pageContext, request, response).getCmsObject(); String query = ((request.getParameter("query") != null && request.getParameter("query") != "") ? "q=" + request.getParameter("query") : "") + "&fq=type:ddarticle&sort=path asc&rows=5"; CmsSolrResultList hits = OpenCms.getSearchManager().getIndexSolr("SolrOffline").search(cmsO, query); if (hits.size() > 0) { %> <h4>New way: <fmt:message key="v8.solr.results" /> <%= hits.getNumFound() %> found / rows <%= hits.getRows() %></h4> <div class="boxbody"><% ////////////////// // RESULTS LOOP // ////////////////// for (CmsSearchResource resource : hits) { %> <div class="boxbody_listentry"> <div class="twocols"> <div>Path: <strong><%= resource.getRootPath() %></strong></div> <div>German: <strong> <%= resource.getDocument().getFieldValueAsString("Title_de") %></strong> </div> <div>English: <strong> <%= resource.getDocument().getFieldValueAsString("Title_en") %></strong> </div> </div> </div> <% } %> </div><% } 11.5.2 どうやって特定の言語でテキストをソートしますか? この例では、テキストは Java によって提供されたデフォルトのドイツ語ルールによってソートされています。この Java のドイツ語ソートのルールは Java Locale とよばれるパッケージのなかで定義されています。 ロケールは言語と国のコンビネーションで定義されるのが典型的ですが、言語だけを指定することも可能です。例え ば、もし "de" をその言語と指定すると、 ドイツ語をソートすることができます。もし"de" を言語、 "CH" を国と定義する と、 特にスイスに適合するドイツ語のソートが得られます。サポートされているロケールのリストはここにあります。 Solr でどのようにテキストの分析が行われるかについてのより一般的な情報は、言語分析ページを参照して下さい。 <!-- define a field type for German collation --> <fieldType name="collatedGERMAN" class="solr.TextField"> <analyzer> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.CollationKeyFilterFactory" language="de" strength="primary" /> </analyzer> </fieldType> ... <!-- define a field to store the German collated manufacturer names --> <field name="manuGERMAN" type="collatedGERMAN" indexed="true" stored="false" /> ... <!-- copy the text to this field. We could create French, English, Spanish versions too, © ubicast Co. Ltd. Page 54 of 78 and sort differently for different users! --> <copyField source="manu" dest="manuGERMAN"/> 11.5.3 問い合わせ結果をハイライトするには? 11.5.3.1 OpenCms は問い合わせ結果のハイライトをサポートしますか? はい、OpenCms の Solr ハンドラーで利用できます: localhost:8080/opencms/opencms/handleSolrSelect 返された XML/JSON の中の、下記のドキュメントリストの中にハイライトするセクションが見つかります。 <lst name="highlighting"> <lst name="a710bb16-1e04-11e2-b767-6805ca037347"> <arr name="content_en"> <str><em>YIPI</em> <em>YOHO</em> text text text</str> </arr> </lst> [...] </lst> 11.5.3.2 OpenCms の Java API はハイライトをサポートしますか? 現在、OpenCms の検索 API は Solr のハイライト機能の全てはサポートしていません。しかし、Solr で以下で示すデ フォルトのハイライトメカニズムまたはコースを利用できます。 1. org.opencms.search.solr.CmsSolrResultList#getSolrQueryResponse()を呼ぶと http://lucene.apache.org/solr/api-3_6_1/org/apache/solr/response/SolrQueryResponse.html で参照でき る SolrQueryResponse を返します 2. または、上記で述べた OpenCms の Solr ハンドラーを利用する: localhost:8080/opencms/opencms/handleSolrSelect 11.5.3.3 ハイライトはパフォーマンスを落としますか? はい、そのため、ハイライトは最初の検索が実行される前には行わないようにします。許可されていないすべてのリ ソースが結果リストから除外されたあとにハイライトを実行します。 11.5.3.4 Solr インデックスに関する質問 11.5.3.5 「Solr オンラインとオフライン」の違いを説明して下さい オフラインインデックスはまだ公開されていない変更も含んでおり、オンラインインデックスはすでに公開されたリソー スだけを含みます。”Online EN VFS”は Lucene ベースのインデックスで、すでに公開されたリソースだけを含みます。 11.5.3.6 Solr クエリーを実行するとき、Solr インデックスだけが使われるのですか? いいえ、 あとから OpenCms API によってパーミッションがチェックされます。 11.5.3.7 Solr についての一般的な情報はどこで得られますか? もし、Solr について一般的に興味があるならば、Solr Wiki を参考下さい: http://wiki.apache.org/solr/で配布されてい る PDF ファイルの中に CMS から見たドキュメントがあります。 11.5.3.8 完全なインデックスのフルバックアップを行う方法はありますか? インデックスフォルダー 'WEB-INF/index/${INDEX_NAME}' を手動でコビーします。 © ubicast Co. Ltd. Page 55 of 78 11.5.3.9 フェイル・セーフでインデックスを再構築する方法は? WEB-INF/config ディレクトリの中の opencms-search.xml を編集し、以下のノードをインデックスに追加しま す: <param name="org.opencms.search.CmsSearchIndex.useBackupReindexing">true</param> これは以下で説明している通り、スナップショットを作成します:http://wiki.apache.org/solr/CollectionDistribution Solr の検索結果はデフォルトで 50 件に制限されています。50 件以上の検索結果を得る方法はあ りますか? 11.5.3.10 パーミッションチェックされたリソースだけを返す(高いコストがかかります)ために、 この数に制限して結果を返してい ます。結果をページングするには、8.5.x 以降、結果のドキュメントを任意のサイズに増やすことができるようになって いますので Solr のパラメータを参照してください: rows と start: http://wiki.apache.org/solr/CommonQueryParameters 11.5.4 Solr メーリングリストでの質問 11.5.4.1 クラスのキャストで例外が発生しました。何をすればいいですか? インデックスのために正しいクラスとフィールドを設定しなくてはなりません。でないと Lucene 検索インデックスが 利用されます。 <index class="org.opencms.search.solr.CmsSolrIndex">[...]</index> <fieldconfiguration class="org.opencms.search.solr.CmsSolrFieldConfiguration">[...] </fieldconfiguration> 11.5.4.2 maxoccurres が1より大きい場合でもエレメントをマップすることができますか? バージョン 8.5.1 以降から複数値フィールドにマップされます。 11.5.4.3 OpenCmsDateTime エレメントをインデックス化する方法は? <searchsetting element="Release" searchcontent="false"> <solrfield targetfield="arelease" sourcefield="*_dt" /> </searchsetting> © ubicast Co. Ltd. Page 56 of 78 SEO イントロダクション OpenCms 8.5 は検索エンジン最適化を目的としたふたつのあたらしい特徴を持っています。エイリアスと SEO ファイ ルです。エイリアスは VFS で実際のパスに対応しないページのために代替の URL を持つことを可能にします。 SEO ファイルは XML サイトマップと robots.txt ファイルを自動生成します。 エイリアス 12.2.1 シンプルエイリアス 定義できるエイリアスには2種類あります:シンプルエイリアスとリライトエイリアスです。シンプルエイリアスはエイリア スパス、ターゲットリソース、アクションから構成され、それは OpenCms からパスがリクエストされたときに何がおこる かを決定します。シンプルエイリアスはターゲットリソースに直接接続されるので、これが移動されたり、名前を変更さ れたりした場合でも、そのリソースをポイントし続けます。有効なエイリアスパスは、「/」および 1 文字以上の文字から 成るセグメントで構成されます。エイリアスのパスが OpenCms からリクエストされた場合、実行されることのできるアク ションが3つあります: ● テンポラリーリダイレクト(302):ターゲットリソースへのリンクを新しい URL としてブラウザに、一 時的リダイレクトとして送ります。 ● パーマネントリダイレクト(301):ターゲットリソースへのリンクを新しい URL としてブラウザに、恒久的リダイ レクトとして送ります。 ● ページ表示:OpenCms は現在のリクエストの中でターゲットリソースを直接ロードします。 12.2.2 リライトエイリアス シンプルエイリアスが単一のパスを単一のリソースにマップする一方、リライトエイリアスは、正規表現を設定し、パ ターンに一致すれば、URL を書き換えます。OpenCms は入ってくるパスをリライトエイリアスパターンに対してテスト し、最初に適合するリライトエイリアスを適用します。リライトエイリアスのパターンは Java の正規表現シンタックスに 従っています。また、置換文字列は、メソッド java.util.regex.Matcher#replaceFirst 用のシンタックスに 従っており、正規表現からのキャプチャーグループの内容はドルシンタックス($1, $2,...)を使ってアクセスできま す。パターンはつねにパス全体にマッチします。リライトエイリアスはシンプルエイリアスなどより優先順位が上であり、 もしリライトエイリアスが現在のリクエストのパスにマッチすると、シンプルエイリアスはそのパスにはマッチしません。 リライトエイリアスは3つの可能なアクションがあります。 ● テンポラリーリダイレクト(302):置換された新しい URL を、一時的なリダイレクトとしてブラウザに 送ります。 ● パーマネントリダイレクト(301):置換された新しい URL を、恒久的なリダイレクトとしてブラウザに 送ります。 ● パススルー:置換した結果のパスは、エイリアスハンドラーの次のリソースハンドラーに渡されます。リソ ースハンドラーの定義と順序は、opencms-system.xml コンフィギュレーションファイルの中の <resourceinit>エレメントの中で設定されます。 12.2.3 インターナル 受信したリクエストにマッチするすべてのエイリアスは、クラス org.opencms.main.CmsAliasResourceHandler で扱われ、これはデフォルトでは、opencms- © ubicast Co. Ltd. Page 57 of 78 system.xml コンフィギュレーションファイルの中の<resourceinit> エレメントで設定されます。このハンドラー がコンフィギュレーションから削除された場合、ユーザーインターフェイスを通してエイリアスを編集することが可能で すが、それは何の効果もありません。 VFS に実際に存在するパス、そして「/system/」からはじまるパスには、エイリアスリソースハンドラーは使用されませ ん。たとえば、同じエイリアスパスを異なるサイトの異なるシンプルエイリアスに使用することが可能です。リダイレクト の制限のため、POST リクエストのパスがエイリアスパスにマッチし、リダイレクトアクションが実行された場合、リクエ ストパラメータは保存されないことに留意して下さい。 12.2.4 SEO オプションダイアログ 新しい SEO オプションコンテクストメニューエントリーは、サイトマップエントリーのためのページエディターのコンテク ストメニューで使用可能です。 コンテクストメニューからこのアイテムが選ばれると、SEO オプションダイアログが開きます : © ubicast Co. Ltd. Page 58 of 78 SEO オプションダイアログでは「Title」「Descriptopn」「Keyword」プロバティを変更することが可能で、またリソース のシンプルエイリアスを編集することが可能です。変更は「保存」ボタンをクリックしてはじめて適用されることに留意し てください。 テキストボックスの中のパスを変更すること、またはアクション選択ボックスを使ってアクションを変更することで、既存 のエイリアスを編集することができます。「Remove alias」ボタンはエイリアスを削除するために使用します。 「New alias」テキストボックスにエイリアスパスを入力し、選択ボックスからアクションを選択し、そして「Add alias」ボタ ンをクリックすることで追加することができます。 12.2.5 エイリアスダイアログを編集する 「Edit aliases」ダイアログは、現在のサイトのすべてのエイリアス(シンプル及び、リライト)を表示、及び、編集する ことができます。 サイトマップエディターのメインコンテクストメニューをクリックし、「Edit aliases」を選択します。 © ubicast Co. Ltd. Page 59 of 78 コンテクストメニューからこのアイテムが選ばれると、「Edit aliases」ダイアログが開きます。 このダイアログは、新しいエイリアスの新規追加、既存のエイリアスの編集、現在のサイトのエイリアスを CSV ファイ ルにエクスポート、または、CSV ファイルからインポートすることを可能にします。 12.2.6 新規エイリアスを作成する 新しいエイリアスは、エイリアスパスとターゲットページ(またはパターンと置換文字列)を入力し、アクションを選び「追 加」ボタンをクリックすることで作成することができます。 12.2.7 既存のエイリアスを編集する 既存のエイリアス(シンプル、及び、リライト)それぞれの表の中で編集することができます。既存のエイリアスの属性は、 対応する表のエントリーをクリックすることで変更できます。しかし、無効のエイリアスパスを入力すると、対応する表の © ubicast Co. Ltd. Page 60 of 78 「ステータス」フィールドは「エラー」を表示します。※ステータスラベルにマウスオーバーすると、より詳細なメッセージ が表示されます。 対応する表の行の「×」フィールドのチェックボックスを選び、そして表の上部にある「Delete」ボタンをクリックすること で既存のエイリアスを削除することができます。 12.2.8 エイリアスをエクスポート、インポートする 「Export」ボタンをクリックすると、サイトに定義されているエイリアスを CVS ファイルに出力し、ダウンロードすることが できます。これは未保存のエイリアス変更は含まないことに注意してください。 「インポート」ボタンをクリックすると、CVS ファイルをインポートすることができる別のダイアログを開きます。 最初に、「Select file」ボタンをクリックし、インポートする CVS ファイルを選択します。 そして、「Import」ボタンをクリックします。CSV ファイルが「,」とは異なる区切り文字を使う場合、「Field separator」に 区切り文字を設定します。 そして、エイリアスはインポートされ、ダイアログの下部のテキストフィールドにステータスメッセージが表示されます。 CSV ファイルのインポートフォーマットは、以下のようになります: "/news-alias-1","/flower-en/flower-today/news/index.html","redirect" "/news-alias-2","/flower-de/flower-today/news/index.html" "/flower-en/([a-z]+).html","/flower-en/$1-old.html","permanentRedirect","rewrite" 各行が、2、3、または4つのフィールドを持ちます。3つのフィールドがある場合、以下のようなフィールド定義とともに、 これはシンプルエイリアスと解釈されます: ● フィールド 1:エイリアスパス ● フィールド 2:エイリアスターゲットのサイトパス ● フィールド 3:リライトのためのアクション ○ page:ページを表示します ○ permanentRedirect:恒久的なリダイレクトを送信します © ubicast Co. Ltd. Page 61 of 78 ○ redirect:一時的なリダイレクトを送信します 2つのフィールドを持つ行もまた、シンプルエイリアスパスと解釈され、エイリアスモードは暗に「パーマネントリダイレク ト」に設定されます。4つのフィールドを持っている場合は、リライトエイリアスと解釈され、以下のようなフィールド定義に なります: ● フィールド 1:エイリアスパターン ● フィールド 2:置換文字列 ● フィールド 3:リライトのためのアクション ● ○ passthrough:リライトされたパスをつぎのリソースハンドラーに渡します ○ permanentRedirect:上記参照 ○ redirect:上記参照 フィールド 4:rewrite である必要があります robots.txt と XML サイトマップの自動生成 OpenCms は XML サイトマップとそれらのサイトマップを参照する robots.txt ファイルの自動生成を提供します。これら は、「SEO file」リソースタイプによて供給されます。このタイプのリソースが、OpenCms からリクエストされた時、 OpenCms は動的にサイトマップまたは robots.txt データを生成します。 12.3.1 XML サイトマップ生成 XML サイトマップを生成したいと考えているフォルダーに、タイプ「SEO file」リソースタイプの新しいリソースを作成しま す。コンテンツエディターでこのファイルを開き、「XML sitemap」モードを選択します。 デフォルトで、XML サイトマップは、現在のフォルダー配下にあるすべてのナビゲーションエントリーとコンテナーペー ジ及び、その配下の詳細ページ、エイリアスパスのアクションが「Show page」と定義されているエイリアスを含みます。 「Include frolder」は、そのフォルダー配下のコンテンツが XML サイトマップに含まれます。 「Exclude folder」は、そのフォルダー配下のコンテンツが XML サイトマップから除外されます。 「Container page dates」オプションをチェックすると、コンテナーページの最終変更日が、そのコンテンツの最終変更日 に加味されます。 © ubicast Co. Ltd. Page 62 of 78 XML サイトマップの生成は常にリソースのオンラインプロジェクト状態に対応し、ゲストユーザーに見えるページだけを 含むことに注意してください。 12.3.2 robots.txt の生成 この機能を使用するためには、「SEO file」タイプのファイルをルートフォルダーに作成します。この機能を使用するこ とは、あなたのホストがセットアップされ、OpenCms サイトがあなたのドメインのルートにマップされている時に有用に なります。たとえば http://yourhost.com/robots.txt が OpenCms サイトのルートフォルダーから取得されます。 「SEO file」を編集し、「robots.txt」モードを選択します。デフォルトにより、robots.txt ファイルが OpenCms からリクエ ストされる時、それは、あなたのサイトの既存の XML サイトマップへのリファレンス(参照)だけを含みます。追加のエ ントリーを加えるためには、それらを「SEO file」の「robots.txt content」フィールドに加えます。 © ubicast Co. Ltd. Page 63 of 78 CMIS OpenCms 8.5 では CMIS(Content Management Interoperability Services)を用いて、OpenCms の仮想ファイルシ ステム内のコンテンツにアクセスすることが可能です。次項は CMIS を経由して OpenCms にアクセスするための実 用的な例で構成され、それ以降は OpenCms の CMIS の実装に関する詳細な情報が含まれますが、本ドキュメント では CMIS について詳細な記述をしないことに注意して下さい。CMIS の仕様については http://docs.oasisopen.org/cmis/CMIS/v1.0/cmis-spec- v1.0.html を参照して下さい。 CMIS 経由での OpenCms へのアクセス OpenCms 8.5 以降では CMIS の接続に対応しているので、OpenCms 側の設定は必要ありません。 以降の例では、Web アプリケーション名 opencms のインスタンスは http://localhost:8080/opencms で実行され ているとしています。 この例では Apache Chemistry Workbench を使用します。これは任意の CMIS リポジトリにアクセスするための Java GUI クライアントアプリケーションです。以下の URL からダウンロードできます。 http://chemistry.apache.org/java/download.html Apache Chemistry Workbench を起動し、"Connection"ボタンを押下すると次のようなダイアログが開きます。 CMIS は標準的に AtomPub と SOAP ウェブサービスの両方を利用できます。OpenCms はそれら両方をサポー トしていますが、今回の例では AtomPub を使用しているため接続の URL には 「http://localhost:8080/opencms/cmisatom」と入力し、「AtomPub」のラジオボタンを選択します。 ログインしたい OpenCms ユーザーのユーザー名およびパスワードを入力して下さい(CMIS を経由して実行された全 ての操作は、ログインする OpenCms ユーザーで実行されます)。そして"Load repositories"ボタンを押下します。 2つのリポジトリが表示されます:cmis-online は OpenCms のオンラインプロジェクトからコンテンツにアクセス出来ま すが変更は出来ず、cmis-offline は OpenCms のオフラインプロジェクトにアクセスして変更を行うことが出来ま す。”cmis-offline”を選択して、ログインボタンを押下してください。 GUI は仮想ファイルシステム(VFS)のルートフォルダーからリソースを表示します。他のフォルダーをダブルクリッ © ubicast Co. Ltd. Page 64 of 78 クする事によってそのフォルダーへ移動できます。何かしらのリソースをダブルクリックする事により、仮想ファイル システムからそのリソースをロードして表示します。CMIS はリソースの生コンテンツにアクセス出来るだけである ことに注意してください。具体的には、CMIS 経由で XML コンテンツのレンダリングされた出力のみ、ソースコード のみを取得する事はできません。 ワークベンチの右側では、各種情報のためのタブを選択でき、左側は現在選択されているリソースに対してアクシ ョンを実行します。例えば"Actions"タブではリソース削除などのアクションを実行でき、"Properties"タブで現在選択 されているリソースの表示や変更ができます。 CMIS の統合 CMIS は Web サービスを介してコンテンツのリポジトリにアクセスするための標準的な方法を提供します。 OpenCms は、CMIS クライアントが OpenCms の仮想ファイルシステム(VFS)にアクセスできる CMIS インターフ ェースを提供します。そのために OpenCms には CMIS 標準の AtomPub と SOAP の2つのサーブレットが定義 された WEB-INF/web.xml ファイルが付属しています。サーブレットはそれぞれ/cmisatom および /services にマッピングされます。 さらに、いくつかのサーブレットコンテキストリスナが web.xml ファイルで定義されています。Apache Chemistry サーバーのフレームワークにおいて実装されているこれらのサーブレットは、opencms-importexport.xml で 定義されている任意の CMIS リポジトリへのアクセスを提供します。 もしも CMIS を使用しないのであれば、web.xml ファイル中の"Start of/End of CMIS configuration"にある CMIS セクションをコメントアウトして下さい。それにより、OpenCms の起動時間を短縮できます。 CMIS リポジトリは WebDAV のリポジトリと同様に<repositories>要素下に定義されています。デフォルトで は2つの設定済みリポジトリがあります。 <repositories> ... <repository name="cmis-offline" class="org.opencms.cmis.CmsCmisRepository"> <params> <param name="project">Offline</param> <param name="description">Offline project CMIS repository</param> <param name="index">Solr Offline</param> </params> </repository> <repository name="cmis-online" class="org.opencms.cmis.CmsCmisRepository"> <params> <param name="project">Online</param> <param name="description">Online project CMIS repository</param> <param name="index">Solr Online</param> </params> </repository> ... </repositories> <repositories>セクションは WebDAV リポジトリを設定するためにも使用されますが、"class"属性に指定され ている org.opencms.cmis.I_CmsCmisRepository インターフェースを実装する Java クラスで CMIS リポ ジトリと WebDAV リポジトリを区別します。 現在、このインターフェースを実装している唯一の Java クラスが org.opencms.cmis.CmsCmisRepository です。このクラスは“params”要素下に定義される各種の設定パラメータをサポートしています: 13.2.1 project: CMIS リポジトリの"working project"。これは必須パラメータになります。オンラインプロジェクトであれば、 © ubicast Co. Ltd. Page 65 of 78 VFS のオンラインプロジェクトへの読み取りアクセスを提供します。 その他のプロジェクトの場合 CMIS リポジトリは VFS のオフラインプロジェクトにアクセスし、全ての変更 が反映されます。CMIS からはリポジトリはそれぞれ独立したオブジェクトであることに注意して下さい。 これは CMIS を通じて OpenCms のオフラインとオンラインのコンテンツ両方にアクセスする必要がある クライアントアプリケーションを作成する場合は、オフラインとオンラインのリポジトリ両方にアクセスする 必要があるということです。 13.2.2 description: CMIS クライアントに表示される説明文。 13.2.3 Index: リポジトリを検索するために使用される OpenCms の Solr インデックスの名前。本ドキュメントに記載され ている Solr 検索機能を使用しています。これは Lucene インデックスでは動作しません。このパラメータ が省略された場合、検索機能は使用できません。 13.2.4 rendition: "rendition provider class"の Java クラス名。CMIS には一種の別名定義である'renditions'という概念が あり(例えばイメージのサムネイル)、ここで設定されたクラスには'renditions'として定義されます。指定さ れる Java クラスは org.opencms.cmis.I_CmsCmisRenditionProvider インターフェースを実装する必 要があります。このインターフェースを実装するクラスは、標準的な OpenCms のディストリビューション には含まれていません。 13.2.5 property: "property provider"クラスの Java クラス名。このパラメータにより、リソースのプロパティや属性に無い プロパティを OpenCms VFS の CMIS ビューに付け加えることができます。ここで指定された Java クラ スによってプロパティの読み書きが行われます。CMIS の呼び出しを通して、OpenCms の中でカスタム コードを作成し、利用することが出来ます。ここで指定される Java クラスは org.opencms.cmis.I_CmsPropertyProvider インターフェースを実装する必要があります。こ のインターフェースを実装するクラスは、標準的な OpenCms のディストリビューションには含まれてい ません。 OpenCms はリソースとリレーションを CMIS オブジェクトとして利用可能です。全てのファイルは CMIS タイプ の”cmis:document”、全てのフォルダーは CMIS タイプの”cmis:folder”として定義されており、リレーションは CMIS タイプの”opencms:RELATIONTYPE”で定義されます。なおこの”RELATIONTYPE”は、OpenCms で定 義されたリレーション名になります。 ファイルとフォルダーの作成、削除および変更はリポジトリプロジェクトがオンラインプロジェクトでなく、現在のログイ ンユーザがそれらの操作を実行できる権限を持つとして、CMIS を介して実行できます。 リレーションは“defined in content”でリレーションタイプが定義されていない場合、作成または削除のみ行うことが出 来ます(org.opencms.relation.CmsRelationType.isDefinedInContent()を参照)。 2つの CMIS プロパティ、”cmis:document”と”cmis:folder”の両方で OpenCms のプロパティ”opencms:X” と”opencms-inherited:X”が利用できます。CMIS ドキュメントかフォルダーの”opencms:X”プロパティは、リソース に直接設定された属性値を含み、”opencms-inherited:X”プロパティはリソースに直接設定されたか親フォルダー から継承された値を含みます。”opencms:X”プロパティは読み書き可能ですが、”opencms-inherited:X”プロパティ は読み込みのみ可能です。CMIS で”opencms:X”プロパティに書き込みを行うと、構成や OpenCms 中のプロパテ ィのリソース値の両方を設定します。 いくつかの標準的な CMIS のプロパティは、OpenCms のリソース属性やリソース情報を参照して下さい。 © ubicast Co. Ltd. Page 66 of 78 cmis:objectId – リソースの OpenCms ストラクチャーID cmis:path – リソースのルートパス cmis:lastModifiedBy - リソースを変更したユーザー名 cmis:lastModificationDate – リソースの最終更新日時 cmis:createdBy – リソースを作成したユーザー名 cmis:creationDate – リソースが作成された日時 opencms-special:resource-type – 含まれている OpenCms のリソースタイプ名 opencms-dynamic:PROPERTYNAME – 前述している opencms-importexport.xml で定義されたカスタ ムプロパティプロバイダクラスによって処理される動的なプロパティ CMIS を介して新規の OpenCms プロパティを作成することはできません。それは OpenCms からのみ行うこと ができます。有効な OpenCms のプロパティ一覧は 5 分毎に更新されるため、CMIS 側ですぐに表示されない 場合があります。 CMIS 経由で OpenCms にファイルをアップロードする場合、アップロードされたファイルの拡張子から OpenCms のリソースタイプが自動的に決定されますが、OpenCms リソースの値として”opencmsspecial:resource-type”プロパティを指定することにより、これを無効にすることができます。 13.2.6 CMIS の制限 OpenCms の CMIS 実装は CMIS の全てのオプションをサポートしているわけではありません。サポートされて いない機能は次の通りです: バージョニングと PWCs Unfiled と multifiled resources 権限とアクセス制御の変更 変更履歴 ポリシー CMIS-SQL CMIS-SQL をサポートしていませんが、問い合わせには Solr クエリーを利用できます。前述の通り Solr イン デックスがリポジトリに設定されている場合 OpenCms は Solr クエリーが利用可能ですが、CMIS-SQL の使 用を前提にしている CMIS クライアントは動作しない場合があります。 CMIS には OpenCms のように「オフライン」や「オンライン」の概念が無いため、ファイルの公開はサポートされて いません。標準構成でのオフライン、オンラインリポジトリは、CMIS から見るとそれぞれにつながりのない独立した リポジトリとなります。 CMIS はリソースに対する基本的なアクセス制御を提供しますが、それらは OpenCms のアクセス制御に比べて 非常に不完全です。CMIS を介して OpenCms へアクセスするクライアントアプリケーションを作成するのであれば、 操作を実行する前に操作実行の可否を問う API を呼び出す必要があります。 13.2.7 CMIS クライアントのプログラム例 CMIS により、VFS にアクセスするカスタム・クライアント・アプリケーションを作成するための様々なライブラリを 利用することができます。一例として Apache Chemistry クライアントのライブラリを使用したアプリケーションの 作成例を以下に示します。このサンプルアプリケーションはローカルファイルシステムのフォルダーからドキュメ ントをアップロードします。Java での Apache Chemistry アプリケーション開発については、以下の URL で詳 細な情報を得ることができます。http://chemistry.apache.org/java/developing/index.html © ubicast Co. Ltd. Page 67 of 78 /** Demo for uploading files to CMIS. */ public class CmisUploader { /** The repository id. */ public static final String REPOSITORY_ID = "cmis-offline"; /** The session factory. */ private static SessionFactory sessionFactory = SessfromionFactoryImpl.newInstance(); private String m_repositoryUrl; /** The session. */ private Session m_session = null; public CmisUploader(String repositoryUrl) { m_repositoryUrl = repositoryUrl; } /** Main method. */ public static void main(String[] args) throws Exception { String repositoryUrl = args[0]; String source = args[1]; String target = args[2]; CmisUploader uploader = new CmisUploader(repositoryUrl); uploader.copyFiles(source, target); } /** Copies files from a local folder to a CMIS folder. */ public void copyFiles(String sourceFolder, String targetFolder) throws Exception { File sourcefolder = new File(sourceFolder); for (File child : sourcefolder.listFiles()) { if (child.isFile()) { uploadFileToCmis(child.getAbsolutePath(), targetFolder); } } } /** Uploads a single file from the local file system to a CMIS folder. */ public void uploadFileToCmis(String fileSystemPath, String targetFolder) throws Exception { Session session = getSession(); File file = new File(fileSystemPath); String name = file.getName(); byte[] fileContent = readFile(file); Folder parent = (Folder)(session.getObjectByPath(targetFolder)); String targetPath = (targetFolder + "/" + name).replaceAll("/+", "/"); try { session.getObjectByPath(targetPath); System.out.print("Not creating " + targetPath); System.out.println(" since it already exists. "); } catch (CmisObjectNotFoundException e) { System.out.println("Creating " + targetPath); Map<String, Object> properties = new HashMap<String, Object>(); properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document"); properties.put(PropertyIds.NAME, name); ContentStream contentStream = new ContentStreamImpl( © ubicast Co. Ltd. Page 68 of 78 name,BigInteger.valueOf(fileContent.length),"binary/octet-stream", new ByteArrayInputStream(fileContent)); parent.createDocument(properties, contentStream, VersioningState.MAJOR); } } /** Gets the session, creating it if possible. */ private Session getSession() { if (m_session == null) { Map<String, String> parameters = new HashMap<String, String>(); // OpenCms user name and password parameters.put(SessionParameter.USER, "Admin"); parameters.put(SessionParameter.PASSWORD, "admin"); parameters.put(SessionParameter.ATOMPUB_URL, m_repositoryUrl); parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); parameters.put(SessionParameter.REPOSITORY_ID, "cmis-offline"); m_session = sessionFactory.createSession(parameters); } return m_session; } /** Utility method for reading a file's content. */ private byte[] readFile(File file) throws IOException { byte[] fileContent = new byte[(int)file.length()]; FileInputStream istream = new FileInputStream(file); istream.read(fileContent); istream.close(); return fileContent; } } © ubicast Co. Ltd. Page 69 of 78 JSP の基本 ここでは、OpenCms 上での JSP アプリケーション開発の基本について説明します。OpenCms の JSP インテグ レーションに用いられる技術の概要と背景情報について説明します。Alkacon 社の OpenCms ドキュメントにも同 様の記述がありまずので、参考にして下さい。このドキュメントは、一般的な JSP 開発について説明しているもの ではありません。JSP 開発については、良いチュートリアルや書籍がたくさんありますのでそちらを参考にして下 さい。 JSP 機能 ● OpenCms ワークプレース上で JSP を追加・管理 ● JSP テンプレートを用いた WYSIWYG で編集可能なページのサポート ● 編集可能なページとインタラクティブなページで同じ JSP テンプレートを使用 ● 共通 OpenCms タスクの JSP Taglib ● OpenCms 機能へ直接アクセスできる JSP API ● JSP のオンライン版とオフライン版を使い分け ● パワフルな宣言型のキャッシュ機能であるフレックスキャッシュ ● ページ単位のアウトプットストリーミング ● JSP の静的エクスポート JSP <cms>-taglib 14.2.1 どのように taglib ディレクティブを追加するか? OpenCms JSP の taglib を用いる際には、どこに taglib の定義があるかを指定するために JSP ページの中に taglib ディレクティブを追加する必要があります。これは、次の2つの方法で行うことができます。 1. 標準的な JSP/Servlet の方式: <%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %> このディレクティブは、cms タグが使用される前にセットする必要があります。例のように指定されると、cms プレフィ ックスは、OpenCms Taglib の中でユニークになります。例では、OpenCms taglib のすべてのタグは、「cms:」から 始まります。 2. OpenCms 独自の短縮形: <%@page buffer="none" session="false" taglibs="c,cms" %> 14.2.2 使用できるタグ OpenCms の標準 taglib では、以下の<cms>-tags 用いることができます。タグは、呼び出されたときに実行され ます。 <cms:tagName attributes...></cms:tagName> ● cms:container – コンテナーページのテンプレート機能を有効にします ● cms:contentaccess – JSP EL のコンテンツへのアクセスを提供します ● cms:contentcheck – XML コンテンツのエレメントをチェックする条件を提供します © ubicast Co. Ltd. Page 70 of 78 ● cms:contentinfo – contentload の結果へのアクセスを提供します ● cms:contentload – OpenCms VFS から XML コンテンツのアイテムをロードします ● cms:contentloop – XML コンテンツノードエレメント値へ再帰的なアクセスを許可します ● cms:contentshow – 個々の XML コンテンツノードエレメント値へのアクセスを提供します ● cms:decorate – HTML コンテンツを装飾します ● cms:device – デバイス毎に表示を出し分けます ● cms:editable – テンプレート中で直接編集を可能にする ● cms:elementsetting – ADE コンテナエレメントの設定へのアクセスを提供します ● cms:enable-ade – テンプレート中で ADE を可能にします ● cms:export – 静的エクスポート中のファイルに JSP から JSP コードを書き出します ● cms:formatter – ADE フォーマッタに対して XML コンテンツのアイテムをロードします ● cms:headincludes – html/head の中で必須となる css や JavaScript のリソースをインクルードします ● cms:img – OpenCms の画像リサイズ機能を用いて画像のリサイズをサポートします ● cms:include – 他の JSP エレメントを実行時に動的にインクルードします ● cms:info - OpenCms バージョンのようなシステム情報へのアクセスを許可します ● cms:jquery – jquery とそのプラグインコードとスタイルシートのインクルードを許可します ● cms:label – ユーザーメッセージを保持しているリソースバンドル(workplace.properties のような Java プロパティファイル)からローカライズされた値を読み出します ● cms:link – 与えられたリソースに対する有効な OpenCms URL を生成します ● cms:navigation - ナビゲーション情報へのアクセスを提供します ● cms:nocache – ブラウザへ no-cache ヘッダーを送ります ● cms:param – アウタータグへパラメータを渡します ● cms:parse – parserClass 属性で指定された A_CmsConfiguredHtmlParser のカスタム実装で HTML を装飾します ● cms:property – 現在の VFS ファイルプロパティの参照を許可します ● cms:resourceaccess – JSP EL のリソースへのアクセスを提供します ● cms:resourceload - OpenCms VFS からリソースをロードします ● cms:secureparams - 現在のフレックスリクエストに対し自動でパラメータをサニタイズします ● cms:template – JSP ページを<cms:include>タグでインクルードされるエレメントへ分割します ● cms:user – 現在ログイン中のユーザーのプロパティへのアクセスを許可します ● cms:usertracking –購読・解約などのユーザートラッキングアクションを実行します 14.2.3 使用できる EL 機能 OpenCms の標準 taglib では、以下の EL 機能が利用できます。EL 機能は、呼び出すことでアクセスできます。 ${cms:functionName(parameters)} ● cms:vfs – OpenCms JSP/EL コンテンツの VFS への簡単なアクセスを提供します ● cms:convertDate - Long 値から Date 値への変換を許可します。Long 値や Date 値を表す文字列を扱うこ とも可能です。 ● cms:convertLocale – Objects から Locale 型への変換を許可します。ロケールを表す文字列を扱うことも © ubicast Co. Ltd. Page 71 of 78 可能です。 ● cms:convertList - リストで与えたアイテムの属性名によって指定された値をリストで返します ● cms:getCmsObject – ページコンテキストから現在の OpenCms ユーザーコンテキストを返します ● cms:getListSize - 与えられたリストのサイズを返します ● cms:stripHtml - 与えられた入力から全ての HTML マークアップを削除します ● cms:trimToSize – 文字列を指定された長さ以下に削って返します ● cms:convertUUID – 文字列の CmsUUID への変換を許可します。CmsUUID、または、CmsUUID そのも のの byte[]を扱えるようにします。 ● cms:getRequestParam – GET リクエスト用にフォーマットされた文字列からパラメータの値を返します ● cms:getRequestLink - GET リクエスト用にフォーマットされた文字列からクエリパラメータを除いたリンク を返します ● cms:escape – JavaScript のエスケープ処理と互換性のある方法で文字列をエンコードします ● cms:unescape - JavaScript のアンエスケープ処理と互換性のある方法で文字列をデコードします ● cms:navUri - 現在のナビゲーション URI を返します © ubicast Co. Ltd. Page 72 of 78