[php]
$this->layout = ‘for_user’;
[/php]
Configure::write (intを置きかえる)
http://wadap.hatenablog.com/entry/20100120/1263954700
http://norm-nois.com/blog/archives/329
1、Config/core.phpに
[php]config(‘def’);[/php]
2、Config/def.phpを作成し
[php]
<?php
Configure::write( ‘User.complet_flag.0’ , ‘継続’ );
Configure::write( ‘User.complet_flag.1’ , ‘修了’ );
?>
[/php]
3、index.php
[php]
//表示させる
<?php echo Configure::read( ‘User.complet_flag.’.
$user[‘User’][‘complet_flag’] ); ?>
[/php]
//////////////////////////////////////////////////////////////////////////////
formの場合 1~2まで同じ
//////////////////////////////////////////////////////////////////////////////
controllerに
[php]
$tests = $this->User->find(‘list’,array(
‘fields’=>’User.complet_flag’)
);
[/php]
viewに
[php]
<?php
echo $this->BootstrapForm->input(‘tests’,array(
‘type’ => ‘select’,
‘options’ => Configure::read(‘User.complet_flag’ ),
‘label’ => ‘test’,
));
?>
[/php]
selectボックスを実装
参考サイトhttp://kwski.net/cakephp-2-x/1088/
[php]
CREATE TABLE IF NOT EXISTS `prefectures` (
`id` INT NOT NULL AUTO_INCREMENT, — id
`prefecture` VARCHAR(8) NOT NULL, — 都道府県
`area` VARCHAR(8) NOT NULL, — 地方
PRIMARY KEY (`id`) )
[/php]
[php]
単一選択のselectボックス
// コントローラ
$this->set( ‘select1’, $this->Prefecture->find( ‘list’, array(
‘fields’ => array( ‘id’, ‘prefecture’)
)));
// ビュー
echo $this->Form->input( ‘prefecture’, array(
‘type’ => ‘select’,
‘options’ => $select1
// ‘selected’ => $selected // 規定値をvalueで指定
));
[/php]
[php]
複数選択できるselectボックス
// コントローラ
$this->set( ‘select1’, $this->Prefecture->find( ‘list’, array(
‘fields’ => array( ‘id’, ‘prefecture’)
)));
// ビュー
echo $this->Form->input( ‘prefecture’, array(
‘type’ => ‘select’,
‘multiple’=> true,
‘options’ => $select1
// ‘selected’ => $selected // 規定値は、valueを配列にしたもの
));
[/php]
[php]
// ビューから受け取ったprefecture配列をカンマ区切りに変換
$this->request->data[‘Model’][‘prefecture’] =
implode(‘,’, $this->data[‘Model’][‘prefecture’]);
// 規定値をビューへ渡す
$this->set(‘selected’, explode(‘,’, $this->data[‘Model’][‘prefecture’]));
[/php]
[php]
selectボックスのオプションをグループ化
// コントローラ
$this->set( ‘select2’, $this->Prefecture->find( ‘list’, array(
‘fields’ => array( ‘id’, ‘prefecture’, ‘area’)
)));
// ビュー
echo $this->Form->input( ‘prefecture’, array(
‘type’ => ‘select’,
‘multiple’=> true, // 複数選択を可能にする場合
‘options’ => $select2
));
[/php]
inputを「foreach」させる書き方Veiw
inputを「foreach」させる書き方Veiw
[php]
<?php
$i=0;
foreach($usersNumbers as $usersNumber){
echo $this->BootstrapForm->input(‘UsersNumber’.
$i++,array( ‘type’=>’checkbox’));
}
?>
[/php]
カスタム投稿タイプ
hasmany保存
こうやったら出来た
[php]
private function add() {
if ($this->request->is(‘post’)) {
$this->User->create();
$this->log($this->request->data, ‘debug’);
$data = array(
‘Book’ => array(
array(‘name’ => ‘My first article’),
),
‘Tag’ => array(
array(‘flag’ => ‘Comment 1’),
array(‘flag’ => ‘Comment 2’),
array(‘flag’ => ‘Comment 3’),
),
);
$result = $this->User->saveAssociated($data,array(‘deep’ => true));
$this->log($result, ‘debug’);
if ($result) {
$this->Session->setFlash(__(‘The user has been saved’));
$this->redirect(array(‘action’ => ‘index’));
} else {
$this->Session->setFlash(__(‘The user could not be saved. Please, try again.’));
}
}
}
[/php]
参考サイト
https://github.com/markstory/cakephp-docs/blob/master/ja/models/saving-your-data.rst
hasManyを保存する[saveAssociated ]
http://book.cakephp.org/2.0/ja/models/saving-your-data.html
https://github.com/markstory/cakephp-docs/blob/master/ja/models/saving-your-data.rst
[php]
CREATE TABLE `coursememberships` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`days_attended` varchar(255) NOT NULL,
`grade` varchar(255) NOT NULL,
`created` datetime default NULL,
`modified` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;
CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(255) NOT NULL,
`last_name` varchar(255) NOT NULL,
`created` datetime default NULL,
`modified` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;
CREATE TABLE `courses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`created` datetime default NULL,
`modified` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;
[/php]
[php]
// Controller/CourseMembershipController.php
class CourseMembershipsController extends AppController {
public $uses = array(‘CourseMembership’);
public function index() {
$this->set(‘courseMembershipsList’, $this->CourseMembership->find(‘all’));
}
public function add() {
if ($this->request->is(‘post’)) {
if ($this->CourseMembership->saveAssociated($this->request->data)) {
$this->redirect(array(‘action’ => ‘index’));
}
}
}
}
// View/CourseMemberships/add.ctp
<?php echo $this->Form->create(‘CourseMembership’); ?>
<?php echo $this->Form->input(‘Student.first_name’); ?>
<?php echo $this->Form->input(‘Student.last_name’); ?>
<?php echo $this->Form->input(‘Course.name’); ?>
<?php echo $this->Form->input(‘CourseMembership.days_attended’); ?>
<?php echo $this->Form->input(‘CourseMembership.grade’); ?>
<button type="submit">Save</button>
<?php echo $this->Form->end(); ?>
[/php]
[php]
// View/CourseMemberships/add.ctp
<?php echo $form->create(‘CourseMembership’); ?>
<?php echo $this->Form->input(‘Student.id’, array(‘type’ => ‘text’, ‘label’ => ‘Student ID’, ‘default’ => 1)); ?>
<?php echo $this->Form->input(‘Course.id’, array(‘type’ => ‘text’, ‘label’ => ‘Course ID’, ‘default’ => 1)); ?>
<?php echo $this->Form->input(‘CourseMembership.days_attended’); ?>
<?php echo $this->Form->input(‘CourseMembership.grade’); ?>
<button type="submit">Save</button>
<?php echo $this->Form->end(); ?>
[/php]
form 2
[php]<?php echo $this->BootstrapPaginator->sort(‘reprename’,’代表者お名前※’);?>[/php]
データを抽出
条件に一致データを抽出
[php]
$this->Model->find(‘all’, array(‘conditions’ => array(‘xxx.id =’ => ’1′)));
[/php]
条件に一致しないデータを抽出
[php]
$this->Model->find(‘all’, array(‘conditions’ => array(‘xxx.id !=’ => ’1′)));
[/php]
debug
debug($this->request);
$request = $this->Js->request(
array(
‘action’ => ‘ajaxsnum’,
‘controller’ => ‘Users’,
‘id’ => 1,
‘named’ => array();
,
),
array(
‘method’ => ‘get’,
‘sync’ => true,
‘update’ => ‘#data’,
//’success’ => “alert(‘get number data!!’);”
)
);
セレクトを選択し内容を変更
http://www.tagindex.com/javascript/form/comp2b.html
bootstrap.ctp
[php]
<!–bootstrap.ctp–>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
[/php]
View
[php]
<?php echo $this->BootstrapForm->input(‘lecture_id’,array(‘options’=>$lecture_id)); ?>
<div id="ajaxsnum"></div>
<?php
$this -> Html -> script( ‘jquery-1.7.2.min’, array( ‘inline’ => false ) );
?>
<?php
$this->Html->scriptStart(array(‘inline’=>false));
?>
$(function(){
$("#UserLectureId").change(function() {
$.post(
"<?php echo $this->html->url(‘/Users/ajaxsnum’) ?>",
{lecture_id : $(‘#UserLectureId option:selected’).val()}, //valを取る textも取れるよ
function(data){
$("#ajaxsnum").html(data);
}
);
});
});
<?php
$this->Html->scriptEnd();
?>
[/php]
View(ajaxsnum.ctp)
[php]
<?php
echo $this->BootstrapForm->input(‘Number’, array(‘label’ => ‘numbers’,’multiple’ => ‘checkbox’));
?>
<div>
<?php echo $this->BootstrapForm->submit(__(‘Submit’));?> //Submitをこっちにしたら保存出来たよ
</div>
[/php]
Controler
[php]
public $helpers = array(‘TwitterBootstrap.BootstrapHtml’, ‘TwitterBootstrap.BootstrapForm’, ‘TwitterBootstrap.BootstrapPaginator’,’Js’,’Html’);
//——————————————————————————–
// ajaxソースコード
//——————————————————————————–
public function ajaxsnum(){
$this->layout = ‘ajax’;
//debug($this->request);
$numbers = $this->User->Number->find(‘list’, array(
//’conditions’=>array(‘lecture_id’ => $this->request->data[‘lecture_id’]),
));
$this->set(compact(‘numbers’));
}
[/php]
edit.ctp
[php]
$data = $this->User->findById($id);
$numbers = $this->User->Number->find(‘list’, array(
‘conditions’=>array(‘Number.lecture_id =’ =>$data[‘User’][‘lecture_id’]),
));
$this->set(compact(‘numbers’));
[/php]
Form
[php]
<?php App::import(‘Sanitize’); ?>
<h1>送信フォーム・サンプル</h1>
<?php echo $form->create(null,array(‘type’=>’post’,’action’=>’.’)); ?>
<?php echo Sanitize::stripScripts($form->value(‘HelloForm.text1’)); ?><br />
<?php echo $form->text(‘HelloForm.text1’); ?><br />
<?php echo Sanitize::stripScripts($form->value(‘HelloForm.radio1’)); ?><br />
<?php echo $form->radio("HelloForm.radio1",
array(‘男性’=>’男性’,’女性’=>’女性’,’両性’=>’両性’),
array(‘legend’=>’性別を選択’)); ?><br />
<?php echo Sanitize::stripScripts($form->value(‘HelloForm.select’)); ?><br />
<?php echo $form->select(‘HelloForm.select1’,
array(‘未成年’=>’未成年’,’社会人’=>’社会人’,’その他’=>’その他’),null,
array(‘size’=>4,’empty’=>’※項目を選択’),true); ?>
<?php echo $form->end("送信"); ?>
[php]
[php]
<?php echo $form->create(null,array(‘type’=>’post’,’action’=>’.’));
echo "</pre>";
print_r($form->value(‘HelloForm.date’));
echo "</pre>";
echo "<br/>";
echo $form->dateTime(‘HelloForm.date’,’YMD’);
echo $form->end("送信");
?>
[/php]
[php]
<?php /*?>
<?php echo $form->create(null,array(‘type’=>’post’,’action’=>’.’)); ?>
<?php echo $form->text("HelloForm.text1"); ?>
<?php echo $form->checkbox("HelloForm.check1",array(‘checked’=>true)); ?>checkbox
<?php */?>
[/php]
[php]
<!–チェックボックス–>
<?=$form->create(null,array(‘type’=>’post’,’action’=>’.’)) ?>
<?=$form->checkbox("HelloForm.check1",array(‘checked’=>true)) ?>
<?=$form->label(‘HelloForm.check1’) ?>
<?=$form->end("送信") ?>
<!–チェックボックス_end–>
[/php]
[php]
<?=$form->create(null,array(‘type’=>’post’,’action’=>’.’)) ?>
<?=$form->textarea("HelloForm.check1",array(‘checked’=>true)) ?>
<?=$form->label(‘HelloForm.check1’) ?>
<?=$form->end("送信") ?>
[/php]
[php]
<!–テキストエリア–>
<?=$form->create(null,array(‘type’=>’post’,’action’=>’.’)) ?>
<?=$form->password("HelloForm.check1",array(‘checked’=>true)) ?>
<?=$form->label(‘HelloForm.check1’) ?>
<?=$form->end("送信") ?>
<!–テキストエリ_end–>
[/php]
[php]
<!–フォームタグ–>
<?php echo $form->create(null,array(‘type’ => ‘post’, ‘action’ => ‘.’)); ?>
<?php echo $form->radio("HelloForm.radio1",array(‘ウインドウズ’=>’Windows’,’リナックス’=>’Linux’,’マックOS’=>’MacOS X’),
array(‘legend’=>’OSを選択’,’value’=>’リナックス’)); ?>
<?php echo $form->end("送信"); ?>
<!–フォームタグ_end–>
[/php]
[php]
<!–セレクトフォームタグ01–>
<?php echo $form->create(null,array(‘type’ => ‘post’, ‘action’ => ‘.’)); ?>
<?php echo $form->select("HelloForm.radio1",array(‘ウインドウズ’=>’Windows’,’リナックス’=>’Linux’,’マックOS’=>’MacOS X’),
array(‘legend’=>’OSを選択’,’value’=>’リナックス’)); ?>
<?php echo $form->end("送信"); ?>
<!–フォームタグ_end–>
[/php]
[php]
<!–セレクトフォームタグ02–>
<?php echo $form->create(null,array(‘type’ => ‘post’, ‘action’ => ‘.’)); ?>
<?php echo $form->select("HelloForm.radio1",array(‘ウインドウズ’=>’Windows’,’リナックス’=>’Linux’,’マックOS’=>’MacOS X’),’リナックス’,
array(‘size’=>4,’empty’=>’項目を選んでください’),true); ?>
<?php echo $form->end("送信"); ?>
<!–フォームタグ_end–>
[/php]
[php]
<?php
// optionだけに属性を付ける時
$arr = array(
array(‘name’ => ‘PHP’, ‘value’ => ‘1’, ‘style’ => ‘color: #0000ff;’),
array(‘name’ => ‘Java’, ‘value’ => ‘2’, ‘style’ => ‘color: #0000ff;’),
array(‘name’ => ‘Ruby’, ‘value’ => ‘3’, ‘style’ => ‘color: #0000ff;’),
);
echo $this->Form->input(‘Book.id’, array(‘type’ =>’select’, ‘options’ => $arr, ‘style’ => ‘color: #ff0000’));
?>
[/php]
トグルスイッチをAJAXで反映させる
【viewからcontrollerに値を渡すにlayoutを変更する】
CakePHP2系 の更新処理を Ajax
http://blog.xao.jp/blog/cakephp/one-of-the-simple-way-for-using-ajax-in-cakephp/
http://ustom.daa.jp/blog/2012/11/js%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%80%80%E3%81%9D%E3%81%AE%EF%BC%91%EF%BD%9Ccakephp2/
test_controller.php
[php]
class TestController extends AppController {
var $name = ‘Test’;
var $helpers = array(‘Form’, ‘Js’=>array(‘jquery’) );
function index() {
$this->Test->recursive = 0;
$this->set(‘tests’, $this->paginate());
}
function test() {
}
}[/php]
test.ctp
[php]
<?php
$this->Html->script(‘jquery’,array(‘inline’=>false));
$this->Js->get(‘#btn’);
$request = $this->Js->request(
array(
‘action’ => ‘index’, //indexを表示
‘controller’ => ‘test’ //textコントローラーの
),
array(
‘method’ => ‘get’,
‘sync’ => true,
‘update’ => ‘#data’, //id="data"に表示させるよ
‘success’ => "alert(‘get data!!!’);"
)
);
$this->Js->event(‘click’,$request);
echo $this->Js->writeBuffer(array(‘inline’=>false));
?>
<div>
<div id="data"></div> //ここにindexを表示させるよ
<input id="btn" type="button" value="取得" />
</div>
[/php]
Jsヘルパーを使ってAjax
セレクトボックスの値が変更される度に、アイテムのテキストを表示
http://semooh.jp/jquery/api/events/change/fn/
[text]
<select name="sweets" multiple="multiple">
<option>Chocolate</option>
<option selected="selected">Candy</option>
<option>Taffy</option>
<option selected="selected">Caramel</option>
<option>Fudge</option>
<option>Cookie</option>
</select>
<div class="test"></div>
<script>
$("select").change(function () {
var str = "";
$("select option:selected").each(function () {
str += $(this).text() + " ";
});
$(".test").text(str);
}).change();
</script>[/text]
CakePHP 2.x: Jsヘルパーを使用してAjax更新
.ctp の変更の仕方
[php]
<?php
class AppController extends Controller {
public $ext = ‘.php’;
}
[/php]
※DreamweaverでCakePHPの.ctpファイルを色づけして表示する方法
http://labs.cybridge.jp/2009/11/cakephp-ctp.html
readは余り使わない方が良い
readはbakeしたとき含まれるよ
// ビューへ渡す
[php]$this->set(‘recipe’, $this->Recipe->findById($id));[/php]