タイトルと代替テキストを画像に自動的に追加しますか?


6

私のサイトでは、ユーザーはコンテンツと画像もアップロードできます。

私の目標は、ユーザーがサイトにコンテンツをアップロードするときに、画像も含めることです。コンテンツのタイトルは、画像のタイトルと画像の代替テキストにもなります。現在、コア画像フィールドを使用しています。

それをすべて達成できる方法またはモジュールはありますか?

回答:


10

最も直接的な方法は、カスタムモジュールのhook_node_presave()でこれらの行に沿って何かを行うことです。

function YOURMODULE_node_presave($node) {

  if(isset($node->field_image)) {
    $node->field_image[LANGUAGE_NONE][0]['alt']=$node->title;
    $node->field_image[LANGUAGE_NONE][0]['title']=$node->title;
  }

}

どこfield_imageあなたのノードを持っているイメージフィールドの実際の名前です。

ユーザーに表示されないようにしたり、これを変更したくない場合は、フィールドの設定でalttitleボックスがチェックされていないことを確認してください。例:

ここに画像の説明を入力してください

これは、フォーム内のフィールドの追加/編集ウィジェット専用です。上記のコードは、これらの属性が「有効」にされていなくても機能します。


デフォルトの代替テキストを拡張子なしの画像ファイルの名前に設定することは可能ですか?これは、何百万もの代替テキストが欠落しているWebサイトの場合に役立ちます。
CocoSkin 2014

1
@CocoSkin、確かに。それをしたい場合は、theme_image(api.drupal.org/api/drupal/includes%21theme.inc/function/…)を調べて、テーマでオーバーライドします。たとえば、altが設定されていない場合は、パスから名前を付け、好みに合わせてマッサージしてから、代替テキストに使用します
Jimajamma '27 / 09/27

そんなに気にしないでほしい。上記と同じコードになりますが、「function YOURMODULE_node_presave($ node)」の代わりに「function theme_image($ node)」を使用するという意味ですか?もしそうなら、$ pathはどうですか?そして$ alt?
CocoSkin 2014年

まったく問題ありません。APIで説明されているように、THEME_image(....)という名前のテーマで関数を作成し、MODULE_node_presave(....)の代わりにそれを使用します
Jimajamma

6

ImageFieldトークンを使用できます。

ImageFieldトークンモジュールは、画像フィールドのデフォルト機能を拡張して、デフォルト値を指定し、AltおよびTitleテキストでノードトークンを使用する機能を追加します。

ここに画像の説明を入力してください


モジュールは現在メンテナンスされていないようです。しかし、開発バージョンは正常に動作します。
milkovsky 2017年

1

これがまさにそのために作成したD7ルールです。[ルール]> [インポートと保存]に移動します。コンテンツが保存または更新される[node:title]と、と[site:name]トークンがaltテキストフィールドに自動的に追加されます。

{ "rules_alt_text_default" : {
    "LABEL" : "Alt Text Default",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "TAGS" : [ "Custom" ],
    "REQUIRES" : [ "rules" ],
    "ON" : { "node_insert" : [], "node_update" : [] },
    "IF" : [
      { "entity_has_field" : { "entity" : [ "node" ], "field" : "field_image" } }
    ],
    "DO" : [
      { "data_set" : {
          "data" : [ "node:field-image:alt" ],
          "value" : "[node:title] - Available at [site:name]"
        }
      }
    ]
  }
} 

0

これを達成するための2つの簡単な方法があります。

方法1の方が簡単です。ファイルエンティティモジュールを構成し、altおよびtitle属性フィールドで、トークンを[current-page:title]、使用可能なトークンの1つでもあるトークンに置き換えます。

注:上記のこの方法では、フィールドが空の場合、タイトルフィールドと属性フィールドが置き換えられます。フィールドにテキストが入力されると、代わりにそのテキストが使用されます。

方法2はルールを使用してこれを達成し、これは次のようになります。

  1. 次のイベントでルールを作成します。

    a。新しいコンテンツを保存した後

    b。既存のコンテンツを更新した後

  2. Add condition: "content is of type: (add your content type(s) here.....)" Note: without this condition, rules does not seem to pull out the alt and title attributes from your image field. フィールド内の既存のテキストを変更しないように、他の条件を追加してフィールドが空かどうかを確認することもできます( "using data value is empty ....")。これにより、上記の方法1よりも適切に制御できます。

  3. 2つのアクションを追加して、ノードタイトルを使用して、altフィールドとtitleフィールドの両方にデータ値を設定します。

さらに細かく制御するには、「条件付きルール」モジュールをインストールして、alt属性とtitle属性の両方または一方が入力されているかどうかを確認できます(例のシナリオは、「altが空ではなく、タイトルが空の場合、タイトル属性を更新する」または「if altは空で、タイトルは空ではありません。alt属性を更新してください...など)。

条件付きルールモジュールをインストールしないで、空のフィールドのチェックをより適切に制御したい場合は、2つの異なるルールを作成して、両方のフィールドを個別にチェックします。

  1. ルールを保存します。それでおしまい。

上記の簡単な手順を実行する、作成したこのルールをインポートすることもできます。私のフィールドは「field_image」という名前で、コンテンツタイプは「article」です。

{ "rules_update_image_alt_and_title_automatically" : {
    "LABEL" : "Update image alt and title automatically",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "node_update" : [], "node_insert" : [] },
    "IF" : [
      { "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "article" : "article" } } } }
    ],
    "DO" : [
      { "data_set" : { "data" : [ "node:field-image:alt" ], "value" : "[node:title]" } },
      { "data_set" : { "data" : [ "node:field-image:title" ], "value" : "[node:title]" } }
    ]
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.