Domanda

I've customized the edit profile view using template.php and user-profile-form.php All shows up correctly but the Submit (and Delete) button.. I'm using Adaptive Theme and I've modified like this :

template.php

function adaptivetheme_theme(&$existing, $type, $theme, $path) {

   return array(

    'user_profile_form' => array(
      'template' => 'templates/user-profile-form',
      'render element' => 'form',
    ),
   );
 }


function adaptivetheme_preprocess_user_profile_form(&$vars) {


  $vars['form']['account']['name']['#description'] = t('blabla');


  $vars['form']['submit']['#value'] = t('Save profile');
  $vars['form']['delete']['#value'] = t('Delete account');


  $vars['account'] = drupal_render($vars['form']['account']);
  $vars['theme_select'] = drupal_render($vars['form']['theme_select']);
  $vars['picture'] = drupal_render($vars['form']['picture']);
  $vars['signature_settings'] = drupal_render($vars['form']['signature_settings']);
  $vars['contact'] = drupal_render($vars['form']['contact']);
  $vars['timezone'] = drupal_render($vars['form']['timezone']);
  $vars['submit'] = drupal_render($vars['form']['submit']);
  $vars['delete'] = drupal_render($vars['form']['delete']);

}

then in the user-profile-form.tpl.php :

<div id="user-profile-form">

<?php echo $account; ?>
<?php echo $timezone; ?>
<?php echo $submit; ?>
<?php echo $delete; ?>


</div>

The edit form of the account shows correctly. I've tried adding/removing variables successfully (ie the $timezone) but the submit/delete are missing. I don't know what's wrong.. I've tried to change the name of the variables 'submit' and 'delete' but still no button shows up. Of course I've cleared the cache every times needed (and not). I have no JS hiding the buttons neither.. I render this form through a custom block in a Panel :

<?
module_load_include('inc', 'user', 'user.pages');
global $user;
print drupal_render(drupal_get_form('user_profile_form', $user));
?>

Maybe a problem with Panels ???

Any idea is appreciated :)

Thx for reading

Erwan

È stato utile?

Soluzione

I forgot the "[action]".. :

  $vars['submit'] = drupal_render($vars['form']['actions']['submit']);
  $vars['cancel'] = drupal_render($vars['form']['actions']['cancel']);

And 'Delete' button didn't show up at first because it's called "cancel", and its #access param was sent to FALSE. Thx DPM ;)

Now, the problem is that when I trigger the submit button, the form is not sent, it justs reload he page. I will update if I manage to solve that too.

Altri suggerimenti

The page is only reloading because you forget to render the hidden form elements. To do so in your template preprocess you can use something like that :

    function THEME_preprocess_user_profile_form(&$variables) {

         $hidden = array();

     foreach(element_children($variables['form']) as $key)
         {
        $type = $variables['form'][$key]['#type'];

    if($type == "hidden" || $type == "token"){
        $hidden[] = $variables['form'][$key];
    }       
     }

    $variables['hidden'] = $hidden;

    //Dont forget to report your variables like you already did ...
    }

Then when it s done render the $hidden variable in your template file

   <?php print render($hidden);?>

And there you go !

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top