Drupal 6从提交的表单中获取节点标题

时间:2010-09-08 15:25:05

标签: drupal drupal-6 drupal-modules drupal-fapi

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

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

标题未加入“某些文字”

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

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

3 个答案:

答案 0 :(得分:1)

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

一般情况下,你不应该使用$ form ['#posd'] - 它不是已发布的获取值的方法的一部分,并且对FAPI处理某些问题的核心更新可能会破坏你的代码。 / p>

试试这个:

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()提供,这可以防止某人使用输入做恶意的事情。

答案 1 :(得分: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));
}

还尝试安装devel模块,以便您可以执行

之类的操作
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.');
}
}

答案 2 :(得分:0)

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

drupal_set_message(t('Some Text '.$form['#post']['title']));