Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Drupal模块-块中的表单未应用模板_Php_Drupal - Fatal编程技术网

Php Drupal模块-块中的表单未应用模板

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

帮我弄清楚为什么我的表单没有被命名为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(
    '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');