нужны советы по значению формы Drupal $ - PullRequest
0 голосов
/ 14 апреля 2010

У меня работает dpm ($ form). Ницца! Это гораздо лучший способ просмотра данных. Я все еще пытаюсь выяснить, откуда поступает материал, например: местоположение долгота и широта. Слово «долгота» упоминается в 20 разных местах. Я подумал, что это вероятное место для выделения текстового поля для этого поля ввода. пм ($ форма [ '# field_info'] [ 'field_store_latitude'] [ 'location_settings'] [ 'форма'] [ 'поля']);

Какие-нибудь советы о том, как отследить отдельные элементы ввода?


** это не ответ, а дополнение к моему первому вопросу **

привет googletorp -

Я пытаюсь изменить существующие формы, используя hook_form_alter.

После нескольких часов возни, я могу отключить раздел местоположения (долгота / широта) формы, подобной этой:

незадана ($ форма [ 'field_store_latitude']);

Однако отключение только такой широты не работает:
снята с охраны ($ форма [ 'field_store_latitude'] [ '0'] [ '# location_settings'] [ 'форма'] [ 'поля'] [ 'locpick']);

Я не могу найти простой способ связать id и имена в html-источнике с массивами, созданными Krumo. В этом случае идентификатор называется «edit-field-store-latitude-0-locpick-user-latitude».

Мне нужен рецепт или руководство для идентификации элементов формы в форме Drupal.


Кажется, я нашел решение

<code><?php

    // allows you to alter locations fields, which are tricky to access.
    // this will require a patch in location module described here:
    // http://drupal.org/node/381458#comment-1287362

    /**
    * Implementation of custom _element_alert() hook.   
    */

    function form_overrides_location_element_alter(&$element){

        // change some location descriptions
         $element['locpick']['user_latitude']['#description'] = '&nbsp;' . t('Use decimal notation.');
         $element['locpick']['user_longitude']['#description'] = '&nbsp;' . t('See <a href=!url target=_blank>our help page</a> for more information.', array('!url' => url('latlon_help')));

        // or make them disappear entirely
        unset($element['locpick']['user_longitude']);
        unset($element['locpick']['user_latitude']);
    }


    /**
    * Implementation of form_alter hook.    
    */

    function form_overrides_form_alter(&$form, $form_state, $form_id) {
    switch ($form_id) {

        case 'user_profile_form':
            // change titles in user profile form
             $form['account']['name']['#title'] = t('Login Name');         
             $form['account']['mail']['#title'] = t('Email');          
        break;

        case 'retailer_node_form':      
        // let's check what is supposed to be here...
            print '<pre>';
            //print_r($form);
            dsm($form);
            print '
'; // это работает, чтобы удалить город снята с охраны ($ форма [ 'field_myvar_latitude'] [ '0'] [ '# location_settings'] [ 'форма'] [ 'поля'] [ 'город']); // попробуем свойство #after_build $ Форма [ '# after_build'] [] = 'mymodule_after_build_mynode'; перерыв; } } function mymodule_after_build_mynode ($ form, $ form_values) { // Это не будет работать для полей местоположений вернуть форму $; } `введите код здесь`

1 Ответ

0 голосов
/ 15 апреля 2010

Так что есть хитрый способ изменить поле местоположения, вам нужно использовать обратный вызов #after_built:

/**
 * Implements hook_form_alter().                                     
 */
function mymodule_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'x_node_form') {
    // alter the location field
    if (isset($form['locations'])) {
      $form['locations']['#after_build'][] = 'mymodule_alter_location_field';
    }
  }
}

/**
 * Remove the delete checkbox from location element.
 */
function mymodule_alter_location_field($form_element, &$form_state) {
  $location = $form_element[0]; // The location field which you can alter
  return $form_element;
}
...