[gelöst] hide() mit hook_form_alter in einem Location Fieldset
Eingetragen von Thomas-S. (41)
am 25.09.2015 - 12:31 Uhr in
am 25.09.2015 - 12:31 Uhr in
Folgendes klappt auf Anhieb:
function myfunction_form_alter(&$form, &$form_state, $form_id){
hide($form['body']);
}
Was gar nicht geht, wenn ich beispielsweise auf das Straßenfeld, welches aus dem Locationmodul kommt, ausblenden möchte.
function myfunction_form_alter(&$form, &$form_state, $form_id){
hide($form['field_beitrag_location_ort']['und'][0]['#location_settings']['form']['fields']['street']);
}
Per Dynamic address form und Postal Address gehts auch aber nicht mit Location.
Es ist sicherlich etwas kleines aber ich suche nun schon seit Stunden.
Vielen Dank im voraus für eure Antwort.
Anhang | Größe |
---|---|
street.jpg | 87.21 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
hide() in Formularen?
am 25.09.2015 - 18:17 Uhr
Versuch es mal statt mit hide() auf diese Weise:
$form['field_beitrag_location_ort']['und'][0]['#location_settings']['form']['fields']['street']['#access'] = FALSE;
Das geht auch nicht.
am 25.09.2015 - 21:01 Uhr
Das geht auch nicht.
Ok, dann versuch es mal mit
am 26.09.2015 - 06:35 Uhr
Ok, dann versuch es mal mit einer verzögerten Änderungsfunktion, etwa so:
function MYMODULE_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'MYNODETYPE_node_form') {
$form['#after_build'][] = 'MYMODULE_location_remove_street';
}
}
function MYMODULE_location_remove_street($form_element, &$form_state) {
$form_element['field_beitrag_location_ort'][0]['street']['#access'] = FALSE;
return $form_element;
}
Es gibt auch ne ausführliche Diskussion dazu auf d.o. https://www.drupal.org/node/378622, vielleicht findest Du da noch was Nützliches.
Location Field Array mal genau angeschaut
am 26.09.2015 - 11:45 Uhr
Hallo,
ich habs gelöst und mich mal anders herum herangetastet. Ist vielleicht für den einen oder anderen Interessant:
Ich hab mich mit:
print_r($form);
dann weiter mit:
print_r($form['LOCATION_FIELD_NAME']);
und so weiter...
print_r($form['LOCATION_FIELD_NAME']['und']);
print_r($form['LOCATION_FIELD_NAME']['und'][0]...);
herangetastet und geschaut, was übrig blieb.
Und so geht's:
if($form_id == 'MY_node_form') {
$form['LOCATION_FIELD_NAME']['und'][0]['#location_settings']['form']['fields']['street']['collect'] = FALSE;
}
Auch im Modul deklarierte Pflichtfelder werden, wenn sie ausgeblendet sind, nicht als Pflichtfelder behandelt.
Vielen Dank für deine schnellen Antworten!
Mit Hilfe des Devel-Moduls
am 26.09.2015 - 16:23 Uhr
Mit Hilfe des Devel-Moduls geht das aber schneller. Da kann man sich mit dsm($form) die komplette Struktur der Variablen zeigen lassen, sich durch die einzelnen Ebenen durchklicken und braucht nicht fünf Durchläufe.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *