Php Drupal模块-块中的表单未应用模板
帮我弄清楚为什么我的表单没有被命名为la sites/all/modules/pecapture/themes/pecapture-displayform.tpl.php 这是我的密码:Php Drupal模块-块中的表单未应用模板,php,drupal,Php,Drupal,帮我弄清楚为什么我的表单没有被命名为la sites/all/modules/pecapture/themes/pecapture-displayform.tpl.php 这是我的密码: /** * Implementation of hook_theme() */ function pecapture_theme() { $path = drupal_get_path('module', 'pecapture') . '/theme'; return array( 'pec
/**
* Implementation of hook_theme()
*/
function pecapture_theme() {
$path = drupal_get_path('module', 'pecapture') . '/theme';
return array(
'pecapture_displayform' => array(
'arguments' => array('form' => NULL),
'template' => 'pecapture-displayform',
'path' => $path,
),
);
}
基本上,这表示主题文件位于module/theme文件夹($path)中
有一个主题函数pecapture\u displayform($form=NULL),使用主题($pecapture\u displayform',$form)调用,其中$form是Drupal表单数组
$path中有一个模板文件pecapture_displayform.tpl.php
function pecapture_block($op = 'list', $delta = 0, $edit = array()) {
$block = array();
if ($op == "list") { // Generate listing of blocks from this module, for the admin/block page
$block[0]["info"] = t('Persistent E-mail Capture Form Block');
}
else /* if ($op == 'view') */ { // Generate our block content
$block['subject'] = ''; //'Persistent E-mail Capture Form';
$block['content'] = pecapture_displayForm();
}
return $block;
} // function pecapture_block
这表示在查看块时,使用函数pecapture_displayForm()生成内容$块获取php print()文件
这表示返回html格式的drupal表单数组(用于输出)
这是表格内容,很典型
我尝试过在pecapture_displayform中显式调用主题函数:返回主题('pecapture\u displayform',$form)代码>
和
返回主题('pecapture_displayform',drupal_get_form($form))代码>
那么为什么表单没有经过pecapture-displayform.tpl.php呢?从模块创建主题有两种基本方法——使用主题函数或使用模板。在这两种情况下,您都需要在模块的hook_theme函数中注册主题(pecapture_theme
)。您的示例的这一部分看起来是正确的
如果注册主题函数,则创建主题函数,并将其称为theme\u themename
。如果你注册了一个模板(就像你做的那样),你可以使用一个可选的模板预处理函数和一个模板。模板预处理函数称为Template\u preprocess\u themename
,通过引用传递一个变量数组,然后传递给模板。此外,您不应该直接调用主题函数。始终使用theme('themename',$args)
访问主题,以便drupal能够正确处理它(允许重写和正确的变量预处理)
因此,首先,看起来您正试图直接调用drupal无法识别为主题函数的主题函数。其次,您使用的是一个模板,因此如果要在将表单发送到模板之前处理表单,则需要一个名为template\u preprocess\u pecapture\u displayform(&$vars)
的函数。另外,请确保模板名为pecapture-display.tpl.php,以便它与您在hook_主题中提供的名称(扩展名除外)完全匹配
此外,看起来您正在尝试设置窗体的主题。因此,您需要告诉drupal_get_form
使用您的主题,方法是在表单函数中包含$form['#theme']='pecapture_displayform'
。您可以通过调用drupal\u render($form['element'])
输出主题中的各个表单元素,调用drupal\u render($form)
将渲染任何剩余的未渲染元素(drupal会跟踪这些元素,以便它们不会被渲染两次)
有关设置窗体主题的详细信息,请参见
只要在表单函数中指定了主题,就不需要显式地调用它,因此应该可以这样做
$block['content'] = drupal_get_form('pecapture_blockform');
在块钩子中。清除缓存了吗?或者主题注册表重建?这看起来像我想要的。。。我将在星期一试一试$block['content']=drupal_get_form('pecapture_blockform');工作得很好。非常感谢。
function pecapture_blockform(&$form_state) {
/* the form, standard ... */
$block['content'] = drupal_get_form('pecapture_blockform');