Joomler!.net - Decided on Joomla!

デル株式会社

Jboard is Multiple Board!

Home » Blog » システムのヘッドタグより先に出力したい:Joomla!1.5
Aug
8
2008

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

EMailPrintPDF
0 votes
Written by:Joomler! 3700 hits

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

 

ADD A COMMENT

Subject*
:
Color Swatch




Email Link Page Code Text Align Center Text Align Justify Text Align Left Text Align Right Text Bold Text Quote Text Italic Text List Bullets Text List Numbers Text Strikethrough Text Underline World Link
Sun Unhappy Smile Evilgrin Wink Tongue Lightning Surprised Grin Rain Clouds Cloudy Snow Waii
Name*
:
EMail*
:
Website
:

JContentPlus for Joomla!1.5 powered by Joomler!.net

デル株式会社

Related Items

joomler.net is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla!(R) name is used under a limited license from Open Source Matters in the United States and other countries.
joomler.net is not affiliated with or endorsed by Open Source Matters or the Joomla! Project.