【问题标题】:Drupal 7 - node Form template is not usedDrupal 7 - 未使用节点表单模板
【发布时间】:2017-01-11 16:58:04
【问题描述】:

我对一种节点类型及其形式有疑问。我想用模板文件来改变它。我已经在我的 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文件中,也没有成功。

有什么建议吗?我能做些什么?有没有办法找出使用的模板或覆盖的位置?我读过主题覆盖模块模板声明?!

【问题讨论】:

    标签: php forms templates drupal drupal-7


    【解决方案1】:

    如果您使用 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'),
         ),
       );
    }
    

    【讨论】:

    • 感谢您的回复,我已删除该元素,但仍然无法正常工作。
    • 也许还有其他东西覆盖了您的主题/模板。这是我测试过的代码示例:function MY_MODULE_theme() { return array( 'article_node_form' =&gt; array( 'render element' =&gt; 'form', 'template' =&gt; 'article-node-form', 'path' =&gt; drupal_get_path('module', 'MY_MODULE') ) ); },在 MY_MODULE 模块的根目录中有一个article-node-form.tpl.php 文件。
    • 但我没有找到它被覆盖的地方。我必须在哪里看?前端和后端主题 template.php 文件?有没有更简单的方法来找出实际使用的模板?
    • 为什么function template_preprocess_TYPE_node_form(&amp;$variables) 也不起作用?
    • 感谢@Claudiu Chirilov,它有效。包括一个非常严重的错误,我不想在这里分享。 ;) 模板有效,但预处理钩子仍然无效。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多