「cakephp」カテゴリーアーカイブ

dateタイプなselectに空の値を設定

http://sd.pot.co.jp/2012/02/13/cakephp%E3%81%A7date%E3%82%BF%E3%82%A4%E3%83%97%E3%81%AAselect%E3%81%AB%E7%A9%BA%E3%81%AE%E5%80%A4%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E3%83%A1%E3%83%A2

[php]
echo $this->Form->input(‘birthday’,array(
‘type’=>’date’,
‘label’=>’生年月日’,
‘dateFormat’=>’YMD’,
‘monthNames’=>false,
‘empty’=>array(0=>’–‘),
‘selected’=>array(
‘year’=>0,
‘month’=>0,
‘day’=>0
)
));
[/php]

CakePHP2.X でファイルのアップロード•ダウンロード

TABLE

[php]
CREATE TABLE `uploads` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`file_name` varchar(50) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
[/php]

UploadsController[add]

[php]
//UploadsController
//新規作成
public function add() {
if ($this->request->is(‘post’)) {
$tmp = $this->request->data[‘Upload’][‘file’][‘tmp_name’];
if(is_uploaded_file($tmp)) {
$file_name = basename($this->request->data[‘Upload’][‘file’][‘name’]);
$file = WWW_ROOT.’files’.DS.$file_name;
if (move_uploaded_file($tmp, $file)) {
$this->Upload->create();
$this->request->data[‘Upload’][‘file_name’] = $file_name;
if ($this->Upload->save($this->request->data)) {
$this->Session->setFlash(__(‘The upload has been saved’));
$this->redirect(array(‘action’ => ‘index’));
} else {
$this->Session->setFlash(__(‘The upload could not be saved. Please, try again.’));
}
}
}
}
}
[/php]

ダウンロード Mediaクラス

[php]
//UploadsController
//ダウンロード Mediaクラス
public function download($id) {
$this->viewClass = ‘Media’;
$this->Upload->id = $id;
$this->Upload->recursive = -1;
$data = $this->Upload->read();
$params = array(
‘id’=>basename($data[‘Upload’][‘file_name’]),
‘name’=>preg_replace("/.[^.]+$/","",$data[‘Upload’][‘file_name’]),
‘download’=>true,
//’extension’=>$data[‘Upload’][‘extension’],
‘path’=> ‘files’ . DS
);
$this->set($params);
}
[/php]

index View

[php]
//index View
<table cellpadding="0" cellspacing="0">
<tr>
<th><?php echo __(‘id’); ?></th>
<th><?php echo __(‘file_name’); ?></th>
<th><?php echo __(‘created’); ?></th>
</tr>
<?php foreach ($uploads as $upload) : ?>
<tr>
<td><?php echo h($upload[‘Upload’][‘id’]); ?></td>
<td><?php echo h($upload[‘Upload’][‘file_name’]); ?></td>
<td><?php echo h($upload[‘Upload’][‘created’]); ?></td>
<td><?php echo $this->Html->link($upload[‘Upload’][‘file_name’], array(‘controller’ => ‘uploads’, ‘action’ => ‘download’, $upload[‘Upload’][‘id’])); ?></td>
</tr>
<?php endforeach; ?>
</table>
[/php]

Add View

[php]
<?php echo $this->Form->create(‘Upload’, array(‘action’ => ‘add’, ‘type’ => ‘file’)); ?>
<fieldset>
<legend><?php echo __(‘Add Upload’); ?></legend>
<?php echo $this->Form->file(‘file’); ?>
</fieldset>
<?php echo $this->Form->end(__(‘Submit’));?>
[/php]
参考:http://w.builwing.info/2012/06/20/cakephp2-1%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%EF%BC%88%E5%AE%9F%E8%B7%B5%E7%B7%A8%E3%81%9D%E3%81%AE9%EF%BC%89/

http://www.almondlab.jp/labs/1043

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]

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]

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]