【问题标题】:Drupal 7 - how to add another button to a webform?Drupal 7 - 如何向网络表单添加另一个按钮?
【发布时间】:2013-02-14 02:38:28
【问题描述】:

我想知道,除了提交按钮之外,有谁知道我如何在 Drupal 7 中的网络表单中添加另一个按钮?我尝试通过谷歌浏览并在 Drupal 论坛上提出这个问题,但没有运气。有人可以帮忙吗?

【问题讨论】:

    标签: php drupal button add drupal-webform


    【解决方案1】:

    Webform 是一个 drupal 表单,您可以使用 hook_form_alter:假设您有一个名为 mymodule 的自定义模块,并且您的 webform id 是“webform_client_form_XXXXX”。然后使用下面的示例代码。

    /**
     * Implements hook_form_alter.
     */
    function mymodule_form_alter(&$form, &$form_state, $form_id) {
      switch ($form_id) {
        case 'webform_client_form_XXXXX':
          $form['actions']['custom_submit']  = array(
            '#type' => 'submit',
            '#value' => t('Custom Button'),
            '#submit' => array('mymodule_custom_submit'),
          );
          $form['#validate'][] = 'mymodule_custom_validate';
          break;
      }
    }
    /**
     * Custom validation handler for your webform.
     */
    function mymodule_custom_validate($form, &$form_state) {
      // your validation code
    }
    /**
     * Custom submit handler for your form
     */
    function mymodule_custom_submit($form, &$form_state) {
      // your submit handler code
    }
    

    更新:

    您必须将上述代码中的 mymodule 实例替换为 yoru 模块的名称。我也稍微修改了 hook_form_alter。我建议你将提交按钮移到$form['actions'] 下,这样它就会出现在当前提交按钮旁边。

    清除缓存:

    访问/admin/config/development/performance并点击清除所有缓存按钮。

    要找到我们的form-id:

    This 网上教程讨论如何找到表单id。请注意,表单标签中使用的 id 将带有“-”(连字符),必须将其替换为“_”(下划线)才能获得表单 ID。

    另一种方法是打印 hook_form_alter 中的 $form_id 变量(我们在上面定义的函数)并访问 webform 页面。如果该页面上没有其他表单,则打印的 id 将是与 webform 对应的那个。如果启用 devel 模块,那么使用优秀的 krumo 库更容易显示调试信息。

    /**
     * Implements hook_form_alter.
     */
    function mymodule_form_alter(&$form, &$form_state, $form_id) {
      // Below function would print out the form id in message area if devel module
      // is enabled on the site.
      dpm($form_id);
      switch ($form_id) {
    

    之后删除dpm( $form_id );

    【讨论】:

    • 我创建了一个 Webform Extra 模块,并添加了此代码。但是,自定义按钮仍然没有出现。有什么我做错了吗?
    • 您是否将 mymodule 的所有实例都替换为 webform_extra?提示:有五个 :) 其中 webform_extra 是您的模块名称。还要确保清除缓存以识别挂钩。还要确保您在 switch 语句中使用了 webform 的确切 ID,而不是 webform_client_form_XXXXX
    • 是的,我用 webform_extra 替换了 mymodule 的所有实例。现在,如何清除缓存挂钩,以及在哪里可以找到网络表单的 ID?
    • 我在回答您的问题时添加了更多细节:)
    • 感谢您的所有帮助。这显然可行,但是,我更愿意将自定义按钮放在提交按钮的右侧而不是左侧。
    【解决方案2】:

    知道 webform id 比上述方法更容易。您只需转到:content->webforms 并将鼠标光标放在属于您想要 id 的 webform 的编辑选项上。 在导航器屏幕下方,将出现格式 node/id 的原始路径。该节点号是 webform_client_form_XXX 中的 XXX。

    【讨论】:

      【解决方案3】:

      您可以在网络表单中使用类型标记。为标记设置主题,因为它看起来与提交按钮相同。

      并为此编写 JS。例如,您想提供重置按钮,然后 onclick 事件应该清空这些字段中的值。试试这个。

      【讨论】:

      • 谢谢。但是,我希望它位于提交按钮的右侧而不是其上方。我认为标记不可能做到这一点。
      • 虽然它可能不会在右侧呈现,但您可以使用 CSS 将其向右移动。
      【解决方案4】:

      首先在 webform 中为按钮创建标记,然后使用 java 脚本单击此按钮,它会根据您的要求处理请求。

      【讨论】:

      • javascript 用于在客户端处理请求。按钮用于提交表单并在服务器端处理请求。所以我猜你必须使用 ajax 和自定义菜单处理程序来处理提交......这是一个漫长的过程。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      相关资源
      最近更新 更多