【问题标题】:Drupal 6 passing variables from Forms to Content, how to?Drupal 6将变量从表单传递到内容,如何?
【发布时间】:2009-10-02 14:49:22
【问题描述】:

我用这个简单的表格创建了一个 BLOCK(左)。 现在我想在 PAGE(中心)上处理和显示结果 我该怎么做?

输入:

name = James
surname = Bond

我想要的输出:

<div style="color:red">Welcome, James Bond</div>

这是我编写并工作的一个 BLOCK。

<?php

echo drupal_get_form('myForm');

function myForm($form_state) {
 $form['name'] = array(
  '#type' => 'textfield',
  '#title' => t('Name'),
  '#size' => 20,
  '#maxlength' => 10
 );
 $form['surname'] = array(
  '#type' => 'textfield',
  '#title' => t('Surname'),
  '#size' => 20,
  '#maxlength' => 10
 );
 $form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Save')
 );
return $form;
}

function myForm_submit($form,&$form_state)
{
 //??
};

现在我需要显示输出:)。

请不要建议使用 VIEWS 或任何其他插件。

我想从内到外学习 Drupal。不是相反;)

【问题讨论】:

    标签: drupal variables forms drupal-6 drupal-fapi


    【解决方案1】:

    嗯,这在一定程度上取决于您想如何做事。由于您正在学习如何制作 drupal 模块,因此您可能希望从 hook_menu() 的实现开始。这个钩子用于定义菜单项,这基本上意味着您可以使用该函数注册 url。走那条路,你可以:

    1. 实现 hook_menu()
    2. 处理重定向的一般方法是使用drupal_goto()。但是,在这种情况下,使用 $form_state['redirect'] 更为合适,正如 Henrik 在他的评论中解释的那样。
    3. 对于您要重定向到的 url,您应该有一个回调函数,您可以在其中放置逻辑,设置 hook_menu 的方式和回调函数将决定您如何获得可用的变量。您可能想查看 arg() 函数,该函数通常用于从 url 获取值。
    4. 通过过滤器运行用户输入以确保他们没有发布诸如脚本标签等讨厌的东西,使用check_plain
    5. 返回一个主题功能,或者自己做,看theme()hook_theme()

    有更快的方法可以做到这一点,但是这样做,您将为 drupal 可以缓存的每个搜索结果生成 url,这很好。也不依赖于帖子参数,人们可以为搜索结果添加书签

    另一件事是您可能希望对表单进行一些基本验证。这将是一个很好的学习习惯。看起来像这样:

    /**
     * Validation handler for myForm.
     */
    function myForm_validate($form, &$form_state) {
        $name = $form_state['values']['name'];
        // do some checks to $name.
        if ($error) {
            form_set_error('name', t('error message to be displayed, showing the value of the field: @name', array('@name' => $name);
        }
    };
    

    【讨论】:

    • 需要注意的是drupal_goto在最后一个表单提交函数之后被隐式调用,重定向到$form['#redirect']中找到的路径。默认情况下,这将是提交表单的页面,但通常在提交函数中对此进行调整。在这种情况下,将变量传递给页面回调的一种方法是将它们放在该路径中,例如$form['#redirect'] = 'welcome/' . $form_state['values']['name'] ... 。 'welcome/%' 的回调将使用传递的值创建输出。
    • 谢谢,我忘记了 $form 中的重定向参数。将其添加到我的答案中。
    • Oups - 更正: 根据文档,应该在提交函数(其他参数,无井号)中设置 $form_state['redirect'] 而不是 $form[ '#redirect'] (这仅用于定义表单创建时所需的重定向)
    • @googletorp:我冒昧地在你的回答中加入了这个更正 - 希望没关系。
    • 是的,没关系,反正我只是相信你的话。实际上,我可以记住该属性,过去曾遇到过一些问题,尽管它并不总是重定向到我本地开发网站上的正确 url。
    【解决方案2】:

    您可以在表单中实现 AHAH,并将页面内容区域内的元素指定为“包装器”(将放置回调函数结果的元素)。但是,在您尝试之前,您需要了解欧宝先生的出色建议。

    【讨论】:

      【解决方案3】:

      如何使用 drupal_set_html_head() 将脚本字符串写入页面的 head 部分?我在特定页面上执行此操作(获取用户纬度和经度并将它们传递到我的 gMap 函数中),但我对直接从 hook_form_submit() 中做同样的事情感兴趣。我已经尝试了几次,我显然正在输出脚本字符串但从提交调用函数似乎不起作用。

      【讨论】:

        【解决方案4】:

        如果提交函数创建了一个充满 html 输出的页面;将其传递给页面回调的最佳方法是什么?我怀疑在 url 上作为 arg 传递会起作用。

        我塞进了一个会话变量,但也许是更好的方法?

        【讨论】:

          猜你喜欢
          • 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
          相关资源
          最近更新 更多