一月 16, 2019 | 後端和Drupal
【Drupal教學】解決表單送出後的跳轉問題,交給Destination參數就對了
前言
在開發案子的過程當中,常常都會有遇到表單送出後要跳轉到某個特定頁面或是Thank you頁面。在Drupal當中,要解決這個問題再簡單不過了,若你還再思考要用什麼模組,那就真的落伍囉,因為Drupal原生的環境中,就支援這件事情,趕快學起來吧。
Destination參數
在Drupal的系統中,表單是我們最長在使用的,不管是新增、修改、刪除資料都是屬於表單的一環,若我們需要在表單送出後,跳轉到我們想要的頁面,只需要在表單的網址後面帶入Destination參數即可。
舉例來說: 若你到文章列表頁面,編輯隨意一篇文章。
前往文章列表頁面 例如:https://yourawesomedoman/admin/content
編輯任何一篇文章 例如:https://yourawesomedoman/node/10/edit?destination=/admin/content
按下儲存之後,你會發現回到你本來的頁面[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;
?>
上述的程式印出來後,就會變成以下的結果囉。
<a href="/user/register?destination=thank-you-page" class="special-class link-class" data-text="some-text" victor="yang">註冊連結</a>
雖然看起來一樣,但是在多國語言與網址暱稱有的時候,就可以看出差異啦:)
結論
在Drupal的系統中,善用核心的函數即可做出不一樣的變化,這個功能算是我們在開發中非常常用的,可以方便的解決很多問題,也不用一天到晚寫Rules或太複雜的Coding,即可達到很好的效果,是有在開發Drupal網站的大家一個非常好的選擇,參考看看囉:)