Titel und alternativen Text automatisch zum Bild hinzufügen?


6

Auf meiner Website können Benutzer Inhalte und auch Bilder hochladen.

Mein Ziel ist es, dass, wenn ein Benutzer Inhalte auf die Website und auch ein Bild hochlädt, der Titel des Inhalts auch der Bildtitel und der alternative Text des Bildes ist. Derzeit verwende ich das Kernbildfeld.

Gibt es einen Weg oder ein Modul, das all das erreichen kann?

Antworten:


10

Der direkteste Weg könnte darin bestehen, in hook_node_presave () in einem benutzerdefinierten Modul etwas in diese Richtung zu tun :

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;
  }

}

Wo field_imageist der tatsächliche Name des Bildfelds, das Sie in Ihrem Knoten haben?

Wenn Sie nicht möchten , dass Ihre Benutzer zu sehen oder zu versuchen, dies zu ändern, so stellen Sie sicher , dass die altund titleBoxen sind nicht im Feld Setup überprüft, zum Beispiel:

Geben Sie hier die Bildbeschreibung ein

da dies nur für das Feld Widget hinzufügen / bearbeiten im Formular ist; Der obige Code funktioniert auch dann noch, wenn diese Attribute nicht "aktiviert" sind.


Ist es möglich, den Standard-Alternativtext als Namen der Bilddatei ohne Erweiterung festzulegen? Dies kann hilfreich sein, wenn auf einer Website Millionen von Alternativtexten fehlen.
CocoSkin

1
@CocoSkin, sicher. Wenn Sie das tun wollten, würde ich theme_image ( api.drupal.org/api/drupal/includes%21theme.inc/function/… ) untersuchen und es in Ihrem Thema überschreiben, z. B. wenn alt nicht festgelegt ist, greifen Sie zu Name vom Pfad, massieren Sie es nach Ihren Wünschen und verwenden Sie es dann für den
Alternativtext

Ich hoffe, ich störe dich nicht so sehr. Bedeutet dies, dass es sich um denselben Code wie oben handelt, jedoch "function theme_image ($ node)" anstelle von "function YOURMODULE_node_presave ($ node)" verwendet? Wenn ja, was ist mit $ path? und $ alt?
CocoSkin

Kein Problem, Sie würden eine Funktion in Ihrem Thema namens THEME_image (....) erstellen, wie in der API beschrieben, und diese anstelle von MODULE_node_presave (....) verwenden
Jimajamma

6

Sie können ImageField-Token verwenden :

Das ImageField-Token-Modul erweitert die Standardfunktionalität von Bildfeldern um die Möglichkeit, Standardwerte anzugeben und Knotentoken im Alt- und Titeltext zu verwenden.

Geben Sie hier die Bildbeschreibung ein


Es sieht so aus, als ob ein Modul jetzt nicht gewartet wird. Aber die Entwicklerversion funktioniert gut.
Milkovsky

1

Hier ist eine D7-Regel, die ich erstellt habe, um genau das zu tun. Gehen Sie einfach zu Regeln> Importieren und Speichern . Fügt die Token [node:title]und automatisch zum [site:name]Alternativtextfeld hinzu, wenn Inhalte gespeichert oder aktualisiert werden:

{ "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

Es gibt zwei einfache Methoden, um dies zu erreichen:

Methode 1 ist einfacher; Konfigurieren Sie Ihr Dateientitätsmodul und ersetzen Sie in den Attributfeldern alt und title das Token, durch [current-page:title]das sich auch eines der verfügbaren Token befindet

Bitte beachten Sie: Bei dieser obigen Methode werden die Titel- und Attributfelder ersetzt, wenn die Felder leer sind. Wenn zu irgendeinem Zeitpunkt Text in sie eingegeben wird, wird dieser Text stattdessen verwendet.

Methode 2 verwendet Regeln, um dies zu erreichen, und dies ist wie folgt:

  1. Erstellen Sie Regeln mit folgenden Ereignissen:

    ein. nach dem Speichern neuer Inhalte

    b. nach dem Aktualisieren vorhandener Inhalte

  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. Sie können auch andere Bedingungen hinzufügen, um zu überprüfen, ob die Felder leer sind oder nicht ("Datenwert ist leer ..."), damit Sie den vorhandenen Text in den Feldern nicht ändern. Dies ergibt eine bessere Kontrolle als Methode 1 oben.

  3. Fügen Sie hier 2 Aktionen hinzu, um Ihre Datenwerte für Alt- und Titelfelder mithilfe des Knotentitels festzulegen.

Für eine noch feinere Steuerung können Sie das Modul " Bedingte Regeln " installieren , um zu überprüfen, ob beide oder eines der Attribute alt und title ausgefüllt wurden (Beispielszenario lautet "Wenn alt NICHT leer ist und title leer ist, Titelattribut aktualisieren" oder "if" alt ist leer und Titel ist NICHT leer, alt Attribut aktualisieren ... etc).

Wenn Sie das Modul für bedingte Regeln nicht installieren möchten, aber dennoch eine bessere Kontrolle beim Überprüfen leerer Felder wünschen, erstellen Sie einfach zwei verschiedene Regeln, um beide Felder unabhängig voneinander zu überprüfen.

  1. Speichern Sie Ihre Regel. das ist es.

Sie können diese von mir erstellte Regel auch einfach importieren, indem Sie die oben beschriebenen einfachen Schritte ausführen. Beachten Sie, dass mein Feld "field_image" heißt und mein Inhaltstyp "article" ist:

{ "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]" } }
    ]
  }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.