2010-04-14 8 views
0

J'ai dpm ($ form) de travail. Agréable! C'est beaucoup mieux de voir les données. J'essaie toujours de savoir d'où proviennent les choses, par exemple: l'emplacement longitude & latitude. Le mot «longitude» est référencé dans 20 endroits différents. Je pensais que c'était un endroit probable pour isoler la zone de texte pour ce champ de saisie. dpm ($ form ['# field_info'] ['field_store_latitude'] ['location_settings'] ['formulaire'] ['champs']);

Avez-vous des astuces sur la façon de rechercher les éléments d'entrée individuels?


** ce n'est pas une réponse, mais un complément à ma première question **

salut googletorp -

Je suis en train de modifier les formes existantes à l'aide hook_form_alter.

Après plusieurs heures de farfouillé, je peux maintenant désactiver la section emplacement (longitude/latitude) d'une forme comme ceci:

unset ($ form [ 'field_store_latitude']);

Cependant, en éteignant simplement la latitude comme celui-ci, ne fonctionne pas:
unset ($ form [ 'field_store_latitude'] [ '0'] [ '# location_settings'] [ 'form'] [ 'champs'] ["locpick"]);

Je n'arrive pas à trouver un moyen facile de lier l'identifiant et les noms dans une source html avec des tableaux produits par Krumo. Dans ce cas, id est appelé "edit-field-store-latitude-0-locpick-user-latitude".

J'ai besoin d'une recette ou de lignes directrices pour identifier les élémets de forme sous forme Drupal.


Je pense que je clouées une solution

<?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 '</pre>';  

      // this works to remove the city 
      unset($form['field_myvar_latitude']['0']['#location_settings']['form']['fields']['city']); 

      // let's try #after_build property 
      $form['#after_build'][]='mymodule_after_build_mynode'; 

     break; 
    } 
    } 

function mymodule_after_build_mynode($form, $form_values) { 

    // This will not work for locations fields 

    return $form; 
}`enter code here` 
+0

Pouvez-vous être plus précis, que voulez-vous faire? Découvrez quels modules ont ajouté un champ de formulaire à un formulaire (le formulaire de noeud?)? – googletorp

Répondre

0

Donc, il y a façon sournoise de modifier le champ d'emplacement, ce que vous devez faire est d'utiliser la fonction de rappel #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; 
} 
+0

Ouch, Drupal est-il vraiment censé améliorer la productivité? ou sécurité d'emploi? – bert

+0

Le module de localisation est un module contrib, il ne fait donc pas partie du core. La façon dont il est construit est génial pour la maintenance, mais il est difficile de le contourner. – googletorp

Questions connexes