本文へ移動
STUDIO UMI
DRUPAL BLOGDrupalブログ

Drupalでリンクを作成する関数 l()

Machiko Yamanaka

最近非常に暑いですね。最寄りのJR石山駅から徒歩5分あるかないかくらいなのに、スタジオ・ウミの職場に付く頃には毎日滝のような(言いすぎ?)汗が流れています。 水分補給と塩分補給はしっかりしたいものですね。

さて、今回はDrupalでリンクを生成する関数について書き殴ろうと思います。

それがこちらl関数です

<?php l($text, $path, array $options = array());
?>

(検索する時は 「drupal l function」って書くと大体1番上に英語版のAPIが出てきます)

$text リンクのテキストです。<a>と</a>の中身です。 画像なども入れられますが落とし穴があります。

$path リンクのパスです。urlを入力できますが、 外部サイトで無い限り「node/1」とか「contact」のようなDrupal内部パスを用います。単にエイリアスだけでも認識してくれますが「node/*」の方で指定した方が良さそうな気がします。 drupal内部パスで指定してあげるとどの階層にいても自動でDrupal側でリンクを生成してくれます。

$options(配列) リンクに様々なオプションを追加できます。 キーとそれに対応する値を入力します。私が良く使うのはこの4つ。

  • attributes(配列):id属性やclass属性などの属性の追加ができます。
  • html:デフォルトはfalseになっています。trueにすると$text部分にhtmlを使うことができます。 $text部分で記述した落とし穴はここですね。falseのままだとhtmlコードが勝手にエスケープされてしまします。
  • fragment:アンカーリンクを利用する際に使います。頭の#は付けてはいけません。url関数で使われているものと同じものです。
  • query(配列):GETクエリを生成できます。こちらもurl関数で使われているものと同じものです。

ちなみにfragmentとqueryのオプションはurl関数で使用される要素です。 url関数の$option部分をl関数でも使えるんですね。url関数については近々書きます。 また、l関数はリンクを作成するだけなのでPHPのprint関数などを使って出力してあげないと画面に表示されません。 実はよくここで引っかかるんですよね・・・

さて、以上を全て入れたコードを書くなら以下のようになります。

<?php print l(
  '<strong>お問い合わせ</strong>', 
  'contact', 
  array(
    'attributes' => array(
      'id' => 'contact-link', 
      'class' => 'link'
    ), 
    'html' => true,
    'fragment' => 'contact-form',
    'query' => array('content' => 'ホームページ制作について')
  )
);
?>

実際に確認はしてないですがこれがhtmlコード化されるとこんな感じになります。

  <a href="./contact#contact-form?content=ホームページ制作について" id="contact-link" class="link"><strong>お問い合わせ</strong></a>

ちゃんと確認したら結果を載せますね!


2013/8/27 追記 上記のコードはこのような結果になりました。

<a href="/contact?content=%E3%83%9B%E3%83%BC%E3%83%A0%E3%83%9A%E3%83%BC%E3%82%B8%E5%88%B6%E4%BD%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6#contact-form" id="contact-link" class="link"><strong>お問い合わせ</strong></a>

エンコードされた部分はデコードすると

ホームページ制作について

となりました。

スタジオ・ウミは15年以上の実績を誇るDrupal専門の開発会社です。豊富な知見とノウハウでDrupalサイトの開発や技術サポートなどDrupal関連サービスをワンストップでご提供します。

RECRUIT

新たなステージを共に歩んでいける
コアメンバーを募集しています

採用情報

CONTACT

お仕事のご相談やお見積依頼など、
お気軽にお問い合わせください。

お問い合わせ