Joomler!.net - Decided on Joomla!

Jboard is Multiple Board!

 

Archives

Blog

Demo

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

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

EMailPrintPDF
0 votes
Written by:Joomler! 7977 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ではどうなのかと調べてみました。

 
All Comments Feed Comments(1)
Haneulanses9
Haneulanses9
Guest
Reply
1 Informative
There are different kinds of Joomla related code errors which resolved by this post. As we know that Joomla is developing language and we should learn more about it through this site. Actually, I try to get american writers org review but there will be sound good and most impressive effort done here.
  0  
Monday, 13 August 2018 21:18

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*
:
Please answer....
Submit Preview

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.