Comments
Description
Transcript
システムのヘッドタグより先に出力したい:Joomla!1.5
システムのヘッドタグより先に出力したい:Joomla!1.5 -Joomler!.net - Decided on Joomla! Written by Joomler! Friday, 08 August 2008 16:40 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を取得します。 1/3 システムのヘッドタグより先に出力したい:Joomla!1.5 -Joomler!.net - Decided on Joomla! Written by Joomler! Friday, 08 August 2008 16:40 $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)); ?> ところで、先に追加したい場合は上記のように面倒でしたが、後に追加したい場合は楽にでき ます。 2/3 システムのヘッドタグより先に出力したい:Joomla!1.5 -Joomler!.net - Decided on Joomla! Written by Joomler! Friday, 08 August 2008 16:40 テンプレートの「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ではどうなのかと調べてみました。 3/3