Drupal 如何改寫tpl並在node頁呈現content type名稱

前言

有時候需要會在node內頁顯示出我的內容類型名稱,可是drupal並沒有這個功能,這個時候我們就需要改寫tpl了,在這邊我們以zen的tpl當作範例

一開始本來是想要使用node.tpl.php來改寫的,不管怎麼改都沒有任何效果,此時才想起我的node頁已經被display suit改寫過了,所以才改使用page.tpl.php

可是這樣會導致另一個問題,如果改寫全部的page會造成連我的views page都會被修改到,所以找了一下solution找到了針對content type改寫page的tpl寫法

先看node針對type的命名方法可是對於我們的狀況page並不認得這種寫法,所以我們必須讓page tpl認得content type

首先我們要先在sites\all\themes\MYTHEME\template.php加入這段程式碼
MYTHEME記得要換成你的theme的名稱

function MYTHEME_preprocess_page(&$vars, $hook) {
    if (isset($vars['node']->type)) {
// If the content type's machine name is "my_machine_name" the file
// name will be "page--my-machine-name.tpl.php".
$vars['theme_hook_suggestions'][] = 'page__' . $vars['node']->type;
    }
}

這樣子page的tpl就可以認得我們的content type了,page的命名方法就是page–[type].tpl.php
[type]替換成你content type的機器名稱例如page–latest_news.tpl.php

<?php if (isset($node)) {
   $type=node_type_get_name($node);
   }?>
<?php print $type; ?>

這邊注意的是$node內的type屬性並不是我們所看到的文字而是機器名稱,所以我們必須要用node_type_get_name這個funtion來取得可讀名稱
這樣一來我們的目的就達到了,就可以在page的tpl內吐出內容類型的名稱囉。

參考資料

template function
node_type_get_name
How to use views_embed_view()