Home arrow Extensions arrow Joomla! CMS

8月
08
2008

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

diggに追加!

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

 

Related Articles

Joomla!1.5をもっと速くする!?
1週間くらい前からだろうか、次のバージョンのJBackup(早くしなきゃ)の最終テストとしながら、ダミー記事20,000タイトル(1タイトル、2000ワード。SQLデータで260MBにもなる。)をテス...
プラグインだけを使った投稿可能なエクステンションを考えてみた
メールで相談があったので考えてみた。 (たまにそういった相談があったりする。もちろんはじめての方ばかりです。) Joomla!のエクステンションでできることをまず整理してみた。 コン...
Frontpage Auto Updateをアップデートしました : Joomla!1.5
指定されていない記事が登録されないバグを修正しました。 アップデート方法 frontpage_update.phpを上書きしてください。 確認しているようでできていなかったようでした。 ...
Joomla!1.5になって増えたINIファイル
Joomla!1.5では、パラメータの保存やランゲージファイルにINIファイルが使われています。 ここでふと気づいたのですが、ランゲージファイルは問題ないでしょうが、パラメータは見られては困るものも...
今更... Joomla!1.5のすすめ
まだ、新規で構築するサイトでJoomla!1.0.xが選択されている事があるようです。それは、使えるエクステンションがJoomla!1.5と比較してダントツに多いからなのはわかっています。このサイトも...
こんな指定ができたのか...
Iconize Textlinks with CSS リンク先の拡張子などでアイコンを表示してくれるCoolなCSS。 早速ダウンロードして中をのぞいてみた。 a[href$='.doc'], a[...
エクステンションに隠しリンク
エクステンションの隠しリンク(広告)は、やめようよ。 Joomler!.netのエクステンションには隠しリンクは、ありません。 リンクは、表示しています。消すのは自由です。それは、Joomla.o...
80codeでのJoomla!
このサイトを置いている80codeサーバーでは通常のJoomla!のデフォルトの設定では正しく動きません。 異なる点 (私の場合だけのものもあるかもしれない。) htaccessは使...
オンラインで3Dのパッケージイメージを作る
Photoshopのアクションであったり、Win用のソフトで3Dのパッケージ風の画像を作成するものは見たことがあったのですが、WEB上で作成できるサイトがありました。 右のような画像をオンラインで作成...
Custom Head Tag for Joomla!1.5を公開しました
あまり使われていない気がしますが、Joomla!.orgで評価してくれた方がいたので1.5用を作成しました。 1.0.x版と異なり、スクリプトパス、スクリプト、スタイルパス、スタイルと四つの入力項目に...
DS-SyndicateコンポーネントにSQLインジェクションの脆弱性
複数のJavascript、複数のスタイルシートを結合する
Protoculous Javascript
demo.joomler.netを1.5.1にしました
このままいくとWEB上ですべて・・・?#02
Firefox 3ではまる
Joomla!1.5の日時表示が修正されていた
一晩たったらもうアップデートしていたよ
Prism0.9がリリースされていた : mozilla Labs
Joomla! サイトのローカルコピーを作成

C_square_trans.png Components
Joomla! Extensions
M_square_trans.png Modules
Joomla! Extensions
P_square_trans.png Plugins
Joomla! Extensions
Templates
Joomla! Extensions
a_delphi.gif Delphi for PHP
Delphi for PHP related

for Mobile