1

template.php と user-profile-form.php を使用して編集プロファイル ビューをカスタマイズしました。すべて正しく表示されますが、[送信] (および [削除]) ボタンが表示されます。適応テーマを使用しており、次のように変更しました。

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']);

}

次に user-profile-form.tpl.php で:

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

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


</div>

アカウントの編集フォームが正しく表示されます。変数 (つまり、$timezone) を正常に追加/削除しようとしましたが、送信/削除がありません。何が問題なのかわかりません。変数「送信」と「削除」の名前を変更しようとしましたが、まだボタンが表示されません。もちろん、私は必要なたびにキャッシュをクリアしました(そうではありません)。ボタンを隠す JS もありません。 Panel のカスタム ブロックを介してこのフォームをレンダリングします。

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

多分パネルの問題???

どんなアイデアでも大歓迎です:)

読むためのThx

エルワン

4

2 に答える 2

3

「[アクション]」を忘れました..:

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

そして、「キャンセル」と呼ばれ、その #access パラメータが FALSE に送信されたため、「削除」ボタンは最初は表示されませんでした。Thx DPM ;)

さて、問題は、送信ボタンをトリガーすると、フォームが送信されず、ページをリロードするだけです。それも解決できたら更新します。

于 2012-11-27T22:27:49.400 に答える
3

非表示のフォーム要素をレンダリングするのを忘れているため、ページはリロードのみです。テンプレートの前処理でこれを行うには、次のようなものを使用できます。

    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 ...
    }

完了したら、テンプレート ファイルに $hidden 変数をレンダリングします。

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

そして、そこに行きます!

于 2013-01-31T21:31:25.917 に答える