CakePHP でオリジナルのレイアウトを使うための2つの作業 | oki2a24 の続きになります。
レイアウトで別の CSS を設定するのではなく、同じレイアウトを使いつつ、このアクションだけ別の CSS にしたい!というときに使う方法です。
まとめ
- View/themed/haskapTheme/webroot/css/cake.generic.css という感じで CSS ファイルを置く。 haskapTheme だけ適宜変更。
- コントローラで切り替える。アクションで $ths->theme = “haskapTheme” などと指定すればよい。
前提
- CakePHP 2.1.3 導入済み。
- ドキュメントルート/cake/sample/(ここにCakePHP が入ってます。app ディレクトリとか、.travis.yml ファイルとか。)
ソース
cake/sample/app/View/themed/haskapTheme/webroot/css/cake.generic.css
@charset "utf-8";
body {
background: #e2e2e2;
color: #fff;
margin: 0;
}
#header{
font-size: 2em;
font-weight: bold;
padding: 10px 20px;
}
#content{
background: #fff;
color: #333;
padding: 10px 20px 40px 20px;
}
#footer {
padding: 6px 10px;
text-align: right;
}
特にポイントはありません。
cake/sample/app/Controller/HaskapController.php
<?php
class HaskapController extends AppController {
// コントローラー名
public $name = 'Haskap';
// モデルを指定しない
public $uses = null;
public function index() {
$this->theme = "haskapTheme";
}
}
?>
ポイントは、アクション内で、$this->theme = “haskapTheme”; と指定することで、アクションで表示される CSS が指定したものに変わります。
結果
また、haskapThme といういかにもテーマめいた名前から、試しに hogehoge としてみましたら、ちゃんと動きました。やった!
具体的に変更した箇所は、View/themed フォルダ内のテーマフォルダ名 を hogehoge としたのと、コントローラのアクションで $this->theme に入れる値を hogehoge とした2箇所でした。
でも
やってみてあれ?と思ったことがあります。
コントローラーでたとえば、public $layout = “Haskap”; と指定すると、$layout に設定したレイアウトとその CSS が有効になってしまいました。アクション内で $this->theme に代入した CSS が有効になりません。
$layout を消せば今までどおり、結果の画面になります。なぜ?切変わらなーいです!ナンデ!?


「CakePHP2 でこのアクションのときだけこの CSS を使いたい、という場合の切り替え方法を調べます。」への1件の返信
[…] 投稿ナビゲーション ← 前へ […]