2011 3月 ITかあさん

ITかあさん

携帯サイトで見出しタグに共通のスタイルをあてる

<h1 style="margin: 0pt;"><span style="line-height: 1em; color:#FFFFFF; font-size: small;">test</span></h1>

これだけでh1タグなどの見出しタグに共通のスタイル・デザインをあてることができます。

コツはh1に直接スタイルを書くのではなくて、さらにspanタグで囲ってあげることです。

ただ、h1には、デフォルトのmarginがあるため、それはh1に直接スタイルをあてて回避します

Cakephp formhelper maxlength

Cakephp formhelper maxlength
手軽にフォーム側から文字数制限かける時に使えますね

<?php echo $form->input(‘age’,array(
‘label’=> false,
‘size’ => false,
‘div’=>false,
‘class’=>’inp-form2 required’,
‘id’=>false,
‘maxlength’=>3
)
); ?>

Cakephp NOT NULL

Cakephp conditions NOT NULL

$test= array(
‘conditions’=>array("Model.area" => $area_num,
‘NOT’ => array(‘Model.url’ => NULL)
),
);

Jqueryで超シンプルタブ

Jqueryでタブの切り替えをすることってけっこうありますよね。余計なプラグインは一切使わず、サクっとJqueryだけでタブの切り替えを書いてみました。私はタブの切り替えはいつもこんな感じでシンプルに書いています。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>

