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));
?>