画面にHTMLを表示する、時刻を表示する

PHPでHTMLを表示する場合はprint または echo を使用します。 時刻を表示するときはdateを使用します。 dateファンクションは画面に表示する機能はもっておらず、【戻り値】として内容を得られるだけです。文字列と連結するときは、 .(ドット)を使って戻り値と文字列を連結します。

CakePHPでVirtualFieldsを使う

virtualfieldsは任意のSQL表現をつくり、モデルのフィールドとして割り当てることができます。作成したフィールドは保存することができません。find関数等で他の引数と渡すとエラーになりますので注意が必要です。その場合は渡す前に空にもどしましょう。その他データベースにバーチャルフィールドと同じ名前があるとエラーを引き起こします。 バーチャルフィールドの作り方 モデルAにバーチャルフィールドを作成します。 1:モデルAのバーチャルフィールドを追加します。 $this->virtualFields = array(   ‘rank’ => ‘sum(User.rate)’,   ); 2:フィールドに追加します。   $fields = array(    ’conditions’ => array(‘User.agecheck’ => 1), ‘fields’ => array( ‘User.id’, ‘User.rate’ ‘User.rank’ ) ); $res = $this->ModelA->find(‘all’, $fields); ザックリかきすぎてしまった。 また今度書き直そう・・・ではっ!

Cakephp エラー対処法 warning: missing argument ~ 

warning: missing argument ~ というのは、

定義された引数と、呼び出す引数が違いますよというエラーです。

例えば、

 

と定義して、呼び出すときに

だとエラーになってしまいます。

こういうときは、初期値をにすればいいでしょう。

Cakephp Modelのテストケース作成

あるユーザーが職業選択ができて、そのラジオボタンを削除したり追加したりできるような仕様ががあった場合のテストケースを作成しました。そこでcakephp2のModelにtestSave()とtestDelete()を作成しました。

Fixtureに登録しているユーザーデータに基づいて記述してみました。

public function testSave(){

// もともとid=4まである、4件Fixtureに書いてある
$result = $this->MstJobType->find(‘count’);
$this->assertEquals(4, $result);

// idが4番まであったら、次に登録するデータは5番になるはず
// まだ登録していないので5番のデータが取れないチェック
$result = $this->MstJobType->find(‘first’, array(
‘conditions’ => array(
‘MstJobType.id’ => 5,
),
‘contain’ => false
));
$expected = array(); // 結果とれない!
$this->assertEquals($expected, $result);

// 5番になるデータを登録する
$update = array(
// MstJobTypeに登録するための項目(画面と同じだからadd.ctp/edit.ctpをチェック)
‘MstJobType’ => array(
‘name’ => ‘公務員’,
‘slug’ => ‘civilworker’,
‘deleted’ => 1
)
);
$this->MstJobType->create(); // 初期化(おまじない)
$this->MstJobType->save($update); // 保存

// 5番のデータが作成されたので、データが取れる
$result = $this->MstJobType->find(‘first’, array(
‘conditions’ => array(
‘MstJobType.id’ => 5,
),
‘contain’ => false
));
$expected = array(
‘MstJobType’ => array(
‘id’ => 5,
‘slug’ => ‘civilworker’,
‘deleted’ => true,
‘name’ => ‘公務員’,
)
);
unset($result[‘MstJobType’][‘created’]); // 作成時間:実行した時間が登録されちゃうと比較できないので、検索結果から消しておく
unset($result[‘MstJobType’][‘modified’]); // 更新時間:これも同じ
$this->assertEquals($expected, $result);

// テーブルの中身が1件増えたので5件になってる
$result = $this->MstJobType->find(‘count’);
$this->assertEquals(5, $result);
}

/**
* testDelete
* @return void
*/
public function testDelete() {
// 今あったものが無くなる(削除される)テスト
// 削除されていないデータがテーブルの中に2件ある(Fixtureに記載されているデータの件数)
$result = $this->MstJobType->find(‘count’, array(
‘conditions’ => array(
‘MstJobType.deleted’ => false
)
));
$this->assertEquals(2, $result);

// Fixtureに記載されているあるデータが取得できるかチェック
$result = $this->MstJobType->find(‘first’, array(
‘conditions’ => array(
‘MstJobType.id’ => 3,
)
));
$expected = array(
‘MstJobType’ => array(
‘id’ => 3,
‘name’ => ‘会社員’,
‘slug’ => ‘employee’,
‘created’ => ‘2015-02-22 15:35:03’,
‘modified’ => ‘2015-02-22 15:35:03’,
‘deleted’ => false
),
‘User’ => array()
);
$this->assertEquals($expected, $result);

// このもともとあった↑データを削除する
$this->MstJobType->id = 3;
$this->MstJobType->delete();

// 今削除されたものがちゃんと取得できなくなったかのチェック
// 最初に実行したfindと同じ条件で再度チェックする
$result = $this->MstJobType->find(‘first’, array(
‘conditions’ => array(
‘MstJobType.id’ => 3,
)
));
$expected = array(
‘MstJobType’ => array(
‘id’ => 3,
‘name’ => ‘会社員’,
‘slug’ => ‘employee’,
‘created’ => ‘2015-02-22 15:35:03’,
‘deleted’ => true
),
‘User’ => array()
);
unset($result[‘MstJobType’][‘modified’]); // 更新時間:削除されたときの実行時間が登録されてしまうので、消しておく
$this->assertEquals($expected, $result);

// 削除されていないデータは、テーブルの中に1件になった
$result = $this->MstJobType->find(‘count’, array(
‘conditions’ => array(
‘MstJobType.deleted’ => false
)
));
$this->assertEquals(1, $result);
}

