Drupal 7 - 不使用节点表单模板

Drupal 7 - node Form template is not used

我对一种节点类型及其形式有疑问。我想用模板文件改变它。我已经在我的 drupal 站点上使用另一种节点类型完成了此操作并且有效,但它不适用于第二种类型。

所以(就像我对其他节点类型所做的那样)我将这个挂钩放在我的模块中:

function MY_MODULE_theme($existing, $type, $theme, $path) {
  return array(
    'FORM_ID' => array(
      'arguments' => array(
          'form' => NULL,
      ),
      'render element' => 'form',
      'template' => 'TYPE-node-form',
      'path' => drupal_get_path('module', 'MY_MODULE'),
    ),

  );
}

并且还声明了这个函数(在我的模块中):

function template_preprocess_TYPE_node_form(&$variables) {
   /* Some hide(elements) and stuff */
}

当然,我在模块目录

中创建了文件 TYPE-node-form.tpl.php
/* Something */
TEST
    <?php if($form): ?>
      <?php print drupal_render_children($form); ?>
    <?php endif; ?>
/* Something more */

但它不加载此模板(我看不到 TEST 和其他内容)。同样经过多次清除缓存和刷新。

使用 DisplaySuite,我能够在后端设置模板(管理 » 结构 » 内容类型 » 类型 » 管理字段)。但我想拥有自己的模板文件(并且也不位于 sites/all/modules/ds/layout/.. 文件夹中)。停用 DisplaySuite 也不起作用。 我也试图将 MY_THEME_theme() 代码放入管理员主题的 template.php 文件中,但它也没有用。

有什么建议吗?我能做什么?有没有办法找出使用了哪个模板或在哪里被覆盖?我读过 Themes overwrite modules templates declaration?!

如果您使用的是 D7,hook_theme 实现没有 'arguments' 键,但是 'variables'

同样在这种情况下,删除 'arguments''variables' 键以使 'render element' 起作用。希望这会有所帮助。

最终代码:

function MY_MODULE_theme($existing, $type, $theme, $path) {
   return array(
     'FORM_ID' => array(
        'render element' => 'form',
        'template' => 'TYPE-node-form',
        'path' => drupal_get_path('module', 'MY_MODULE'),
     ),
   );
}