Drupal Pass Argument to Page
Pergunta
Eu tenho um módulo Drupal personalizado exibindo alguns dados em uma tabela. Cada linha possui um link que, se clicado, excluirá a linha relevante. Especificamente, quando o link for clicado, ele levará o usuário a uma página de confirmação. Esta página é realmente apenas uma forma drupal que diz 'tem certeza' com dois botões: 'Sim', 'não'. Acho que precisarei passar o RowID para a página de confirmação.
Minha pergunta: qual é a maneira normalmente de transmitir dados para uma nova página no Drupal 7? Acho que poderia simplesmente adicionar o Rowid ao URL e usar o $ _Get [] na página de confirmação ... Não acho que isso seja muito seguro e estava se perguntando se havia uma maneira melhor 'drupal'.
Obrigado!
Solução
Você usaria algo como o seguinte
<?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'));
}
?>
Você pode procurar aqui exemplos de Como os módulos principais fazem isso (Veja o Node_Delete_Confirm)
Outras dicas
A solução mais simples seria usar um módulo existente criado para esse fim:
- http://drupal.org/project/entityReference_prepopulate (para referências de entidade)
- http://drupal.org/project/nodereference_url (para referências de nó)
- http://drupal.org/project/prepopulate (para outros valores de formulário)
Você pode configurar quais valores de formulário podem ser definidos a partir do URL e reescrever os campos exibidos em sua tabela para gerar os links necessários.
Se os dados forem nós, você poderá fazer o link nó/ %/excluir onde % é o NID. O Drupal sabe como lidar com a página de exclusão, pois é um caminho central. Em seguida, a confirmação de exclusão segue o restante do sistema e é muito 'drupal'.
Não tenho certeza se isso mudou no Drupal 7, mas foi isso que fiz para inúmeros módulos.