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’,

    ]

]);

緩い土手シャイニング

ども。

皆さんは、ご自宅のネット回線はどちらを使っておりますか?
僕自身、家ではそんなにパソコンを使わないのでポケットWifeを使っていたのですが
ここ最近、娘がようつべで『まいっちんぐマチコ先生』をヘビロテで再生し
妻もネットサーフィンに精を出し月の半分ぐらい過ぎた頃には7ギガを超えて
制限を受けて、娘と妻が激おこぷんぷん丸になり、僕の精神衛生上
よろしくないので、先日、ビックカメラに契約しにいきました。
なんとなく、フレッツ光でいいやと思って行ったら、ソフトバンクの兄ちゃんに
捕まり、説明を受けると安いし、まぁいいやと軽い気持ちで契約しました。

しかし、家に帰ってスマホで

ソフトバンク光 評判』と検索してみると…

まぁ、酷いwww

工事予定日が2ヶ月先w
工事予約がソフトバンク側のミスでできていないww
工事前日に来るはずの連絡が来ないwww
モデムが工事予定日前に届くはずなのだが来ないwww
工事当日に業者が来ないwwwww
設置しても繋がらないwwwwww
サーバーパンクがよくあるwwwwwww

大草原不可避wwwwwwwwwwwwwwwwwww

すごいんですよ。なんか、どんだけソフトバンクに嫌な思いさせられたの?
と思うぐらい、しっかりとしたまとめブログがあったりと
ネット上で吹き荒れているのよ、悪評判が…
俺、やっちまったなぁと暗い気持ちになっていたのですが…

そもそも工事日は契約日に決めた。
数日後にソフトバンクから工事日の通知書が家に届く。
とりあえず、なんの前触れもなくモデムが届く。
一応、業者さんから前日連絡が来る。←今ここ!

明日は工事立会いなのでブログはお休みなのですが
ソフトバンク光の調子をみたいのでリモートで追記を
したいと思います。

明日、実際、ソフトバンク光どうなの?編を書きたいと思います。
ではでは。




 

 

ミステリーショッパー

皆さんは『ミステリーショッパー』ってご存知ですか?
覆面調査ってやつです。メーカーさんから依頼をもらって
こっそりお店に行って指定の項目を調査するやつです。
僕もたまに使っているのですが、けっこうおすすめです。

http://www.ms-r.com/

調査というと難しく考えるかもしれませんが基本的に難しいことはなく
ツイッターでつぶやくのが苦でなければできます。
なぜ、ツイッターを引き合いに出したかというと、レポートが
基本的にはチェックボックスにチェックするものと、
150文字ぐらいで感想を書いてくださいといった項目が数個あるです。

例えばどんな案件があるかというと
居酒屋やラーメン屋やお好み焼き屋、他にも色々あります。
もちろん食べ物だけではなく理容やレジャーなどもあります。

案件によっては多少ルールがありますが、そんな難しいものはなく
『この商品食べて』とか『お手洗いをチェックして』とかです。
どの案件にもいくら以上使ってくださいってのがありますが
たいていは謝礼金と同じぐらいなので、簡単なレポートの打ち込みが
苦じゃない人にはお得なサービスです。

この会社さん以外にも覆面調査の会社はありますから、ぜひ調べてみてください。

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()子テーマで使うといった感じに分けるといいでしょう。

 それでは・・・

Contact Form 7 をいじりたい。

タイトル通りです。いじりたいのです。

いじれないのです。いじればいいじゃんと思うかもしれませんが、ちょっといじるとエラーになります。
やること自体はとても簡単なのです。やり方が検討付かないです。

「Contact Form 7 改行」

で検索すると

「Contact Form 7 チェックボックス項目の改行」ばっかり出るのです。

それっぽいの調べただけでも

http://biz.decoweb.jp/html/support/plugin/contactform.html
https://ja.forums.wordpress.org/topic/138818
http://www.atmark-salon.com/maki_mail_form
http://blog.dreamhive.co.jp/mkoba/?p=4681
http://matome.naver.jp/odai/2140227252298703701
http://inafukukazuya.com/archives/5871
http://media.thanksmaker.net/?p=1575
http://us1.php.net/manual/ja/function.date.php
http://webshufu.com/event-organiser-wordpress-event-calendar-plugin/
http://kachibito.net/web-design/pikaday.html

