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ではどうなのかと調べてみました。









