十月 22, 2016 | 後端和Drupal
ECK不能翻譯標題?怎麼說都不合理啊!
前言
想必有不少使用Drupal 7的人與小弟一樣,一開始在翻譯Entity type的時候發現了一項問題......標題不能翻譯?!!!怎麼辦?再建一個標題欄位然後隱藏?不覺得麻煩嘛? 從現在開始不再需要這麼麻煩了,只需要利用Title模組便可輕鬆此項問題! 想知道如何操作?跟著下方的教學走
教學開始
模組需求:
ECK:建立Entity type
Entity Translation:比Internationalization還要好用的翻譯模組
Title :顧名思義,就是標題!也是本篇中重要的模組
未啟用Title模組前,會發現建立好Entity type後原生的操作欄位是無法使用的
而且翻譯文章的時候會看到下面的狀況
all languages是什麼意思?
Ans:意思就在翻譯此文章時全部語言的標題內容都會是一樣的(即是牽一髪而動全身)
然而在翻譯文章的時候是絕對不允許這種問題發生的!!!!
所以接下來就要開始利用Title模組解決這項問題
啟用Title模組後回到剛剛建立的Entity type管理欄位頁面會發現Title操作欄位多了個replace
點進去後會看到只有一個選項(請將選項啟用,否則依舊不能翻譯)
這時候原本的標題欄位已經被取代掉了
再來回到原本的文章編輯會看到all languages已經消失了
看到all languages消失後即表示一篇完整的翻譯文章就要出爐了!
可是有沒有人發現無論如何編輯標題都是空值?
這是因為ECK與Title兩個模組之間是不兼容的,所以eck再回傳的時候不會回傳title的值
那有解決方法嘛? 答案是有的!
解決方法
在ECK資料夾底下的eck.entity.inc內(約455行找到foreach ($properties as $property => $info) {)加入以下Code
// Add support for Title module and title field replacement
// @see https://www.drupal.org/node/1758878
if ($property == 'title' &&
module_exists('title') &&
isset($form['title']['#field_replacement']) &&
$form['title']['#field_replacement']) {
// Don't write form_value to entity property 'title' if
// title module replaced it with a field.
// @see https://www.drupal.org/node/1758878#comment-9872241
continue;
}
這樣才能真真正正的翻譯一篇完整的文章
結語
雖然Title模組與eck模組並不兼容但這是有方法可以解決的,更何況只將標題取代掉就能夠翻譯為何還不裝呢?安裝模組後就再也不需要傻傻的建立第二個標題欄位了,這不是省事多了嘛?