【问题标题】:Override form using PHPTemplate使用 PHPTemplate 覆盖表单
【发布时间】:2024-01-08 16:19:02
【问题描述】:

我想知道如何使用 PHPTemplate 覆盖表单在 Drupal 7 中的外观。我在页面上显示所有信息时遇到了一些困难。

我有一个包含表单和一些杂项信息的页面。

我试过了:

foo.module

function foo_add_form($form, &$form_state, $foo) {

  ...

  $form['#theme'] = 'foo_add';

  return $form;
}

function foo_theme($existing, $type, $theme, $path) {
  return array(
    'foo_add' => array(
      'template' => 'foo-add',
      'render element' => 'form',
    ),
  );
}

foo-add.tpl.php

<?php
    // First form
    print drupal_render_children($form);
?>
<!-- Miscellaneous information -->
    <div id="links">
        <ul>...</ul>
        <form action="#" method="post" id="second-form">
            <fieldset id="i-want">
             ...
                </fieldset>
                    ...
            </form>
    </div>

目前正在显示表格和其他信息。但是,第二种形式(id="second-form")正在以某种方式被删除。我可以在源代码中看到它,但是当我使用 chrome/firefox 检查元素时,我再也看不到表单元素了。不过我可以看到 div、ul 和 fieldset 标签。

以前有人做过吗?

【问题讨论】:

    标签: drupal templates forms themes


    【解决方案1】:

    通常,您不会在主题层添加到表单。相反,您将使用自定义模块,实现 hook_form_alter 来修改表单。

    【讨论】:

    • 表单是在我的自定义模块中制作的,所以实现hook_form_alter来修改表单不是很奇怪吗?目前它有点像我上面描述的那样工作。唯一的问题是第二个表单标签在渲染后以某种方式被删除(javascript?)。