Ini pendekatan lain.
Dalam contoh saya, saya membuat built-in user_profile_form()
, dan hanya menghapus bidang yang tidak perlu. Ini bagus karena dengan cara ini fungsi validasi Drupal dipanggil, kekuatan kata sandi berbasis JavaScript DAN indikator pencocokan kata sandi juga diberikan, dan label dan deskripsi bidang sama dengan pada formulir edit pengguna (kecuali bahwa di sini saya mengeluarkan -mail mengubah teks), tetapi Anda juga bisa mengubahnya, jika Anda mau.
Hasilnya akan terlihat seperti ini:
( Layar penuh )
Formulir ini akan terlihat di example.com/change-password
jalur (tentu saja, example.com
harus diganti dengan domain Anda), dan saya juga akan mendefinisikan blok untuk itu.
/**
* Implements hook_menu().
*/
function YOURMODULENAME_menu() {
$items = array();
$items['change-password'] = array(
'title' => t('Change password'),
'description' => t('You can change your password here.'),
'page callback' => 'YOURMODULENAME_render_user_pass_change_form',
'access arguments' => array('access content'),
);
return $items;
}
/**
* Render the password changing form with the usage of Drupal's built-in user_profile_form
*
* @global type $user
* @return array The rendered form array for changing password
*/
function YOURMODULENAME_render_user_pass_change_form() {
global $user;
if (!user_is_logged_in()) {
drupal_access_denied();
}
module_load_include('inc', 'user', 'user.pages');
$form = drupal_get_form('user_profile_form', $user);
$request_new = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'))));
$current_pass_description = t('Enter your current password to change the %pass. !request_new.', array('%pass' => t('Password'), '!request_new' => $request_new));
$form['account']['current_pass']['#description'] = $current_pass_description;
unset(
$form['account']['name'],
$form['account']['mail'],
$form['account']['status'],
$form['account']['roles'],
$form['locale'],
$form['l10n_client'],
$form['picture'],
$form['overlay_control'],
$form['contact'],
$form['timezone'],
$form['ckeditor'],
$form['metatags'],
$form['redirect']
);
return $form;
}
define('PASSWORD_CHANGING_BLOCK', 'password_changing_block');
/**
* Implements hook_block_info().
*/
function YOURMODULENAME_block_info() {
$blocks = array();
$blocks[PASSWORD_CHANGING_BLOCK] = array(
'info' => t('Block for changing password'), //The name that will appear in the block list.
'cache' => DRUPAL_CACHE_GLOBAL, // The block is the same for every user on every page where it is visible.
);
return $blocks;
}
/**
* Implements hook_block_view().
*
* Prepares the contents of the block.
*/
function YOURMODULENAME_block_view($delta = '') {
switch ($delta) {
case PASSWORD_CHANGING_BLOCK :
if(user_is_logged_in()){
$block['subject'] = t('Change Password');
$block['content'] = drupal_get_form('YOURMODULENAME_render_user_pass_change_form');
}
break;
}
return $block;
}
Tentu saja, gantilah YOURMODULENAME
dengan nama modul Anda sendiri (bahkan di dekat 'page callback'
dan saat menelepon drupal_get_form
)! Anda juga dapat menghapus bidang lain jika perlu (mis. Lebih banyak bidang ditampilkan melalui modul lain).
Bersihkan cache setelah memasukkannya ke dalam kode Anda.
Setelah ini, Anda cukup merender formulir ini dengan menelepon drupal_get_form('YOURMODULENAME_render_user_pass_change_form');
.