ただどれも違う。

これかなってのがこれ。

https://blog.ikt-s.com/contact-form7-width_height/
http://wpcj.net/449

ただこれをやってもバグる。また本日も弄る…

カスタム投稿の作成

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

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

 

【function.php】の中

add_action('init', 'add_websites_post_type');
function add_websites_post_type() {
    $params = array(
            'labels' => array(
                    'name' => 'サイト',
                    'singular_name' => 'サイト',
                    'add_new' => '新規追加',
                    'add_new_item' => 'サイトを新規追加',
                    'edit_item' => 'サイトを編集する',
                    'new_item' => '新規サイト',
                    'all_items' => 'サイト一覧',
                    'view_item' => 'サイトの説明を見る',
                    'search_items' => '検索する',
                    'not_found' => 'サイトが見つかりませんでした。',
                    'not_found_in_trash' => 'ゴミ箱内にサイトが見つかりませんでした。'
            ),
            'public' => true,
            'has_archive' => true,
            'supports' => array(
                    'title',
                    'editor',
                    'author',
                    'custom-fields',
            ),
            'taxonomies' => array('websites_category','websites_tag')
    );
    register_post_type('websites', $params);
}

 

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

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

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

 

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

findメソッドの引数

findメソッドは、sqlでいうselect文にあたるメソッドです。その名の通りデータの検索を行います.  メソッドに引数を与えて,処理を色々と変えてきます。

【find関数の引数について】

第1引数

  • find(‘all’) : 条件に該当するデータ全てを取得します.
  • find(‘first’) : 条件に該当するデータの最初の1レコードを取得します.
  • find(‘list’) : 条件に該当するデータをidとラベルが対になった形で取得します.
  • find(‘count’) : 条件に該当するデータの件数を取得します.

*条件を指定しない場合は,これだけでも利用できます

第2引数

  • conditions : データの検索条件を指定します.すごくよく使うので後述します.
  • fields : どのフィールドのデータを取得するかを指定します.
  • order : ソートの仕方を指定します.
  • limit : データを取得する件数を指定します.
  • offset : データ検索を何件目から行うかを指定します.

*よく使うのはcondisions(where句に相当する), order(order by句に相当する),limit(limit句に相当する)の三つだと思います.

condisionsの書き方について

array(
‘conditions’ => array(
     ‘モデル名.id’ => 1
}
}
というような形で記述すれば良いです.
public function index(){
            $this->set(‘data’,$this->Board->find(‘first’,array(
                ‘conditions’ => array(‘Board.id’ => 48))
                ));
        }
という感じで記述するとidが48のものを取得します.find(‘first’)を使ってますが,idが48のデータは1つしかありえないので,firstで一件だけ取得する書き方の方が効率的です.
メインのfind関数以外にも、たくさんのコントローラーメソッドがあります。それらはまた次回にします。

こんにちわ。朝の初心者PHP解説講座のお時間です。
今日のコードはこちらです。

<pre class="lang:default decode:true " >&lt;!-- 名前 --&gt;
		&lt;div class="col-xs-12 col-ms-9 col-sm-9 mgt-xs-15"&gt;
			&lt;div class="row"&gt;
				&lt;div class="col-xs-3"&gt;&lt;span class="myfont font_pink"&gt;&lt;?php echo __('Name'); ?&gt;&lt;/span&gt;&lt;/div&gt;&lt;!-- /.col --&gt;
				&lt;div class="col-xs-9"&gt;&lt;?php echo h($user['User']['handle_name']); ?&gt; &lt;/div&gt;&lt;!-- /.col --&gt;
			&lt;/div&gt;&lt;!-- /.row --&gt;
			&lt;hr&gt;

			&lt;!-- 年齢 --&gt;
			&lt;div class="row"&gt;
				&lt;div class="col-xs-3"&gt;&lt;span class="myfont font_pink"&gt;&lt;?php echo __('Age'); ?&gt;&lt;/span&gt;&lt;/div&gt;&lt;!-- /.col --&gt;
				&lt;div class="col-xs-9"&gt;&lt;?php echo h($user['User']['age']); ?&gt; &lt;/div&gt;&lt;!-- /.col --&gt;
			&lt;/div&gt;&lt;!-- /.row --&gt;
			&lt;hr&gt;

			&lt;!-- 趣味 --&gt;
			&lt;div class="row"&gt;
				&lt;div class="col-xs-3"&gt;&lt;span class="myfont font_pink"&gt;&lt;?php echo __('Hobby'); ?&gt;&lt;/span&gt;&lt;/div&gt;&lt;!-- /.col --&gt;
				&lt;div class="col-xs-9"&gt;&lt;?php echo h($user['User']['hobby']); ?&gt; &lt;/div&gt;&lt;!-- /.col --&gt;
			&lt;/div&gt;&lt;!-- /.row --&gt;
			&lt;hr&gt;</pre> 

