我在编辑内容时使用form_alter编辑提交功能。在我的自定义功能中,我希望使用标题名称编辑自定义消息到屏幕。我认为我能做到这一点的方法如下
function mymodule_myfunction(&$form) {
drupal_set_message(t('Some text ' . $form['#node']->title));
}
标题未加入“某些文字”
我通过在form_alter中使用以下行来调用我的函数:
$form['#submit'][] = 'mymodule_myfunction';
答案 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']));