Home arrow Blog arrow Joomla! CMS

8月
08
2008

システムのヘッドタグより先に出力したい:Joomla!1.5

diggに追加!

Javascriptやスタイルシートをシステムで出力されるより先に出力したい場合があります。

その時は、Joomla!1.5の場合テンプレート「index.php」の以下のタグより先に書けば可能です。

ここに書く
<jdoc:include type="head" />

ですが、これだとmetaタグなどよりも先に出力されてしまうことになります。

そこでJoomla!1.5の出力するJavascriptやスタイルシートが出力される前に出力されるように順番を変えてみることにします。

まずは、Javascript

まず、何がすでにJavascriptとして登録されているかを取得します。
テンプレートの「index.php」内の「defined( '_JEXEC' ) or die( 'Restricted access' );」の行より下に以下のように書いてみます。

$myHead = $this->getHeadData();

これで「$myHead」にheadタグで出力される内容が得られます。これは配列になっています。

次に登録されているJavascirptを取得します。

$myScript = $myHead['scripts'];

「$myScript」に配列でJavascriptの一覧が入りました。
では先に出力されるようにしたいJavascriptを以下のように書きます。

$myOutputScript['/templates/mytemplate/js/myscript.js'] = 'text/javascript';

そして

$myScript = array_merge($myOutputScript, $myScript);
$this->setHeadData(array('scripts' =>$myScript));

これですでに登録済みのJavascriptより先に自分のJavascriptが出力されるようになります。
まとめて書くと以下のようになります。

<?php
$myHead = $this->getHeadData();
$myScript = $myHead['scripts'];
$myOutputScript['/templates/mytemplate/js/myscript.js'] = 'text/javascript'; 
$myScript = array_merge($myOutputScript, $myScript);
$this->setHeadData(array('scripts' =>$myScript));
?>

スタイルシートも同様に以下のようにすれば可能です。

<?php
$myHead = $this->getHeadData();
$myStyleSheets = $myHead['styleSheets'];
$myOutputStyle['/templates/mytemplate/css/mystyle.css'] = array('mime' => 'text/css', 'media' => 'screen', 'attribs' => array());
$myStyleSheets = array_merge($myOutputStyle, $myStyleSheets);
$this->setHeadData(array('styleSheets' => $myStyleSheets));
 ?>

ところで、先に追加したい場合は上記のように面倒でしたが、後に追加したい場合は楽にできます。

テンプレートの「index.php」に以下のよう書けばlinkタグやscriptタグが乱雑に出力されることは少なくなると思います。

<?php
//Javascriptをscriptタグで追加します。
$this->addScriptDeclaration('alert("example");');
//Javascriptファイルを追加します。
$this->addScript('/templates/mytemplate/js/myscript.js');
//スタイルをstyleタグで追加します。
$this->addStyleDeclaration('body{background-color:black;}');
//スタイルシートを追加します。
$this->addStyleSheet('/templates/mytemplate/css/mystyle.css', 'screen');
?>

ですが、後に追加する時はここまで意識しなくても先の「jdoc」タグの後に直接書けば良いのでここまでする必要はないでしょうね。

先に出力しなければならない場合、例えばJavascriptのコンフリクトが生じたりする場合などには先に出力され且つ、metaタグより後に出力されることは重要になる機会があるかもしれません。

以前にJoomla!1.0.xで同様のことがあったのでJoomla!1.5ではどうなのかと調べてみました。

 

Related Articles

Joomla!の Cache
昨日ある問い合わせがあってCacheのことでJoomlaのソースを眺めていました。  Joomla!のCacheは、パーツごとにCacheファイルを作成し、それをパーツごとに読み込むようになっている...
ランダムイメージ・プラスモジュールを提供していただきました : Joomla!1.5
gondayuさんから当サイトで公開してくださいと、mod_random_image_plusモジュールを提供していただきました。Joomla!の基本機能であるランダムイメージを拡張し、クリックすれ...
カテゴリの追加と移動:Joomla!
Joomla!って本当に便利ですね。 先日カスタムテンプレートを公開しましたが、docmanではカテゴリを作成していたのですが、エクステンションメニューにテンプレートのカテゴリを作成していなかったの...
Joomla! 1.5 Stableがリリースされました
忙しくなりそうです。 エクステンションによっては対応されていないものがたくさんあるのですぐには1.5に移行されないでしょうが、その前に私の1.0.x脳を先に1.5脳に移行していかなければなりません...
Frontpage Auto Updateをアップデートしました:Joomla! 1.5
Frontpage Auto Updateプラグインをバージョン1.0.1にアップデートしました。 このアップデートは、Joomla!1.5用だけです。 変更したところ Joomla!の1...
Joomla!1.5RC4の記事の日時
RC4の記事の日時の管理がどうもおかしい。 RC3と比較してみた。 ROOT/libraries/joomla/utilities/date.php 162行目と、188行目が変更になっている。 gm...
News機能:Joomla!
Joomla!には便利な機能があってサイトのRSSを取得して表示する機能があります。ですが、そのまま表示させている方は少ないと思います。見栄えが悪いのじゃないかと・・・。 リクエストがあったのでRS...
80codeでのJoomla!
このサイトを置いている80codeサーバーでは通常のJoomla!のデフォルトの設定では正しく動きません。 異なる点 (私の場合だけのものもあるかもしれない。) htaccessは使...
携帯 Google Map モジュールのデモを公開しました : Joomla!1.5
http://demo.joomler.net/ にて携帯用Google Mapモジュールのデモを公開しました。右のQRCodeからアクセスできます。 表示は、携帯(au, docomo, soft...
今更... Joomla!1.5のすすめ
まだ、新規で構築するサイトでJoomla!1.0.xが選択されている事があるようです。それは、使えるエクステンションがJoomla!1.5と比較してダントツに多いからなのはわかっています。このサイトも...
Joomla! 1.5RC2の日本語ファイル
Operaで管理画面を開いたら : Joomla! Backend
Joomla!1.5 with greybox : Hack
エクステンションに隠しリンク
激減!SQLインジェクション攻撃
Joomla!での分岐処理
Joomla!1.5の最新リビジョンで異なるDatabase Charsetを試してみた
Class Creation
今は、Google Chromeを使っています
とっても恥ずかしい話

joomler_kun_48.gif Blog
Joomler! Blog

for Mobile