<script>
$(document).ready(function(){

$(´#tab-2,#tab-3,#tab-4,#tab-5´).css(´visibility´,´hidden´);

$(´#mainMenu .menu01´).click(function(){
$(´#tab-2,#tab-3,#tab-4,#tab-5´).css(´visibility´,´hidden´);
$(´#tab-1´).css(´visibility´,´visible´);
$(´#mainMenu a´).removeClass(´active´);
$(´#mainMenu .menu01 a´).addClass(´active´);
});
$(´#mainMenu .menu02´).click(function(){
$(´#tab-1,#tab-3,#tab-4,#tab-5´).css(´visibility´,´hidden´);
$(´#tab-2´).css(´visibility´,´visible´);
$(´#mainMenu a´).removeClass(´active´);
$(´#mainMenu .menu02 a´).addClass(´active´);
});
$(´#mainMenu .menu03´).click(function(){
$(´#tab-1,#tab-2,#tab-4,#tab-5´).css(´visibility´,´hidden´);
$(´#tab-3´).css(´visibility´,´visible´);
$(´#mainMenu a´).removeClass(´active´);
$(´#mainMenu .menu03 a´).addClass(´active´);
});
$(´#mainMenu .menu04´).click(function(){
$(´#tab-1,#tab-2,#tab-3,#tab-5´).css(´visibility´,´hidden´);
$(´#tab-4´).css(´visibility´,´visible´);
$(´#mainMenu a´).removeClass(´active´);
$(´#mainMenu .menu04 a´).addClass(´active´);
});

 

});

</script>

<ul id="mainMenu">
<li class="menu01"><a class="active" href="#">タブ1</a></li>
<li class="menu02"><a href="#">タブ2</a></li>
<li class="menu03"><a href="#">タブ3</a></li>
<li class="menu04"><a href="#">タブ4</a></li>
<li class="menu05"><a href="#">タブ5</a></li>
</ul>

<div id="tab-1">
tab-1の内容を表示します

</div>

<div id="tab-2">
tab-2の内容を表示します

</div>

<div id="tab-3">
tab-3の内容を表示します

</div>

<div id="tab-4">
tab-4の内容を表示します

</div>
<div id="tab-5">
tab-5の内容を表示します

</div>

すんません、これだけです。
とりあえず、クリックしたリンクはclass=”active”は最低限あてるようにしました。全主要ブラウザで動作チェック済みです。

余計なエフェクトは一切ないですが、シンプルにタブの切り替えを行いたいときに、どうぞ!

Cakephp でBETWEEN

Cakephp でBETWEEN 間を検索

SQLのWHEREの中でも間を検索する
BETWEENをCakephpで行います

SQL

WHERE Field.id = 3 AND Field.id = 1 or Field.id = 2 

Cakephp

$conditions = array("Post.date BETWEEN ? AND ?" => array("2008-1-1", "2009-1-1"));

Cakephp AND検索

Cakephp でAND検索

CakephpのconditionsはSQLで言うところのWHERE(検索条件)にあたります。
検索条件が複数ある場合、’and’ => の中にarrayで配列で条件を入れます。

SQL

WHERE Field.id = 3 AND Field.id = 1 or Field.id = 2

Cakephp

$conditions = array(
                            	 
                                        array('Field.id = 3',
                                                'or' => array('Field.id = 1', 'Field.id = 2')));

cakephpでブックマークアプリを作る(3)

前回の記事でCakephpのWHEREである、conditionsの使い方が分かりました。さて、これを利用しつつ、カテゴリごとにページを別けたいと思います。

今回の記事でCakephpでのパラメータが分かります。

よくhttp://example.jp/?action=1というよに、?で値を渡します。私もCakephp以前はこのようにやっていたのですが、やはりこの『?=』という形はGoogle先生があまりお好きではありません。ですが、CakephpではGoogle先生が大好きなhttp://example.jp/posts/1
という、スラッシュ切りにしてくれるんです。URLもシンプルで、かつ、SEOにも効果的なURL構造にしてくれるなんて、素晴らしいですね!

これまで私の記事通り作って頂いているなら、
http://localhost/bookmark/posts/category/1
というURLでcategory = 1 のデータを呼び出せるようにしてみましょう!

新規ページ用に、function category()を追加しよう

class PostsController extends AppController に新規functionを追加します。前回までのfunction index($id = null) {}をコピーするとよいでしょう。

function category($id = null) {
$this->Post->category = $id;

$con = array('conditions'=>
	array('Post.category'=>$id),
	'order' => array('Post.id DESC'),
	
);

$post = $this->Post->find('all',$con);
$this->set('posts',$post);
}

$this->Post->category = $id;
これだけで、http://localhost/bookmark/posts/category/1がとれてしまいました。?category=1を$_GET[‘category’]の値を受け取ったのと同じです。

このコントローラーの出力用のViewも追加します。view/posts/index.ctpファイルを複製して、category.ctpという名前で保存してください。

これでばっちりページを別けることができました。view/posts/index.ctpとview/posts/category.ctpの2つのctpファイルの上の方に

<ul>
<li><a href="/bookmark/posts/">トップページ</a></li>
<li><a href="/posts/category/0">検索エンジン</a></li>
<li><a href="/posts/category/1">ブログ</a></li>
</ul>

こんな感じでリンクメニューを追加してみてはどうでしょう??
すっかりブックマークアプリっぽくなりましたね!

今回のデータをZIPファイルで固めました。コメントアウトで詳しい解説付きです。
よかったらダウンロードしてご利用ください。
ダウンロードはこちら

今日のまとめ

$this->Post->category = $id;これでhttp://localhost/bookmark/posts/category/1の、category = 1が取れます。今回はcategoryとしてとりましたが、仮にhttp://localhost/bookmark/posts/id/1とでもして、id = 1のページだけを取りたいときは、$this->Post->id = $id;として、’conditions’=>array(‘Post.id’=>$id) としてあげればid = 1にマッチしたデータが取れます。今回はさらっとしたブックマークアプリですから作りませんが、これを利用すれば各URLの詳細ページみたいなのが作れますね!

PHP 特定の日時から何時間後

以前、PHP雑記帳のコーナーにて、PHPで今日から何日後、何日前とか。という記事を書きましたが、それと関連した内容で、今日意外、つまり自分が指定した特定の日時から何時間後、何日後を出力したいと思います。

すっかりおなじみ、strtotime()関数を利用。

$test = "2011-03-02 14:45:26";//変更したい時間
date("Y-m-d H:i:s",strtotime("$test +1 hours"));

こうなります。

$test = "2011-03-02 14:45:26";//変更したい時間
date("Y-m-d H:i:s",strtotime("$test +1 hours"));

このY-m-d H:i:sは日時のフォーマット

$test = "2011-03-02 14:45:26";//変更したい時間
date("Y-m-d H:i:s",strtotime("$test +1 hours"));

こちらに変更したい時間を入れる。
以上。
すごいね~。

CakePHP layout使用時のtitleタグ

CakePHPの layout、あれは便利ですよね!
共通のlayoutを利用していても、titleタグは個別に設定できます。

contllor

function test($id = null) {
    $this->set('title', 'hogehoge');
}

ctp

<head> 
<title><?php echo $title;?></title>
</head>

って、変数 にテキスト代入するのと何ら変わりません。

何だ、悩んで損をしました。

cakephpでブックマークアプリを作る(2)

前回までの内容で、cakephpを利用して、データベースの内容を表示するところまではできました。ブックマークアプリらしく、さらにはよくありがちな『WEBデザインのリンク集』なんかにも応用できるようになるよう、登録したURLをカテゴリ別けして、カテゴリごとに表示できるようにしてみましょう。

カテゴリー用のフィールドを追加する

ALTER TABLE `posts` ADD `category` INT NULL AFTER `url` ,
ADD INDEX ( `category` ) 

URLをカテゴリごとに振り分けするフィールドを用意します。INT型にしてINDEXも設定するといいでしょう。

データを追加する

まだデータ数が2件しかないので、表示用のデータを追加しましょう。
さきほどカテゴリーも追加しましたが、このcategoryフィールドのルールは

  • 1→検索エンジン、ポータルサイト
  • 2→ブログ

とでもしておきましょうか

INSERT INTO `bookmark`.`posts` (
`id` ,
`title` ,
`url` ,
`category` ,
`created` ,
`modified`
)
VALUES (
NULL , 'コリス', 'http://coliss.com/', '1', '2011-02-23 13:21:33', NULL
), (
NULL , 'CREAMU', 'http://blog.creamu.com/mt/', '1', '2011-02-23 13:23:36', NULL
), (
NULL , 'ITかあさん', 'http://www.kaasan.info/', '1', '2011-02-23 13:23:50', NULL
);

(強制はしませんが、ITかあさんも追加してくれると嬉しいです。)

前回までに登録したデータのcategoryフィールドはまだNULLなので、カテゴリのデータを追加してあげてください。

UPDATE `bookmark`.`posts` SET `category` = '0' WHERE `posts`.`id` =1 LIMIT 1 ;

UPDATE `bookmark`.`posts` SET `category` = '0' WHERE `posts`.`id` =2 LIMIT 1 ;

なぜ`category` = ‘0’ と、1からではなく、0から始まっているかというと、Cakephpのフォームヘルパーで仮にプルダウンを作ると、
デフォルトでは0から始まるからなのです。ま、当面なんでもデフォルトでいきましょう。

これで今回の内容に必要なデータが揃いました。

category = 0だけを出力する

今回の覚える内容はcakephpのconditionsの話です。conditionsを設定すると、前回はデータベースに登録してある内容をすべて表示しましたが、条件を絞ってデータを表示する、というものです。SQLで言う、WHEREにあたる部分です。

PostsController

<?php
class PostsController extends AppController {

var $uses = array('Post');//自分が使うmodelを配列で書きます。今回はひとつだけ

function index($id = null) {

$con = array('conditions'=>
array('Post.category'=>1)
);

$post = $this->Post->find('all',$con);

debug($post);

$this->set('posts',$post);//SmartyのAssignと同じ。viewに出力用の変数として渡します
}

}

?>

追加・変更になったのは赤字の部分だけ。すると、debug($post);の結果が変わりましたね

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 1
                    [title] => Yahoo
                    [url] => http://www.yahoo.co.jp
                    [category] => 0
                    [created] => 2011-02-18 14:34:44
                    [modified] => 
                )

        )

    [1] => Array
        (
            [Post] => Array
                (
                    [id] => 2
                    [title] => Google
                    [url] => http://www.google.co.jp/
                     [category] => 0
                    [created] => 2011-02-18 14:35:11
                    [modified] => 
                )

        )

)

[category] => 0
の条件のものだけが無事出力されましたね。
この conditionsには色々ありまして、例えばOR検索、AND検索、LIKE検索も条件が複合検索になっても当然OKです。

順番を入れ替えてみる

CakephpでWHEREができるということは、ORDER BYもできるんです。とっても簡単!

PostsController

<?php
class PostsController extends AppController {

var $uses = array('Post');

function index($id = null) {

$con = array('conditions'=>
array('Post.category'=>1)
'order' => array('Post.id DESC'),
);

$post = $this->Post->find('all',$con);

debug($post);

$this->set('posts',$post);
}

}

?>

これだけで降順になりました!簡単!WHEREと同様に複合的に順番を入れかえることもできます。

今日の分は、前回の続きなので、PostsControllerのファイルだけをあげておきますね。
ダウンロードはこちら

次回はこのカテゴリをページごとに別けたいと思います。

今日のまとめ

$conditions = array(‘conditions’=>array(‘Post.category’ =>1),
‘order’ => array(‘Post.id DESC’),
);
これで条件も、ソートもばっちり!
どうでもいいですが、私の文章や記事が明らかにCakephpの初めての記事からだいぶ『エラソー』になったのにお気づきでしょうか?
Cakephpが楽しすぎて、Cakephp初めて1ヶ月で会員サイト、携帯サイトの構築ができてしまったんです!エヘヘ。