Controll_Templateクラスを使うと、デフォルトがtemplate.phpです。oilでコードを生成すると、自動的にこのファイルも追加されます。
app/views/template.phpです。この自動に生成されるテンプレートですが、Fuelに用意されている、Htmlクラスなどが、ほとんど使用されていません。
そこで、できるだけ、Fuelに用意されているクラスを利用して書いてみようと、挑戦したのです。
cssやjsはpublic/assetsのcss、jsディレクトリー下に存在します。それを読み込むクラスAssetも存在します。
Css…、うむ。まともに作るの面倒だな。そうだ、960グリッド・システムでも使ってみるか。ということで、960グリッドシステムを利用して見ました。(結果、これは失敗でしたね。やたら、divタグが増えるは、classの指定は増えるはで、960gs知らない人には、読みづらいコードになってしまいました。)
まあ、ビューを書くときに役に立ちそうな、クラスはありそうかなと思っていても、調べるのは嫌だなとも考えている人向けの、情報です。
コードは次のとおりです。
<?php echo Html::doctype('html4-trans'); ?>
<html>
<head>
<?php
// content-typeを配列で指定するとバグる
echo Html::meta('content-type', 'text/html; charset=utf-8', 'http-equiv') . PHP_EOL;
echo Html::meta('content-style-type', 'text/css', 'http-equiv') . PHP_EOL;
echo Html::meta('content-script-type', 'text/javascript', 'http-equiv') . PHP_EOL;
// 生成されたファイル名の後に?に続いて謎の数字がつくバグ有り。使えない
// echo Asset::css(array('reset.css', '960.css', '960_12_col.css', 'text.css'),array(),null,false);
?>
<link rel="stylesheet" type="text/css" media="all" href="/assets/css/reset.css" />
<link rel="stylesheet" type="text/css" media="all" href="/assets/css/text.css"/>
<link rel="stylesheet" type="text/css" media="all" href="/assets/css/960_12_col.css" />
<link rel="stylesheet" type="text/css" media="all" href="/assets/css/default.css" />
<!-- cssと同様に、謎の数字がつくバグがあり。使えない -->
<?php // echo Asset::js('jquery.js'); ?>
<script type="text/javascript" src="/asset/js/jquery.js"></script>
<title><?php echo $title; ?></title>
</head>
<body>
<div id="wrapper" class="container_12">
<div id="header"class="grid_12">
<h1><?php echo $title; ?></h1>
</div>
<div class="clear"></div>
<!-- エラーメッセージの表示(赤ベース)-->
<?php if (Session::get_flash('error')): ?>
<div class="prefix_1 grid_10 suffix_1 alpha omega">
<div id="error">
<p><?php echo implode('</p><p>', (array) Session::get_flash('error')); ?></p>
</div>
</div>
<div class="clear"></div>
<?php endif; ?>
<!-- 注意メッセージ(黄色べーす)-->
<?php if (Session::get_flash('notice')): ?>
<div class="prefix_1 grid_10 suffix_1 alpha omega">
<div id ="notice">
<p><?php echo implode('</p><p>', (array) Session::get_flash('notice')); ?></p>
</div>
</div>
<div class="clear"></div>
<?php endif; ?>
<!-- 通知メッセージ(青ベース)-->
<?php if (Session::get_flash('message')): ?>
<div class="prefix_1 grid_10 suffix_1 alpha omega">
<div id="message">
<p><?php echo implode('</p><p>', (array) Session::get_flash('message')); ?></p>
</div>
</div>
<div class="clear"></div>
<?php endif; ?>
<!-- コンテンツ本体-->
<div id="content" class="prefix_1 grid_10 suffix_1 alpha omega">
<?php echo $content; ?>
</div>
<div class="clear"></div>
<!-- フッター-->
<div id="footer" class="grid_12">
<a href="http://fuelphp.com">Fuel</a> is released under the MIT license.<br />
Page rendered in {exec_time}s using {mem_usage}mb of memory.
</div>
<div class="clear"></div>
</div>
</body>
</html>
この中で、自分で書いたcssはdefault.cssだけです。残りは960gsのものです。セッションのフラッシュデーターを利用して、出しているメッセージへnotice以外、通常の通知メッセージのmessageと、エラー時の表示errorを追加し、それぞれ、別の色で表示するようにしました。
Asset::cssの出力でファイル名の最後に?1234...という数字がつくバグがあるので、じゃあAsset::jsはどうかなと思い、使わないjquery.jsを読み込んで見ましたが、同じくバグっています。
default.cssはこれです。
#header, #footer {
background-color: #137F80;
color: #FFF;
padding: 15px 0 0 15px;
}
#header a, #footer a {
color: cyan;
}
#header {
border-top: 10px solid #000;
}
#footer {
font-size: 10px;
padding-bottom: 15px;
border-bottom: 10px solid #000;
}
#content, #error, #notice, #message {
margin: 20px 0 15px 0;
}
#error, #notice, #message {
font-weight: bold;
padding: 20px 20px 15px 20px;
}
#error p, #notice p, #message p{
margin-bottom: 10px;
}
#error {
color: #FFACAD;
background-color: #FFD5D5;
}
#notice{
color: #C76E34;
background-color: #FFBB65;
}
#message {
color: #1C6B8B;
background-color: #A8CDE3;
}
実際に、使ってみてわかったのが、結構バグっていることです。こうしたクラスは、開発している側でも、用意してみたけど、自分たちも含め、使う人いないから、バグが潜んでいるという感じでしょうか。
まあ、実際、こうしたクラス使ってもメリットより、視認性が落ちる、オーバーヘッドがかかるなど、デメリットのほうが多そうです。それに、大抵、このようなコードは一度書いたら、そのまま使いまわしますし、エディターも入力手助けしてくれますし、zen codingもありますしね。私は、無理に使わないことにしました。
それと、デフォルトがassetsというフォルダーの下というのも、なんだかなあ。assets下でなくとも、登録すれば探しに行ってくれるんだろうけど、それを知らないで、そのまま使うと、assetsという名前を見て、「もしかしたら、Fuelphp使っている?」とバレる危険性があるのは、一種のセキュリティーリスクですしね。Assetsクラスは、使う必要ないんじゃないでしょうか。
Assetsクラスの良いところは、指定されたファイルがないと、エラーになり、知らせてくれることでしょう。普通にhtmlを叩いて、ファイル名が違っていても、何も知らされませんからね。
| Fuelphpのoil refineで、コマンドライン処理< 前 | 次 >SimpleAuthをシンプルに解説 |
|---|
| < 前 | 次 > |
|---|