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_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関数以外にも、たくさんのコントローラーメソッドがあります。それらはまた次回にします。

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()についても説明しなければいけませんが、こちらはまた書きたいと思います。

IF文とSWITCH・CASE文の使い分け

ある条件を調べて処理を切り替えるには、ifとswitch caseの2つの方法があります。

条件判定と分岐の基本はifです。switch caseは1つの値を順次比較して比較元と比較先が『等しい』ときだけ処理の流れを切り替える──という形で、ifの構造を単純化した変形と捉えればいい。

switch文の基本用法

switch( 変数や式 ){
  case 値1:
  処理1;
      break;
  case 値2:
  処理2;
      break;
  default:
  デフォルトの処理
}

 

IF文を使用した場合

<?php
$a = 2;
if( $a == 0 ){
  echo '$aは0です。';
}
else if( $a == 1 ){
  echo '$aは1です。';
}
else if( $a == 2 ){
  echo '$aは2です。';
}
else{
  echo '$aは0・1・2のいずれでもありません。';
}
?>

SWITCH・CASE文を使用した場合

<?php
$a = 2;
switch( $a ){
  case 0:
      echo '$aは0です。';
      break;
  case 1:
      echo '$aは1です。';
      break;
  case 2:
      echo '$aは2です。';
      break;
  default:
      echo '$aは0・1・2のいずれでもありません。';
}
?>

どちらも出力結果は【$aは2です。】です。

SWITCH文で重要なのは、case文以降breakです。breakがなかったら、条件が成立したcase文以降のcaseも実行しちまいます。

使い分けとしては、処理構造に適した構文をつかえ。です。

たくさんの比較先から1つの値と等しい1つだけを見付けたい場合、switch caseの方が遙かに有効です。switch caseを使った──ソース上で“switch”というキーワードを見た時点で、『1つの変数を順次比較している』という構造だとすぐに理解できるからです。

以上このお話はおわり。

CakePHP コントローラーの使い方

CakePHPでは、Model-View-Controller(MVC)というアーキテクチャーを導入しています。

使い方ですが、、、

モデルはデータベースアクセスに関する機能ですから、データベースを使わなければ不要です。ビューは、テンプレートとして画面表示を作成しておくものですが、これも「PHPの関数で無理やり画面表示を書きだしてしまう」なら、なくても大丈夫です。

しかし、コントローラーに関しては【なし】で済ませることができません。コントローラーでページの処理を行うのですから。これがないと、そもそもページそのものが存在できません。したがって、まず最初は「コントローラーを作って、ページを表示する」ということからやっていくことにしましょう。

コントローラーは、CakePHPの「app」フォルダの中にある「Controller」というフォルダの中に作成します。ここにPHPのスクリプトファイル(拡張子が.phpのファイル)を用意しておくと、自動的にそれらをコントローラーのスクリプトだと認識します。

注意したいのは「そのためには、決められた形でファイル名を付けないといけない」という点です。また、CakePHPでは命名規則を非常に重視しています。名前を元にコントローラーの名前などを割りだすので、適当な名前をつけると理解してくれません。

 

アプリケーション名Controller.php

 

「アプリケーション名」というのは、作成する「MVC」がワンセットになったプログラムのかたまりのこと、と考えてください。

*大文字小文字までかっちり同じ名前でないとダメ!!ですよ!!

*キャメル記法=>複数の単語を一つのテキストにつなげたような名前の場合、各単語の最初の文字目だけを大文字にする

そして、

CakePHPには【命令規則】というものがあります。ここはしっかり理解する必要がありますので、

それは次の機会に・・・・

CakePHP:find関数;nullってなに?<IS NULL>と<NOT NULL>の書き方

初心者にはなかなか理解しづらい「null」。

そもそも「null」とは、

「NULLは特殊な値です.NULLは 「列名 = NULL」 や 「列名 <> NULL」 といった通常の比較演算子を用いた方法では検索することができません. NULLを対象として検索するにはIS NULL演算子,もしくはIS NOT NULL演算子を使用します.」

そして、

NULL値はデータが存在しないことを表す値です。大文字と小文字のどちらも使用できます。

NULLはデータが存在しないということなので、文字列における空文字”や数値における0とは異なります。

プログラムで使う変数は宣言をした時に領域が確保されます。

そのあと、変数が持っているアドレスが0.0.0.0の状態がnullです。

あ。これはちょっと広義的になってしまうので・・・・説明はここまでで・・・・

現在、CakePHPでプログラミングをしているので、

今回は

CakePHPのfind条件に「null」「not null」を使う方法を記述しておきます。

上記で記述したとおり、「NULLを対象として検索するにはIS NULL演算子,もしくはIS NOT NULL演算子」を使用すると書きました。これはそれぞれ書き方が違います。

<IS NULL>の場合

$data = $this->Model->find( 'all',
    array(
        'conditions' => array('Model.id' => NULL),
        'fields'     => null,
        'order'      => null,
        'recursive'  => 1,
    )
);

SQLでいうところの、IS NULL の方法。
単純に、 conditions に配列で指定するだけです。

これで WHERE Model.id IS NULL というSQLとなります。

<NOT NULL>の場合

NOT NULL の場合は、ちょっとだけひねって、”NOT”の2次元配列で条件を作成。

$data = $this->Model->find( 'all',
    array(
        'conditions' => array(
            'NOT' => array(
                'Model.id' => NULL)
        ),
        'fields'     => null,
        'order'      => null,
        'recursive'  => 1,
    )
);

カラムにNULL値を持つ事が出来ないように設定する方法になり、

これで、WHERE Model.id IS NOT NULL というSQLとなります。

とりあえずここまでにしますのが、

あと基本的に書き方が同じなfind条件での「IN」、「NOT IN」演算子の使い方については次回にしたいと思います。

 

それでは。。