Drupalのテーマ作成などで、よく使うAPI(関数)まとめ

Drupalのテーマや、モジュールを作成するときなどに、よく使う関数を、備忘録的にまとめました。
Drupalのバージョンは、D7で確認をしていますが、D6や、D8の方もリンクを参照いただけると、それぞれのコードを参照することもできます。

 

目次

Drupalのテーマ作成で、よく使う関数です。最低でもこれくらいは覚えておくと良いかもしれません。
特に重要なのはtemplate.php内に記述する、「template_preprocess_page」と、テーマファイル命名規則と、読み込まれる順番です。

 

リクエストURIなど

 

$GLOBALS['base_url'] => http://example.com/drupal
base_path() => /drupal/
request_uri() => /drupal/documentation?page=1
request_path() => documentation
current_path() => node/26419
arg(0) . arg(1) => node/1

https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/request_uri/7

※ arg()は、内部で処理されているURIを返す。
https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/arg/7

 

 

ユーザー

 

 

 

テーマ作成に役立つ関数

 

  • フロントページチェック

    drupal_is_front_page()
    https://api.drupal.org/api/drupal/includes!path.inc/function/drupal_is_front_page/7
     

  • 特定のフィールドを取得
    nodeテンプレートなどで、特定のフィールドを表示するのに「render($content[FIELD_NAME])」と記述したことは無いでしょうか。この書き方をしないでくださいと公式サイトで書かれています。(参照:function field_view_field

    その代わりに下記コードを使うことで、特定のフィールドを出力することができます。下記コードはbodyを出力

    print render(field_view_field('node', $node, 'body'));
    

    上記コードはレンダリングするには良いですが、特定のフィールドだけを取得したい場合は下記コードで取得できます。

    field_get_items('node', $node, 'field_name');
    
  • 文字列を翻訳対象にする

    Drupalは基本、t($string, array $args = array(), array $options = array())にて、出力する文字列を指定します。

    print '<p>'.t($content).'</p>';

    https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/t/7

 

 

 

  • 配列の構造情報出力

    $contentや、$nodeが、どのように構成されいるかテーマを作成するときに、必要となります。
    Drupalに慣れていない方などは、print_r(phpの関数)を使って、構成を確かめる方もいるかもしれません。

    Drupalの場合ですと、Develモジュールをインストールし下記コードにより、確認することができます。
    dsm($content);

    https://api.drupal.org/api/devel/devel.module/function/dsm/7

    赤枠で囲った箇所を使用することで、自身で配列名を記述することなく、値を取得することができます。

 

 

  • テーマファイルについて(変更方法)

    Drupalのテーマ用ファイル名は一定のルールで決められています。
    例えば、「node/1/edit」の場合は、下記のようにファイル名が決められています。この中では、6が最優先されるテンプレートファイルです。

    1. page.tpl.php
    2. page--node.tpl.php
    3. page--node--%.tpl.php
    4. page--node--1.tpl.php
    5. page--node--edit.tpl.php
    6. page--front.tpl.php (もしnode/1/edit がフロントページだった場合)

    命名規則についてはこちらを参照ください
    https://www.drupal.org/node/1089656

    これらの命名規則以外に、テーマファイル名を付けたい場合は、下記のコードで変更することができます。

    function bootstrap_subtheme_preprocess_page(&$variables, $hook) {
       //Add multiple suggestions for pages based on Node
       if(isset($vars['node']->type)) { //なんらかの条件
        $variables['theme_hook_suggestions'][] =  'page__mytemplate';
       }
    }
    

    テーマファイルは、下記となります。
    page--mytemplate.tpl.php

    基本のテンプレートファイルは下記サイトで参照することができます。

     

  • ページ送りカスタマイズ

    ページ送りの出力は、何パターンかありますが今回は代表的なDrupalのシステムで出力されるページ送りと、Viewsで出力されるページ送りのカスタマイズ方法を紹介します。(参照:DrupalのPagerをオーバーライドしてカスタマイズ

    システムページ送りカスタマイズは「function theme_pager」を追加カスタマイズを行います。

    // template.php
    function THEMENAME_pager($variables) {
      //Code Here コードは上記リンク「function theme_page」を確認ください
    }
    

    Viewsで出力されるページ送りは「function theme_views_mini_pager($vars) {」を追加カスタマイズします。
    1.「/sites/all/modules/views/theme」を開きます。
    2.「theme_views_mini_pager」関数をコピーし、template.phpにペーストします。
     

    // template.php
    function THEMENAME_views_pager($vars){
      //Code Here
    }
    

    e.g.)

    $li_previous = theme('pager_previous', (isset($tags[1]) ? $tags[1] :
     t('«')), $limit, $element, 1, $parameters);
    

      to

    $li_previous = theme('pager_previous', (isset($tags[1]) ? $tags[1] : 
    t('前へ')), $limit, $element, 1, $parameters);
    
    
    
  • Views から出力した日付をUnixtimeに変換

    Viewsの出力を、「2015/07/31 23:00:00 JST」にて出力します。
    「/admin/config/regional/date-time/formats」にアクセスし、日付の書式をセットアップします。

    書式:Y-m-d G:i:s

    Viewsのテンプレートで受け取ったデータを下記のPHP関数でUnixtameに変換します。

    // JSTをunixtimeに変換する
    $unixtime = strtotime($row['field_jst_date']);

     

  • 「public://」ファイルパスを「/sites/default/files」に変換

    $file_path = file_create_url('public://img.png');
     

  • hook_theme
    htmlレンダリング用API

    // .moduleファイルに追加

    function THEMENAME_theme($existing, $type, $theme, $path) {
        return array(
            'your_theme_key' => array(
                'variables' => array('nid' => NULL,'title' => NULL, 'hoge'=> $path),
                'template' => 'your_template_filename',
                'path' => 'sites/all/modules/custom/cpi/t'
            )
        );
    }

    // テンプレート用ファイル
    // your_template_filename.tpl.php

    <div id="node-<?php print $nid; ?>">
        <h3><?php print l($title, "node/{$nid}"); ?></h3>
        <?php print $hoge; ?>
    </div>

    // テーマ呼び出し

    $variables = array(
        'nid' => '3',
        'title' => 'ほげほげ'
    );
    $output = theme('your_theme_key', $variables);
    print $output;

 

template_preprocess_page

 

Drupalのテーマをより強力にカスタマイズするために、template_preprocess_page関数が用意されています。
page.tpl.phpの処理前に、template_preprocess_pageを使い、page.tpl.phpに変数を渡したり、条件によってテンプレートファイルを変更したり、することができます。

上記であげた、テンプレートファイルを変更するのも、preprocess_pageを使い処理をしています。その他にもnode.tpl.phpの前に処理をする、template_preprocess_nodeや、template_preprocess()など、様々な関数が用意されています。

preprocess_pageは、template.phpに記述を行います。

 

 

  • 簡単なサンプル

     

    template.php

    <?php
    // $Id: $
    
    function THEMENAME_preprocess_page(&$vars) {
    
      //どんな値が入っているのか確認したい場合
      dsm($vars);
    
      //nodeのbodyを取得し、page.tpl.phpに渡す
      $vars['body_content'] = field_view_field('node', $vars['node'], 'body')
    
      // 内容をpage.tpl.phpに渡す
      $vars['my_content'] = '<p>ほげほげテスト</p>';
    }

     

    page.tpl.php

    <?php print render($my_content); ?>
  • 各ブッロックデータの受け渡し
    // template.php
    // footerブロックにセットされたブロックデータをhtml.tpl.phpに渡す
    function THEMENAME_preprocess_html(&$variables) {
        $variables['footer'] = block_get_blocks_by_region('footer');
    }
    
    //html.tpl.php
    print render('footer');
    

 

データベース関数

 

 

 

その他

 

 

 

 

関連タグ:

この記事をシェアする

次へ
前へ