2012-05-09 10 views
1

ユーザーが確認フォームを使用せずにサイトのノードを削除できるようにする最良の方法を探しています。私はform_alterを使用して、成功しないでカスタム送信関数に人を誘導しようとしました。バイパスノード削除の確認フォームをDrupalで

誰でもこれを試しましたか?

答えて

10

drupal 7と仮定すると、node /%/ deleteメニュー項目はnode_delete_confirm形式に直接配線されています。あなたはhook_menu_alterを使ってそれを変更し、drupal_get_formから自分のデザインのページコールバックに関数を変更するだけで、ノードを削除します。

例:あなたが必要があると思い、あなたのモジュールファイルで

function mymodule_menu_alter(&$items) { 
    $items['node/%node/delete']['page callback'] = 'my_node_delete_function'; 
    $items['node/%node/delete']['page arguments'] = array(1); 
    $items['node/%node/delete']['module'] = 'mymodule'; 
    $items['node/%node/delete']['file'] = 'mymodule.pages.inc'; 
} 

そして、あなたのmymodule.pages.incファイルにあなたが必要があるだろう:

function my_node_delete_function($node) { 
    // Taken from node modules node_delete_confirm submit handler 
    node_delete($node->nid); 
    watchdog('content', '@type: deleted %title.', array('@type' => $node->type, '%title' => $node->title)); 
    drupal_set_message(t('@type %title has been deleted.', array('@type' => node_type_get_name($node), '%title' => $node->title))); 

    // Do a drupal goto here to preserver the 'destination' parameter 
    drupal_goto(); 
} 
+0

ありがとうございます!それはまさに私が必要としていたものです。 –

+0

こんにちは、このコードを修正して、コンテンツタイプが= 'contentype'の場合にのみこの手順をスキップできますか?私はそれを行う方法を理解することはできません。 – Shyghar

+3

@Shyghar:あなたの 'my_node_delete_function'には条件を使います:' if($ node-> type == 'contenttype'){node_delete($ node-> nid); /*...*/} else {/ *削除前の確認フォーム* /} ' –

関連する問題