【注意点】

*削除されていないデータ、つまりdeleted=>falseの数を変更すること。
*削除対象のデータに対して ’User’ => array();を追加することで、
その職業で登録されているユーザーデータも削除されるという感じで
必ず記述する(array()の中は何も書かなくていい)。

*実際に削除されたということを記述するにはdeleted=>falseから
deleted=>trueに変更して、現在の削除されていないデータ(deleted=>false)は
1件になったので$this->assertEquals(1, $result);と記述する。

ジャックナイフストレッチ~10秒体操~

みなさん。特にパソコンと日々戦っているみなさん。腰の具合は大丈夫ですか?

何十時間も座りっぱなしだと腰に重力がかかり、神経を圧迫して腰痛の原因になってしまいます。

しかし、最近の研究から実は腰痛の原因は’腰’ではなく’太もも裏側’が硬直状態であるからだといわれています。今日は腰痛予防の一つである。ハムストリング体操=”ジャックナイフストレッチ”の方法をご紹介します。

~ジャックナイフストレッチ~

【順序】

ジャックナイフストレッチ

①足を肩幅に広げてしゃがみ込み、膝と胸をつけた体勢になります。

②足首をつかみ、膝と胸が離れないように注意しながら足を伸ばします。

③これ以上足が伸びないポイントで10秒間保持します。

④上記①~③の動作を3セットから5セットおこないます。

【ジャックナイフストレッチの効果】

・腰痛予防、改善。
・身体の柔軟性アップ。
・お尻のヒップアップ効果。
・骨盤が動きやすくなり腰への負担が減り、自然と背筋が伸びる。
など

*ただ、このストレッチ法も万能ではありません。

前屈した時に腰が痛い人や、ヘルニアを患っている人は、逆に悪化させる場合があるそうですから、このような人はやらない方が良いそうです。

ふとももをやわらかくしましょう♪

簡単なので、是非試してみてください♪

テストケースの要点 Cakephp

テストケースは、開発したプログラミングに対して、意図しない動作をしないかを確認する作業です。

テストケースの書き方は

例えば

/Model/Articles.phpの
       * article名のみ取得する
public function getArticleName($article_id = null) {
$result = $this->find(‘first’, array(
‘conditions’ => array(
$this->alias.’.id’ => $article_id,
$this->alias.’.deleted’ => false,
),
‘fields’ => $this->alias.’.title’,
‘contain’ => array(),
));
return $result;
}

処理のテストケースを作成します。

===========================

補足

実行方法(teraterm)

・・・app]

全てのページを検証する場合

./Console/cake testsuite app AllTests

一つのページを検証する場合

./Console/cake testsuite app Model/Article

あるページの関数を検証する場合(debug(変数)等の中身おを調べたいとき)

./Console/cake testsuite app Model/Article –filter getArticleName(関数名)

==================================

検証する論理値(仮定しなければいけないこと)

実行する処理(今回は記事のタイトルを取得する)に対して、仮定することはいくつかあります。

①id(個人データ)があったら、そのタイトル名(Articleのtitle)を取得できるか

②削除済みのタイトルは取れない

③存在しないタイトルは取れない場合(削除されていない場合)

【実際のテストケース】

Model/Article.php

/**
* testGetTheAge method
*
* @return void
*/
public function testArticleName(){
// 存在しないタイトルは取れない
$result = $this->Article->getArticleName(99999999);
$compare = array(); //debug($result)
$this->assertEquals($compare, $result);
// 削除済みのタイトルは取れない
$result = $this->Article->getArticleName(6);
$compare = array();
$this->assertEquals($compare, $result);
// タイトルが取れる 
$result = $this->Article->getArticleName(3);
$compare = array(
‘Article’ => array(
‘title’ => ‘うぁーがんばろー’,
)
);
$this->assertEquals($compare, $result);
}

======================

【補足②】

始めに

@return void(->何も返さないよ) とか

@return array(->配列の返すよ)

など、返り値を設定しておきます。

*deletedの考え方

deleted = 削除済みのものを取ってくる

type P = false =>0、true=>1

*debug()関数に関して

debug()関数は取得したいデータを取ってきたい場合

