Glossify
コンテンツを自動的にスキャンし、既存のエンティティラベル(タクソノミーターム、ノード、またはコマース製品)に基づいてリンクやツールチップを作成するテキストフィルターを提供します。
glossify
インストール
composer require 'drupal/glossify:^3.1'
composer require 'drupal/glossify:^3.0'
概要
Glossifyは、コンテンツ内の用語を自動的に識別し、リンクやツールチップに変換することで強化する強力なテキスト処理モジュールです。コンテンツが表示される際、モジュールはサイトのタクソノミーボキャブラリー、ノードタイトル、またはコマース製品名からエンティティラベルとの一致をテキスト内でスキャンします。
このモジュールは、3つのサブモジュールが拡張する柔軟なベースAPIを提供します:タクソノミーターム ページへのリンク用のGlossify Taxonomy、コンテンツページへのリンク用のGlossify Node、製品ページへのリンク用のGlossify Commerceです。各フィルターは任意のテキストフォーマットで個別に設定でき、どのコンテンツを処理するか、マッチをどのように表示するかをきめ細かく制御できます。
主な機能には、大文字小文字を区別する/しないマッチング、最初のマッチのみ/すべてのマッチの処理、カスタムテキストフィールドによる同義語サポート、カスタマイズ可能なURLパターン、選択的なHTMLタグ除外、CSSクラスを使用した特定テキストの除外機能があります。上級ユーザーはDrupalのhookを使用して基盤となるデータベースクエリを変更することもできます。
Features
- 自動テキストスキャンと用語マッチング - エンティティラベル(タクソノミーターム、ノードタイトル、または製品名)とのマッチをコンテンツ内でスキャンし、自動的にリンクまたはツールチップでラップします
- 3つの表示モード - マッチをHTML5ツールチップのみ(abbr要素)、リンクのみ(anchor要素)、またはツールチップとリンクの両方で表示します
- 大文字小文字の区別制御 - 各フィルターで個別に大文字小文字を区別するか区別しないかを設定できます
- 最初のマッチのみオプション - 各用語の最初の出現のみをリンク/ツールチップにするか、コンテンツ全体のすべての出現を処理するかを選択できます
- 同義語サポート - エンティティラベルだけでなく、同義語を含む指定されたテキストフィールドの値もマッチします(複数値フィールドをサポート)
- カスタマイズ可能なURLパターン - エンティティIDのトークンプレースホルダーとして[id]を使用してカスタムURLパターンを定義できます(例:/glossary/[id] または /taxonomy/term/[id])
- HTMLタグ除外 - 処理中に無視するHTMLタグをカンマ区切りで指定できます(例:h1, h2, strong)。見出しや強調テキスト内でのマッチを防ぎます
- CSSクラス除外 - 'glossify-exclude'クラスを持つ要素でテキストをラップすると、特定のインスタンスの処理を防げます
- ツールチップの切り詰め - オプションでツールチップテキストを300文字に切り詰め、すっきりとした表示を実現できます
- クエリ変更hook - 開発者はhook_query_TAG_alter()を使用してエンティティ選択クエリを変更し、高度なフィルタリングやカスタマイズができます
- 多言語サポート - フィルターはコンテンツの言語を尊重し、現在の言語のエンティティのみをマッチします
- インテリジェントなマッチング境界 - 空白または句読点で区切られた完全な単語のみをマッチし、部分的な単語のマッチはしません
- キャッシュタグ管理 - ソースエンティティが更新されたときの適切なキャッシュ無効化
- UTF-8と特殊文字のサポート - マルチバイトUTF-8シーケンスを含む国際文字を完全にサポート
Use Cases
技術ドキュメント用の用語集の構築
技術用語のタームと説明を含む「用語集」タクソノミーボキャブラリーを作成します。ドキュメント用テキストフォーマットでGlossify Taxonomyフィルターを有効にします。リンク付きツールチップを表示するように設定し、用語集ボキャブラリーを選択し、最初のマッチのみを有効にします。これにより、ドキュメントに表示される技術用語は自動的にツールチップとして定義を表示し、詳細な用語集ページにリンクします。
SEO向けの自動内部リンク
Glossify Nodeフィルターでソースとして特定のコンテンツタイプを選択すると、それらのコンテンツタイトルが他の記事に表示されるたびに自動的に内部リンクを作成します。これにより、手動の作業なしに自然な内部リンク構造が作成され、サイトナビゲーションとSEOが向上します。
製品カタログのクロスリファレンス
Drupal Commerceを使用するECサイトでは、Glossify Commerceを有効にすると、ブログ投稿、カテゴリ説明、またはその他のコンテンツで言及された製品名を製品ページに自動的にリンクし、製品の発見性とユーザーエクスペリエンスを向上させます。
医学用語または法律用語の定義
わかりやすい説明を含む医学用語または法律用語のボキャブラリーを作成します。訪問者はハイライトされた用語にマウスを合わせると、ページを離れることなく説明を見ることができ、複雑なコンテンツがよりアクセスしやすくなります。
多言語用語集のサポート
Glossifyはコンテンツの言語を尊重するため、翻訳されたタームは同じ言語のコンテンツのみにマッチします。ボキャブラリーにターム翻訳を作成して、多言語サイト全体で言語に適したグロッサリー化を提供します。
柔軟なマッチングのための同義語の使用
ボキャブラリーまたはコンテンツタイプに同義語を格納する複数値テキストフィールドを追加します。このフィールドを使用するようにフィルターを設定すると、メインタームとすべての同義語の両方がツールチップ/リンクをトリガーします。例えば、'Drupal CMS'、'Drupal'、'D10'はすべて同じDrupalタームページにリンクできます。
Tips
- 最良の結果を得るには、GlossifyフィルターをHTML修正フィルターの後、他のテキスト変換フィルターの前に配置してください
- 複数のテキストフィルターを有効にしている場合は、フィルターのウェイトを使用して処理順序を制御してください
- 多くのタームがあるサイトでパフォーマンスを向上させるには、「First match only」を有効にして処理オーバーヘッドを減らすことを検討してください
- ボキャブラリーからすべてのタームと説明を表示する専用の「用語集」Viewを作成してください
- URLパターン設定を使用して、デフォルトのエンティティパスの代わりに/glossary/[id]のようなカスタムパスにリンクしてください
- CSSスタイリングと組み合わせてツールチップとリンクを視覚的に区別してください(.glossify-tooltip-tipと.glossify-tooltip-linkクラスを対象に)
- tip_rawテンプレート変数は、フォーマットされたコンテンツを安全にレンダリングできるカスタムテンプレート実装のためにHTMLを保持します
Technical Details
Admin Pages 1
/admin/config/content/formats/manage/{filter_format}
任意のテキストフォーマットの設定内でGlossifyフィルターを設定します。フィルターを有効にし、「フィルター設定」セクションで設定オプションにアクセスします。
Hooks 4
hook_query_glossify_taxonomy_tooltip_alter
glossify_taxonomyフィルター用のタクソノミータームを取得するデータベースクエリを変更します。特定のタームを含めたり除外したりするための条件、結合、または式を追加できます。
hook_query_glossify_node_tooltip_alter
glossify_nodeフィルター用のノードを取得するデータベースクエリを変更します。カスタム条件に基づいてノードをフィルタリングできます。
hook_query_glossify_commerce_product_tooltip_alter
glossify_commerce_productフィルター用のコマース製品を取得するデータベースクエリを変更します。
hook_glossify_taxonomy_vocabs_alter
処理前にglossify_taxonomyフィルターで使用されるボキャブラリーマシン名のリストを変更します。
Troubleshooting 6
以下を確認してください:1)コンテンツに使用されているテキストフォーマットでフィルターが有効になっている、2)フィルター設定で少なくとも1つのボキャブラリー/コンテンツタイプが選択されている、3)ソースエンティティが公開されており正しい言語である、4)大文字小文字の区別設定がコンテンツと一致している、5)タームが完全な単語として出現している(別の単語の一部ではない)。
フィルター設定で「First match only」オプションを有効にして、フィールドごとに各タームの最初の出現のみを処理するようにします。
「Ignore tags」設定にタグ名を追加して(例:h1,h2,h3,strong)、それらの要素内でのマッチを防ぎます。
テキストを'glossify-exclude'クラスを持つspanまたは他の要素でラップします:<span class="glossify-exclude">ターム</span>。CKEditorのStyleプラグインを設定して、エディターがこれを簡単にできるようにします。
同義語フィールドが以下を満たしていることを確認してください:1)Text(plain)フィールドタイプである、2)選択されたすべてのボキャブラリー/コンテンツタイプに存在する、3)マッチさせたいエンティティに値が保存されている。
Drupalキャッシュをクリアしてください。Glossifyはエンティティが変更されたときに無効化するためにキャッシュタグを使用しますが、場合によっては手動でキャッシュをクリアする必要があります。