「cakephp」カテゴリーアーカイブ
Csvエクスポート
[php]
$genders = array(‘1’ => ‘男性’, ‘2’ => ‘女性’); //配列により、数値から男性・女性に切り替える
[/php]
[php]
$this->Csv->addField(h($genders[$t[‘Applicant’][‘one_id’]]));
[/php]
dateタイプなselectに空の値を設定
[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]
ACLを使わないアクセス制御
Excel 出力
Csv エクスポート 文字化け対策
http://tagamidaiki.com/cakephp2-csv-helper/
コントローラーに
[php]
echo $this->Csv->render(‘sjis’,’utf-8′); //を追加
[/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
CakePHPページに応じてレイアウトを変更
[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]