1

我在编辑内容时使用 form_alter 来编辑提交功能。在我的自定义功能中,我希望使用标题名称将自定义消息编辑到屏幕上。我认为我可以做到这一点的方法如下

function mymodule_myfunction(&$form) {
    drupal_set_message(t('Some text ' . $form['#node']->title));
}

标题未加入“某些文本”

我在 form_alter 中使用以下行来调用我的函数:

$form['#submit'][] = 'mymodule_myfunction';
4

3 回答 3

1

所有提交函数都有两个参数传递给它们:$form,这是对 hook_form_alter 等进行所有调整后的最终表单数组,以及 $form_state,其中包含已提交的值,这些值已被清理并检查范围. (例如,如果您在选择框中有三个项目,则 $form_state['values'] 中的数据已经确保该输入的值是三个合法值之一。)

通常,您不应该使用 $form['#post'] - 它不是获取值的已发布方式的一部分,并且更新核心以处理 FAPI 的某些问题可能会破坏您的代码。

尝试这个:

function mymodule_myfunction($form, &$form_state) {
  drupal_set_message(t('Some Message @title'), 
  array('@title' => $form_state['values']['title'])));
}

请注意正确使用t()函数 - 该函数的目的是允许其他用户翻译文本,因此通过使用“Some Message @title”,翻译者可以更多地了解正在发生的事情。此外,您还获得了通过 t 函数以这种方式输入的文本也通过check_plain()输入的优势,这可以防止有人对输入进行恶意操作。

于 2010-09-08T16:20:22.887 回答
0

尝试更改您的签名

function mymodule_myfunction(&$form) {
    drupal_set_message(t('Some text ' . $form['#node']->title));
}

至:

function mymodule_myfunction($form, &$form_state) {
    drupal_set_message(t('Some text ' . $form['#node']->title));
}

还可以尝试安装开发模块,以便您可以执行以下操作

dsm($form);
dsm($form_state);

并准确查看您正在处理的内容。

此外,如果您只想在创建类型为“X”的新节点时发出消息,则更好的方法是使用hook_nodeapi

它可能看起来像这样;

function modulename_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {

if ($op == 'insert' && $node->type == 'my node  type') {
  drupal_set_message($node-title . ' is cool.');
}
}
于 2010-09-08T15:52:49.633 回答
0

DKinzer建议使用 dsm($form) 来查看变量。节点标题未填充。它可以在 Post 数组中找到。以下行允许我做我想做的事。

drupal_set_message(t('Some Text '.$form['#post']['title']));
于 2010-09-08T16:12:36.090 回答