Joomler!.net - Decided on Joomla!

デル株式会社

Wiki or Wordpress? No it is JContentPlus.

Home » Blog » $myHead
0 votes
Written by:Joomler! 3708 hits 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を取得します。

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

JContentPlus for Joomla!1.5 powered by Joomler!.net

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.