[Drupal] Jak ustawić przekierowanie na inną stronę po usunięciu node'e?

Data dodania wpisu: 15-11-2010

Podczas projektowania stron www na podstawie systemu Drupal CMS, dajemy administratorowi m.in. możliwość zarządzania treścią, w tym możliwość usuwania podstron. Domyślne przekierowanie w Drupal CMS podczas usuwania node'a z dowolnego typu zawartości powoduje, że moderator zostaje przekierowany na stronę listy zawartości. Co jednak, jeśli piszemy jakiś indywidualny panel zarządzania danymi lub określonymi zawartościami (np. sklep internetowy oparty u Drupala, w którym tworzymy tabelę z listą produktów w panelu administracyjnym). Wówczas możemy podziałać na dwa sposoby - wykorzystać drupalowy parametr 'destination' dodany do adresu, poprzez wygenerowanie linku za pomocą poniższego kawałka kodu:

<?php
$destination = 'destination=custom_page_url';
print l('Delete', 'node/' . $node->nid . '/delete', array('query' => $destination));
?>

Podczas uruchomienia podstrony usuwania zawartości typu 'node', do adresu zostanie doklejony parametr 'destination', który spowoduje, że router Drupala po usunięciu wpisu, przekieruje nas na podaną w parametrze podstronę.

Drugim sposobem jest wpięcie się w formularz za pomocą funkcji hook_form_alter():

<?php
function custom_module_form_alter($form, &$form_state, $form_id) {
    switch($form_id) {
        case 'node_delete_confirm':
            $form['#submit'][] = '_custom_redirect_after_delete';
            break;
    }
    return $form;
}

function _custom_redirect_after_delete($form, &$form_state) {
    $form_state['redirect'] = 'custom_page_url';
}
?>

Po wysłaniu formularza potwierdzającego usunięcie node'a, zostaniemy przekierowani na stronę 'custom_page_url', dzięki przepisaniu parametru redirect w formularzu usuwania zawartości. Funkcję należy umieścić w customowym module (http://drupal.org/node/206753).

Komentarze

Ten wpis nie posiada jeszcze komentarzy

Comments closed...