كيف يمكنني تمرير الحجج إلى drupal_get_form()
في Drupal 7؟
function new_menu_callback() {
$vars = some_example_function(); // returns: array(1 => 'one', 2 => 'two');
$output = $vars[2];
$output .= drupal_render(drupal_get_form('new_form'));
}
function new_form($form, &$form_state) {
// How can I access $vars[1] from new_menu_callback() here?
}
فقط اضف $vars
كوسيطة ثانية.
drupal_get_form('new_form', $vars);
و ...
function new_form($form, &$form_state, $vars) {
// ...
اقتباس من drupal_get_form ()
... يتم تمرير أي وسيطات إضافية إلى الدالات التي تسمى بواسطة drupal_get_form () ، بما في ذلك دالة مُنشئ النموذج الفريدة. على سبيل المثال ، يتطلب نموذج node_edit تمرير كائن عقدة هنا عند استدعائه. هذه متاحة لتطبيقات hook_form_alter () و hook_form_FORM_ID_alter () مثل الصفيف $ form_state ['build_info'] ['args'].
الوسائط الإضافية التي تمررها إلى drupal_get_form()
متاحة في $form_state['build_info']['args']
، ولكن لا يمكنك إجراء مكالمات وظيفية في page arguments
. أود أن أقترح النهج التالي:
function mymodule_menu() {
$items = array();
$items['mymodule/example'] = array(
'page callback' => 'drupal_get_form',
'page arguments' => array('mymodule_form'),
);
return $items;
}
function mymodule_form($form, &$form_state) {
// this function now uses dev/user friendly named keys
$vars = mymodule_example_function();
$form = array();
$form['heading'] = array(
'#markup' => check_plain($vars['heading']),
);
// use other arguments here
return $form;
}
باقي ما تحتاجه في مرجع API API
كان لدي مشكلة مماثلة وتم حلها بمزيج من إجابة @ kalabro وطريقتي الخاصة للتعامل معها.
لذلك لدي في الأساس صفحة هبوط ثابتة حيث أستخدم الرموز المميزة. في hook_tokens
أتصل باستمارة التسجيل عبر $form = drupal_get_form('user_register_form', 'register-test');
.
وأخيرًا في hook_form_alter ، أتحقق مما إذا كانت السلسلة "تسجيل اختبار". يتم ذلك عن طريق $form_state['build_info']['args'][0]
. هنا الوظيفة:
function hook_form_user_register_form_alter(&$form, &$form_state, $form_id) {
...
if ($form_state['build_info']['args'][0] == 'register-test') {
// manipulate the form as usual
$form['...
}
...
}