2010-06-12 15 views
9

Tengo un módulo Drupal personalizado que muestra algunos datos en una tabla. Cada fila tiene un enlace que, si se hace clic, eliminará la fila correspondiente. Específicamente, cuando se hace clic en el enlace, llevará al usuario a una página de confirmación. Esta página es solo una forma de drupal que dice "¿estás seguro?" Con dos botones: "Sí", "No". Me imagino que tendré que pasar el ID de fila a la página de confirmación.Drupal pase el argumento a la página

Mi pregunta: ¿Cuál es la manera típica de pasar datos a una nueva página en Drupal 7? Supongo que podría agregar rowID a la URL y usar $ _GET [] desde la página de confirmación ... No creo que esto sea muy seguro y me preguntaba si había una mejor forma de 'Drupal'.

Gracias!

Respuesta

17

que tendría que utilizar algo como lo siguiente

<?php 
function yourmod_menu() { 
    // for examlple 
    $items['yourmod/foo/%/delete'] = array(
    'title' => 'Delete a foo', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('youmode_foo_delete_confirm', 2), // 2 is the position of foo_id 
    'access arguments' => array('delete foo rows'), 
    'type' => MENU_CALLBACK, 
); 

    return $items; 
} 

function yourmod_foo_delete_confirm($form, &$form_state, $foo_id) { 
    // load the row 
    $foo = yourmod_get_foo($foo_id); 

    // build your form, if you need to add anything to the confirm form 
    // .... 
    // Then use drupal's confirm form 
    return confirm_form($form, 
        t('Are you sure you want to delete the foo %title?', 
        array('%title' => $foo->title)), 
        'path/to/redirect', 
        t('Some description.'), 
        t('Delete'), 
        t('Cancel')); 

} 

?> 

Usted puede mirar aquí para ver ejemplos de how core modules do it (tienen vistazo a node_delete_confirm)

+0

También tenga en cuenta que para Drupal 7, hay un sistema de entidad. Entonces, si sus "filas" son entidades de dominio, debería considerar usar la API de Entity, ya que facilitaría una gran parte de su codificación, especialmente si confiaba en este módulo http://drupal.org/project/entity – redben

+0

Gracias, esto ayudó a obtener yo en el camino correcto. Encontré un buen tutorial aquí: http://www.akchauhan.com/create-an-action-confirm-form-using-confirm_form-function-in-drupal/ – stotastic

+0

He encontrado un ejemplo impresionante en este video tutorial: http://buildamodule.com/video/drupal-7-core-concepts-how-to-add-and-manipulate-pages-with-the-menu-system-how-to-use-placehoders-to- pass-arguments-in-the-middle-of-a-path –

0

Si los datos son nodos, puede hacer que el enlace nodo /%/borrar donde% es el nid. Drupal sabe cómo manejar la página de eliminación, ya que es una ruta principal. Entonces, la confirmación de eliminación sigue el resto del sistema y es muy 'Drupal'.

No estoy seguro de si esto cambió en absoluto en Drupal 7, pero esto es lo que hice para innumerables módulos.

+0

Básicamente es una fila en una tabla MySQL, no un nodo ... así que no creo que eso sea lo que estoy buscando – stotastic

+1

¿Cómo entran los datos en el sistema si no está relacionado con el nodo? De todas formas, solo inventaría mymodule /%/delete como un menú hook donde% es el ID de la fila. Esa página llamaría a drupal_get_form con un formulario de confirmación, y hook_submit procesa eso. – Kevin

+0

es una aplicación que usa Drupal para manejar cosas tediosas como administración de usuarios y temas. Los datos ingresan mediante una instrucción de inserción. – stotastic

1

La solución más simple sería utilizar un módulo existente creada para este objetivo:

Puede configurar los valores del formulario se puede ajustar desde la URL y vuelva a grabar los campos que se muestran en la tabla para generar los enlaces necesarios.

Cuestiones relacionadas