SyntaxHighlighter

2013年4月9日火曜日

baserCMS インストール時のエラー対応

baserCMSをインストールしてみたら、エラーが発生したので、その対応方法を載せておきます。

なお、
baserCMS(ベーサーシーエムエス)とは、オープンソースフレームワーク「CakePHP」をベースとし、環境準備の素早さに重点を置いた基本制作支援プロジェクトから生まれた国産CMS(コンテンツマネージメントシステム)です。

ここでは、エラーの対応方法だけの記述ですので、ダウンロードや使用方法については、提供元のbaserCMSを参照してください。


1.ダウンロード後に起動した画面
見ずらいですが、5か所のエラーと文字化けが起こっています。

これらは、すべて”=&”となっている箇所を”=”に変更すると解決します。
なぜかは不明ですが(^_^;)

ちなみに”=&”と”=”の代入の違いですが
”=&”は、アドレスを代入
”=”は、値を代入
となります。


$Aが102番地の■だとして
$B = $A の場合、$Bには■が代入されます。
$C =& $A の場合、$Cには”102番地”という、データの格納場所が代入されます。

アドレス参照の利点は、データ格納用のエリアが不要であることですが、誰かが102番地の内容を書き換えると、参照時の値と変わってしまうという問題も起こります。
メモリーを大量に使用できる今日では、アドレス参照はあまり使用しないかも知れません。


2013年2月20日水曜日

NetBeans IDE 一押し機能

NetBeans IDEは、全然使いこなせていませんが、便利機能を
ひとつ紹介。

それは、ソースの差分表示です。

エディターでソースの隣にある履歴をクリックしたあと、いつ時点と
比較するのか選択します。
そうすると、その時点と偏在の差分が瞬時に表示されます。

まめにバックアップは取られていると思いますが、取り忘れや、
バックアップの習慣がない人には便利な機能と思います。


2013年2月19日火曜日

NetBeans IDEとCakePHP $this の内容

PHPの変数でよく使う「$this」。
これはクラス内変数を使用するときの修飾子とでも
理解すれば良いのだろうか?

ソース上に「debug($this)」と1行追記することで
その中身を知ることができます。

見えるかすることで、疑問も増えるかも知れませんが、
理解も深まるのではないでしょうか。

debug追加ソース例
 ・他のページにリダイレクトすると見えなくなるのでコメントにしておきます。 

 実行結果


2013年2月15日金曜日

NetBeans IDEとCakePHP データ更新(3/3)


3.もう少しプログラムらしく
  ここまで、きたら全体を見直して、プログラムっぽく動作させてみましょう。
3-1.Viewの見直し
3-1-1. index.ctp
  先程、cssの説明の時に使用した「ビザのオーダーリスト」のViewです。
  <li><?php echo $this->Form->input('№:',array('size'=>2)); ?></li>
  は、編集、削除で指定するidを入力するエリアです。



  3-1-2. add_order_list.ctp
   データ追加用の画面です。言い忘れていましたが、画面の作成は「Form Helper」を使用しています。入力のタイプとして「select」と「radio」を作成してみました。





3-1-3. edit_order_list.ctp
 データ更新用の画面です。データ追加の画面とほぼ同一です。実行時には修正前データが画面 表示されます。






3-1-4. delete_order_list.ctp
 データ削除前の確認用画面です。一応表示専用にしてみました。




3-2.Controllerの見直し
 最後にプログラム「OrderListsController.php」の見直しです。
 このプログラムは、画面に対応する4つのfunctionで構成されています。

