一月 16, 2019 | 後端和Drupal

【Drupal教學】解決表單送出後的跳轉問題,交給Destination參數就對了

在開發案子的過程當中,常常都會有遇到表單送出後要跳轉到某個特定頁面或是Thank you頁面。在Drupal當中,要解決這個問題再簡單不過了,若你還再思考要用什麼模組,那就真的落伍囉,因為Drupal原生的環境中,就支援這件事情,趕快學起來吧。

前言

在開發案子的過程當中,常常都會有遇到表單送出後要跳轉到某個特定頁面或是Thank you頁面。在Drupal當中,要解決這個問題再簡單不過了,若你還再思考要用什麼模組,那就真的落伍囉,因為Drupal原生的環境中,就支援這件事情,趕快學起來吧。

Destination參數

在Drupal的系統中,表單是我們最長在使用的,不管是新增、修改、刪除資料都是屬於表單的一環,若我們需要在表單送出後,跳轉到我們想要的頁面,只需要在表單的網址後面帶入Destination參數即可。

舉例來說: 若你到文章列表頁面,編輯隨意一篇文章。

  1. 前往文章列表頁面 例如:https://yourawesomedoman/admin/content

  2. 編輯任何一篇文章 例如:https://yourawesomedoman/node/10/edit?destination=/admin/content

  3. 按下儲存之後,你會發現回到你本來的頁面[admin/content]

可以自行測試看看,將destination更改到其他路徑,按下儲存之後,也會到你想要的位置去囉。

使用Link Function,做出更好的彈性

當然在我們知道使用這個destination的參數之後,一般傳統當然可以直接寫a Tag來做超連結,但是總覺得還差了一點,若現在連結還有進行網址暱稱的處理,直接寫A Tag就麻煩了。這個時候Drupal也提供了一個很好的Function,就是L function

簡單範例:

若今天想要做出一個註冊連結,讓使用者註冊完畢後,回到感謝頁面。這個註冊連結由於需要CSS的樣式需求,我們需要給特定的Class來做處理。

html 版本

寫A Tag的方式,個人不建議使用,因為難以處理路徑問題,可以當作對照組。

<a class="special-class link-class" data-text="some-text" victor="yang" href="/user/login?=destination=thank-you-page">註冊連結</a>

上述的寫法的確在Drupal的網站中是可以運行的,但是在面對到多國語言網址暱稱的時候,就會出事囉,畢竟html的連結,是無法直接根據目前的使用者語言、系統狀態、資料庫進行判斷,就算要判斷也會很麻煩>"<

Link Function版本

使用這個方法,不僅能夠把對應的Class與Attributes加入到連結內,連多國語言、網址暱稱都可以一併處理,是個非常好用的作法。

<?php
	 
$link = l(t('註冊連結'),'user/register',array(
    'attributes' => array(
        'class' => array('special-class','link-class'),
        'data-text' => array('some-text'),
        'victor' => array('yang'),
    ),
    'query' => array(
        'destination' => 'thank-you-page'
    )
));

print $link;

?>

上述的程式印出來後,就會變成以下的結果囉。

&lt;a href="/user/register?destination=thank-you-page" class="special-class link-class" data-text="some-text" victor="yang"&gt;註冊連結&lt;/a&gt;

雖然看起來一樣,但是在多國語言與網址暱稱有的時候,就可以看出差異啦:)

結論

在Drupal的系統中,善用核心的函數即可做出不一樣的變化,這個功能算是我們在開發中非常常用的,可以方便的解決很多問題,也不用一天到晚寫Rules或太複雜的Coding,即可達到很好的效果,是有在開發Drupal網站的大家一個非常好的選擇,參考看看囉:)