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


最近非常に暑いですね。最寄りの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>
エンコードされた部分はデコードすると
ホームページ制作について
となりました。