أرغب في تصميم نموذج تسجيل المستخدم في Drupal 7 عن طريق إضافة ترميز جديد ، وما إلى ذلك. لا يمكنني معرفة كيفية القيام بذلك.
لقد اتبعت بعض البرامج التعليمية التي تشير إلى أنه يمكنك ببساطة استدعاء hook_theme في template.php ، واستخدام وظيفة السمة المقابلة:
function mytheme_theme(){
return array(
'user_register' => array(
'arguments' => array('form' => NULL),
),
);
}
function mytheme_user_register($form) {
// print, die, etc
}
ولكن هذا لا يفعل أي شيء ، بغض النظر عما أفعله في وظيفة theme_user_register()
، أو عدد المرات التي أمحو فيها ذاكرة التخزين المؤقت.
أي أفكار حول كيفية القيام بذلك في D7؟
اتضح أنني بحاجة إلى مجموعة من التغييرات:
اضطررت إلى تطبيق hook_form_alter()
في وحدة نمطية وتعيين النموذج #theme
خاصية:
function mymodule_form_user_register_form_alter(&$form, &$form_state, $form_id) {
$form['#theme'] = 'user_register';
}
ثم في template.php:
function mytheme_theme($existing, $type, $theme, $path){
return array(
'user_register' => array(
'render element' => 'form',
'template' => 'templates/user-register',
),
);
}
function mytheme_preprocess_user_register(&$variables) {
$variables['rendered'] = drupal_render_children($variables['form']);
}
ثم أضفت user-register.tpl.php مع الترميز المطلوب ، و
<?php echo $rendered; ?>
لطباعة النموذج.
تعريف وظيفة السمة المقدمة من تنفيذ hook_theme () خطأ:
&$variables
؛ في حالتك ، يجب عليك استخدام $form = $variables['form']
، بمجرد تحديد وظيفة السمة باستخدام فهرس الصفيف الذي أبلغت عنه في النقطة السابقة. شاهد ما تم فعله في theme_locale_date_format_form () (وظيفة السمة المستخدمة للنموذج المحدد بواسطة locale_date_format_form () ، والتي تم تعريفها في locale_theme () ، أو في theme_status_report () ، والذي تم تعريفه في system_theme () .أعتقد أن هذا ممكن دون الحاجة إلى القيام بأي وحدات. يوجد اقتراح موضوعي مدمج لصفحة تسجيل المستخدم وهو صفحة - مستخدم - register.tpl.php
يمكنك استخدام hook_form_alter
لتغيير عناصر النموذج وإضافة ترميز مخصص بإضافة عناصر نموذج ترميز. من الممكن أيضًا تعيين وظيفة السمة التي تريد استخدامها والتي يمكن أن تكون وظيفة السمة المخصصة الخاصة بك.
انظر FAPI لمزيد من التفاصيل.
هنا الوظيفة الدقيقة:
function hook_form_user_login_alter(&$form, &$form_state, $form_id) {
// Modification for the form with the given BASE_FORM_ID goes here. For
// example, if BASE_FORM_ID is "node_form", this code would run on every
// node form, regardless of node type.
// Add a checkbox to the node form about agreeing to terms of use.
$form['terms_of_use'] = array(
'#type' => 'checkbox',
'#title' => t("I agree with the website's terms and conditions."),
'#required' => TRUE,
);
}