Ich ändere ein Formular in meinem benutzerdefinierten Modul. Code sieht so aus:
function my_module_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "someID") {
$form['field_charity_author']['und'][0]['value']['#value'] = arg(3);
//$form['field_charity_author']['#type'] = 'hidden';
}
}
Ich denke jedoch, dass Hardcodierung und
schlecht ist. Wie sollten Formularfelder in diesem Fall ordnungsgemäß geändert werden?
foreach
Schleife verwende. Wenn es nur LANGUAGE_NONE ist, ist das ein einzelner Lauf. Im Sinne von form_alter sollte es die Sprache des Formulars technisch ändern.Antworten:
Leider ist Ihre Selbstantwort nicht so universell. Feldsprache und Knotensprache sind nicht dasselbe.
Die Feldsprache wird nur benötigt, wenn Sie die Feldübersetzungs-API verwenden (z. B. Entitätsübersetzung ). Wenn Sie es verwenden, werden einige Felder in übersetzbar konvertiert.
Übersetzbare Felder haben einen Sprachcode, was wirklich Sinn macht. Ist das Feld jedoch nicht übersetzbar, lautet der Sprachcode immer (und für alle Inhaltstypen, Entitäten usw.) -
LANGUAGE_NONE
(am besten die KonstanteLANGUAGE_NONE
und nicht die Zeichenfolge'und'
).Mit Ihrer Lösung können Sie eine Situation erhalten, in der ein Knoten russisch ist, aber ein Feld des Knotens verwendet
LANGUAGE_NONE
.Glücklicherweise werden Felder mit dem
'#language'
Schlüssel an das Formular angehängt , das immer den richtigen Sprachcode enthält.Wenn Sie keinen Zugriff auf das angehängte Formular haben, können die API-Funktionen von Field Language hilfreich sein.
quelle
Wenn Sie den Entitätstyp und das Bundle kennen, verwenden Sie den folgenden Code, der field_language () aufruft. .
Es wird die richtige Sprache herausfinden und auf mehrsprachigen Websites funktionieren.
Schauen Sie sich auch field_get_items () an .
quelle
Das Ganze
und
ist eines der nervigsten Dinge in Drupal 7, die in der Praxis nicht so gut funktionierten wie bei der Entwicklung.Wie auch immer, Sie können die erste Sprache folgendermaßen erhalten
array_keys
:Das sollte die ganze Zeit funktionieren.
quelle
(Beantworte meine eigene Frage, falls es jemandem hilft. Die Antwort hat bei mir funktioniert.)
Ich kann folgende Zeile schreiben, um die Sprache zu erhalten:
quelle
Re: Kalabros Antwort
Sein Code hat bei mir nicht funktioniert - mein Code ist ein bisschen anders
[$ lang] [0] gab "u" zurück, aber der volle Wert von [$ lang] ist "und" und ich brauchte auch den ['value'] nicht, weil $ form ['FIELDNAME'] ['# language' ] war kein Array, es war eine Zeichenfolge.
quelle