2012-05-09 5 views
1

사용자가 확인 양식을 사용하지 않고도 사이트의 노드를 삭제할 수있는 최선의 방법을 찾고 있습니다. form_alter를 사용하여 사람들이 성공하지 못한 채 사용자 정의 제출 기능으로 이동하도록 시도했습니다.바이 패스 노드 삭제 Drupal의 양식 확인

누구도 이것을 시도한 적이 있습니까?

답변

10

drupal 7로 가정하면 노드/%/삭제 메뉴 항목은 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 {/ * 삭제하기 전에 확인 양식 * /}' –