3-2-1. function index()
 (1)まず入力ボタンがクリックされたかの確認をしています。
 if ($this->request->is('post') || $this->request->is('put')) {
    のように’post’と’put’の両方を聞くのが常とうのようです。
 (2)index.ctpで各ボタンにつけた名前を順番に聞いていき、そのボタンにあった処理を実行します。
 if(isset($this->request->data['list_add'])) {
 (3)編集や削除のボタンをクリックされた場合、該等のidをセットしてリダイレクトします。
 $list_number = $this->request->data[OrderList]['№:'];
  $this->redirect('../OrderLists/DeleteOrderList/'.urlencode($list_number));
 (4)ボタンがクリックされていなかった場合、初期設定を行い登録済みデータを画面に出力します。
 ボタンクリックの判定をクリックされたときとするか、クリックされていなかったときとするかは、プロジェクト内で統一しておいた方が良いと思います。

3-2-2. function AddOrderList() 
 (1)入力内容をデータベースに保存後、インデックス画面にリダイレクトしています。インデックス画面で登録内容が確認できます。
 $this->OrderList->save($this->request->data);
  $this->redirect(array('action' => 'index'));
※このとき、意図的にボタンクリックの判定を’post’のみにしてみましたが、特に問題はありません でした。

3-2-3. function EditOrderList($id) と function DeleteOrderList($id)
 (1)URLで渡された’№:’を’$id’で受け取ります。
 $this->OrderList->id = $id;
 (2)入力内容をデータベースに保存または削除後、インデックス画面にリダイレクトしています。インデックス画面で更新結果が確認できます。追加と更新は同じ構文となります。
 $this->OrderList->save($this->request->data); ・・・更新
 $this->OrderList->delete($this->request->data('OrderList.id')); ・・・削除
  $this->redirect(array('action' => 'index'));
 (3)ボタンがクリックされていなかった場合、idで指定されたデータを画面に表示します。
   更新も削除も構文は同じです。
 $this->request->data = $this->OrderList->read(null, $id);

下の枠をクリックするとソースを展開します

以上で、データの登録、編集、削除が終わりました。
誤り等のご指摘がありましたら、何なりとコメントください。
よろしくお願いします。

 【重要】 当プログラムは入力項目のチェックをしておりませんので、悪意あるスクリプトなどを入力されると何が起きるかわかりません。公開を考えている方は、「Sanitize」等を使用して不正なデータを取り込まないようにしてください。

(2/3)へ

2013年2月14日木曜日

NetBeans IDEとCakePHP データ更新(2/3)


 1-3-1-2 編集と削除機能
ここまできたら、編集と削除も作ってみましょう。下記ソースを参考にしてください。
内容は、編集の場合「指定(id)のデータを画面に表示し、修正内容が送られてきたら、保存してindex画面を表示する。指定(id)データがない場合は、空画面を表示する。」削除の場合は、保存しての部分が削除してに変わるだけです。
アドレス欄には「http://localhost/PhpProject1/OrderLists/EditOrderList/1」
または「http://localhost/PhpProject1/OrderLists/DeleteOrderList/1」のように入力してください。
最後の「1」がレコードのidとなります。データが3件あって3件目を削除する場合は、
「http://localhost/PhpProject1/OrderLists/DeleteOrderList/3」となります。





2.フォームを作成する。(レイアウトとcss)
2-1. 今まで見てきた画面は、CakePHPで用意されているレイアウト「default.ctp」とcss「cake.generic.css」を利用して出力されていました。
  これから、OrderList用のレイアウトとcssで画面を作成していきます。

2-2 CakePHPレイアウトの構成を表すファイルとデザインを表すファイルを分けています。
2-2-1 レイアウト構成
今回はヘッダー、ボディ、フッターの構成を作成します。
「View」を展開して「Layouts」フォルダーで右クリックして「新規」から「OrderList.ctp」を作成しましょう。
<head>~</head>は、HTMLのヘッダー部です。$変数はプログラムで値をセットします。
「echo $this->html->css('OrderList');」は、デザインに関する記述ですが、あとで説明します。
<body>~</body>の中にレイアウトを定義します。
・<div id="header">は、ヘッダー部
・<div id="content">は、データ部
・<div id="footer">は、フッター部
の構成とします。データ部以外は任意であり、なくてもかまいません。また、$変数については、プログラムで値をセットしますが、データ部の「$content_for_layout」は、各画面の「.ctp」ファイルから展開されます。







2-2-2 デザイン設定
   先程出てきた「css」ファイルについてです。cssとは?についての説明は省略させていただきます。
   画面のデザインはデフォルトの「cake.generic.css」を使用していましたが、もう少し実用的な画面になるようにしたいと思います。

ここで、重要なのは、画面イメージを持っておくことです。こういう画面を出すためには、どういった
cssが必要かという観点からcssを作成します。
まずは「webroot」を展開して「css」フォルダーで右クリックして「新規」から「OrderList.css」を
作成しましょう。
以下の画面イメージを使用して説明します。

2-2-2-1 テーブル
 Tableの構成を定義します。ここでは、スタイル・ビルダーを使用しました。私のようにデザイン力のない場合、重宝いたします。「th」「td」も同様に作成します。


2-2-2-2 submitボタンを横に並べる。
まず、「index.ctp」に以下の部分を追加します。




次にcssの方に以下の内容を追加してください。
#action_group ul li {
    list-style-type: none;
    float:left;
}
2-2-2-3 radioボタンを横に並べる。

これは、以下の内容を追加することでできます。
.input radio {
    display: inline;
    text-align: left;

2-2-2-4 完成した「OrderList.css」。下の枠をクリックするとソースを展開します。



(1/3)へ      (3/3)へ



2013年2月13日水曜日

NetBeans IDEとCakePHP データ更新(1/3)


Ⅱ フォーム

まだデータが0件なので、データの追加、編集、削除の機能を追加していきます。

1.追加、編集、削除のプログラム
1-1 Viewの作成
 order_listsテーブルから入力が必要となる項目について定義します。








このうち、id、created、modifiedは、自動設定項目なので、画面項目からはずします。
 ・id:レコード番号として連番が振られる。
 ・created:レコード追加時の年月日日時分秒がセットされる。
 ・modified:レコード追加またはレコード編集時の年月日日時分秒がセットされる。

1-2 Viewの作成
  ・ファイル名はアンダースコア型ですので、追加のViewファイル名は「add_order_list.ctp」とします。








 ・create(テーブル名)、input(入力項目名)、end(送信ボタン)
これで入力画面ができました。同じように編集と削除も作成してください。ファイルだけ作成して内容はまったく同じでもかまいません。一応1行目と2行目は修正しておいた方がのちのち分かりやすいかもしれません。
 ・編集用ctpファイル:edit_order_list.ctp
 ・削除用ctpファイル:delete_order_list.ctp




1-3 Controllerの作成(機能追加)
 1-3-1 追加機能
public function index($id = null)の次のファンクションとしてpublic function AddOrderList()を追加します。これは、Viewのファイル名が「add_order_list.ctp」となっているからです。
下にサンプルソースがありますが、これは、「データが送信されたらテーブルに書いてindex画面を出力する。」という内容になっています。




 1-3-1-1 追加機能
これでもう実行できます。ツールバーのアイコンをクリックして実行してみましょう。





アドレス欄が下記のようになっている場合、「OrderLists/AddOrderList」を面倒ですが、手打ちしてください。

出てきた画面は、なんともみっともない画面ですが、まだ何も成形していないのでしょうがないと思ってください。しかし、機能としては問題ないので実際にデータを入力してみてください。
※データチェックを行っていないため、異常データを入力すると予期せぬ事態が起きる場合があります。

実行結果画面




(2/3)へ










2013年1月31日木曜日

NetBeans IDEとCakePHP プログラム編(4/4)

3-3. Controllerを作成する。
 ・ナビゲータの「Controller」を右クリックして「新規」→「PHPファイル…」をクリックします。





















・ファイル名に「OrderListsController」と入力します。確認後【終了(F)】をクリックします。
 ※Contorollerのファイル名は、Viewフォルダー名称に“Contoroller”をつけたものとなります。
















・OrderListsテーブルの内容をすべて表示するプログラムを書いてみます。
 「public function index($id = null)」の「index」がViewで作成した「index.ctp」と連携しています。










4.ここまでのまとめ

4-1 CakePHPの規約

オブジェクト 種類 単数複数 拡張子
1 テーブル - アンダースコア型 複数形 - order_lists
2 Model ファイル キャメル型 単数形 php OrderList
3 View フォルダー キャメル型 複数形 - OrderLists
4 ファイル アンダースコア型 単数形 ctp index、add_order_list
5 Controller ファイル キャメル型 - php OrderListsController
6 ファンクション キャメル型 単数形 - index、AddOrderList
※Controllerのファンクション「AddOrderList」とViewのファイル「add_order_list」が対応しているのが分かりますね。

4-2 MVCの関連図

5.実行してみる
 ブラウザを起動して下記のアドレスを入力してみてください。
 データが0件なので下図のような画面が表示されます。
 http://localhost/PhpProject1/OrderLists


これで、MVCモデルは終わりです。
次回は、フォームを使ってデータの登録・編集・削除を行ってみます。