ブラウザー上でどんな表示になるか、なんとなく、想像つきますか?簡単にいうとプロフィール画面の一部です。
ちなみにプロフィールの設定画面で登録しておくとデータベースから引っ張ってくれるしようになっています。

名前とか年齢とか趣味とかあったので、知識がなくても勘の鋭い方ならわかったかもしれませんね。

今日のミッションはurlを追加して、ブラウザー上に出力させて自動的に自分のwebページのリンクを張り、飛べるように設定することです。
登録がなければ、その段落そのものは消えていてもらう。
(ちなみにデータベースにurlの情報を格納しておけることを前提としておきます。今回はviewページの編集のみの解説です)

箇条書きにすると
urlを乗せる ← 簡単!
リンクを張り、飛べるようにする ← 簡単!
登録がなければ、その段落そのものは消えていてもらう ← ぎゃあ!

答えを書いてから解説しますね。

 <div class="row">
  <div class="col-xs-3"><span class="myfont font_pink"></span></div><!-- /.col -->
   <div class="col-xs-9">
       echo $this->Html->link(
     $user['User']['blog_url'],
 $user['User']['blog_url'],
 array('controller' => 'users',
 'action' => 'admin_index',
 'target' => '_blank',
 'escape' => false
)
   );
  ?>
 </div><!-- /.col -->
</div><!-- /.row -->
<hr>

これなんですが、前半はたぶん想像が付くと思います。大事なのは後半で

array(‘controller’ => ‘users’,
 ’action’ => ‘admin_index’,    ←ここから持ってきて
 ’target’ => ‘_blank’,       ←新規のウインドーで表示
 ’escape’ => false         ←なければ消えて

これがあるから、入力しているとリンクが出て、なければ消えてくれます。
actionについてもっとわかりやすく説明できるようになったら追記します。
呼んで字のごとくなのですが、なにげにうまい説明ができません…

arrayについて
http://php.net/manual/ja/language.types.array.php

CakePHP ~FormHelper~

FormHelperの説明を記載しておきます。これは、すばやくフォームを作成してくれるのでとても便利な機能です。

最初に使うメソッドは、create()です。

書き方は

FormHelper::create(string $model = null, array $options = array())

です。いろいろ書くとわけがわからなくなるので、今日はこのcreate()オプションについて説明します。

echo $this->Form->create('User', array('type' => 'get'));

create()には、多くのオプションがあります。

出力結果は、

<form id=”UserAddForm” method=”get” action=”/users/add”>

になります。

《オプション》

・【$options['type'] 】

 このキーは生成するフォームのタイプを指定します。 有効な値は ‘post’, ‘get’, ‘file’, ‘put’, ‘delete’ です。

・【$options[‘action’]】

このキーは現在のコントローラーにおいて、特定のアクションに 対してフォームデータを送り込むことができます。

【$options['url']】

現在のコントローラー以外にフォームデータを渡したい 場合、$options 配列の ‘url’ キーを使ってフォームアクションの URL を指定します。指定された URL は作成中の CakePHP アプリケーションに 対する相対値を指定できます。

今日は、ここまでですが、同時にinput要素を作る方法input()についても説明しなければいけませんが、こちらはまた書きたいと思います。