実行したときにそのデータ処理が取得できます。

 

======================

Fixture(テストケースのデータ格納場所)の追加に関して

Fixtureに情報(データ)を格納したら、AllTestsをするとき、

そのときにでたエラーを修正していきます。

========================

このように、実行したい処理が何をしている処理なのか

(データを取得したいのか、削除したデータを取ってきたいのか、IF文で別々に処理しているのか、空の場合の処理なのか)

など、考えた上で、

テストケースは10パターンほど考えます。多ければ多いほどよいです。

このようにもし何かの不具合が見つかったら、何処が悪かったのかを検証できるので

基本的なことですがしっかりと見につけていけたらいいですね。

CakePHP テーブルをJoinする

「テーブルをジョインしてね!」って言われたら、私はテーブル?机?、ジョイン?結合する?・・・・あっ!机を合わせてパーティーするのか!と思ってしまい、笑われましたww

初めて聞いた人は何いっているのかわからない。。。今日はCakePHP のjoinに関して

φ(`д´)メモメモ…しておきます(完全に網羅していません。)

【join(→関連付け)してモデルのレコードを取得する】

・HABTM(HasAndBelongsToMany)の特徴

始めにHABTMを説明しておくと

・2つのテーブルを結合するために使われる

・多対多で定義できる

という特徴を持っている。

例えば、UserとCategory がHABTMで関連付けられていると

両者を関連付ける結合テーブルというのが別に必要になる。

この結合テーブルには、インデックスとなるIDの他に、

User_idとCategory_idのカラムを用意してあげる必要があります。

【find関数で結合(join)したレコードを取得】:例

$this->User->find(‘all’,[

            ‘join’ => [

                   ‘type’ => ‘posts’,

                 ‘alias’ => ‘Post’ //*大文字

                 ‘conditions’ => ‘User.id = Post . user_id’,

    ]

]);

CAKEPHP nl2br() に関して

nl2br ・・・・・ 改行文字の前に HTML の改行タグを挿入する関数です。

書式:string nl2br( string string )

nl2br()は指定された文字列に含まれる全ての改行文字(\nなど)の前に、HTMLの改行タグ(<br />など)を挿入します。改行文字とは、行の最後に挿入して、そこで行を変えることを示す制御文字の一種である。ソフトによっては、矢印などを表示する場合があるが、通常、改行文字は目に見えない。

改行文字としては、キャリッジリターン(CR)、ラインフィード(LF)、この2つを連続したものなどが使用される。UNIX系OSではLF、Macintosh系ではCR、Windowsやインターネット電子メールはCR+LFが標準となっている。

返り値:改行文字の前にHTMLの改行タグを挿入した文字列を返します。

<?php

$str = 1行目\n2行目;

print nl2br($str);

?>

出力結果

1行目
2行目

get_template_directory_uriとget_stylesheet_directory_uri の違い

get_template_directory_uri()はWordPressテーマディレクトリまでのURLを取得する関数です。

もう一方で、

get_stylesheet_directory_uri()はWordPressテーマディレクトリまでのURLを取得できる関数です。

違いは、WordPressテーマの親子関係にあります。

get_template_directory_uri()をもう少し細かくいうと、親テーマで使用した場合は、get_stylesheet_directory_uri()と変わらずに有効化してあるWordPressテーマのテーマディレクトリURLの取得します。小テーマで使用した場合は、子テーマのstyle.cssに書かれている「Template」をみてテーマディレクトリURLを取得しています。

もし、子テーマを指定し、そこからURLを取得する場合は、get_template_directory_uri()とget_stylesheet_directory_uri()が違います。get_template_directory_uri()は親テーマのテーマディレクトリURLを出力してくれますが、get_stylesheet_directory_uri()は子テーマのテーマディレクトリURLを出力してくれます。

<まとめ>

get_template_directory_uri()とget_stylesheet_directory_uri()の違いについて紹介しました。WordPressのテーマ開発をするときはget_template_directory_uri()は親テーマで使い、get_stylesheet_directory_uri()子テーマで使うといった感じに分けるといいでしょう。

 それでは・・・

カスタム投稿の作成

カスタム投稿は、自由に投稿できる【投稿】です。いままでは、投稿と固定ページの2種類でした。それ以外に、独自で作成した投稿=カスタム投稿を作成することが出来ます。

プラグインで作成することもできますが、勉強もかねて、function.phpに書く方法を記しておこうと思います。

 

【function.php】の中

 

add_adtion()関数は、【指定したタイミングで、指定した関数を実行する】関数です。

任意の名前は、安全に名前をつけたいなら、名前の最初にオリジナルの名前を記入したほうがいいと思います。また、基本的に指定した名前はサイト運用中に変更することが出来ません。

適用させる引数は、たくさんあるので割愛します。

 

投稿できるようになったら、それをどこ(単一ページ、固定ページなど)に表示させるかということろですが、長くなってしまうので改めて書いていきたいと思います。