2013-06-20 49 views
1

我需要帮助创建一个if语句,它将以节点的形式打印取消按钮只有。没有if语句,取消按钮会在所有表单上打印出来,包括网站搜索表单。我尝试使用'$ form_id!=',但添加了每个表单ID,其中我不需要想取消按钮似乎并不直观。任何帮助将非常感激。

<?php 

/** 
* Implements hook_form_alter(). 
*/ 
function cancel_button_form_alter(&$form, &$form_state, $form_id) { 
    // Here is where I'm having trouble. What variable can 
    // I put that targets ANY content type? 
    if ($form_id != 'search_block_form') { 
    // Add a cancel button. 
    $form['actions']['cancel'] = array(
     '#type' => 'submit', 
     '#value' => t('Cancel'), 
     '#access' => TRUE, 
     '#weight' => 15, 
     '#submit' => array('cancel_button_form_cancel', 'node_form_submit_build_node'), 
     '#limit_validation_errors' => array(), 
    ); 
    } 
} 

/** 
* Custom cancel button callback. 
*/ 
function cancel_button_form_cancel($form, &$form_state) { 
$url = $_GET['destination'] ? $_GET['destination'] : ''; 
drupal_goto($url); 
} 
+0

我不明白,我们应该怎么知道表单是“内容类型”?如果它包含任何指示其“内容类型”表单的任何信息,则必须向我们提供$ form数组。 – Prashank

+0

我很困惑?这只是我正在处理的一个简单模块,它将为任何表单添加一个取消按钮。我想使取消按钮只出现在节点的形式(也许这比说“内容类型”,使用if语句更好),但我不知道我可以使用(或如何)只针对节点使用所述if声明。对不起,你不得不忍受我,因为我不是经验丰富的Drupal人。基本上:如果('我应该怎么把这里只针对节点的表单?'){打印出取消按钮} – user2266174

回答

1

如果你是在一个节点/内容时,$form变量都会有一个节点对象。但是如果表单不适用于/从节点,那么它将不具有节点对象。您可以检查这样的:

if(isset($form['#node'])) { 
    // Your code goes here 
} 

其实,我对$form['#node']有点混乱(:P)。你可以通过调试$form$form_state变量来获得它。

+0

这很好用。感谢奥马尔的帮助和对我的耐心等待。 – user2266174