メール送信

use Cake\Mailer\Email;

設定ファイルにおけるdefault設定を使用
$email = new Email('default');
CakePHP インストール・設定」参照
$email
  ->setFrom(['me@example.com' => 'title'])
  ->setTo('yone@office-yone.com')
  ->setSubject('題名')
  ->send('本文');

PHP Smarty

設定

ライブラリ

https://www.smarty.net/

配置

ライブラリ
smarty-X.X.X
 └demo
 └libs
  └Smarty.class.php
  └他
コンパイルファイル配置場所
compile
テンプレートファイル配置場所
template
 └test.tpl

テンプレート

※test.tpl
<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>~</title>
</head>
<body>
 埋め込み用変数
 <p>{$val1}</p>
 <p>{$val2}</p>
</body>
</html>

テンプレート利用

※~.php
<?php
require_once '~/smarty-X.X.X/libs/Smarty.class.php';

$smarty = new Smarty();
テンプレートファイル配置場所指定
$smarty->template_dir = '~/template';
コンパイルファイル配置場所指定
$smarty->compile_dir = '~/compile';

テンプレートファイルの変数へ値を埋め込み
$smarty->assign('val1', 999);
$smarty->assign('val2', 'aaa');
描画
$smarty->display('test.tpl');

Hexo使用方法

Hexoインストール

# npm install -g hexo

雛形作成

# cd (ディレクトリ)
# hexo init (サイト名)

モジュールインストール

# cd (サイト名)
# npm install

ローカルWEBサーバ起動

# hexo server

ローカル動作確認
http://localhost:4000/

GitHub Pagesへデプロイ

デプロイツールインストール

npm install hexo-deployer-git –save

設定ファイル編集

_config.yml

deploy:
 type:git
 repo https://office-yone@github.com/office-yone/office-yone.github.io.git
 branch: master

リモートリポジトリにデプロイ

hexo deploy -g

リモートリポジトリ動作確認
github pagesをブラウザで表示
https://office-yone.github.io/index.html

CakePHP ページネーション機能(Paginator)

基本

コントローラ

設定

public $paginate = [
 'limit' => 5,
 並び順設定はデータ取得時に実施する方が自由度が高いのでここでは行わない
 'order' => [
   'id' => 'DESC'
 ],
 アソシエーションデータ取得時に実施する方が自由度が高いのでここでは行わない
 'contain' => ['People']
];

Paginatorコンポーネント読み込み

public function initialize(){
 parent::initialize();
 ↓ は不要(デフォルトで使用できる)
 $this->loadComponent('Pagenator');
}

ページネーションを利用したデータ取得

public function list(){
 $lists = $this->paginate(
  $this->Products
   ->find()
   ->contain(['~'])
   ->where(['~ !=' => '0'])
   ->order(['~' => 'DESC', '~' => 'DESC'])
   );
  $this->set(compact('lists'));
}

ビュー

ページ移動

※~\src\Template\(コントローラ名)\(ビュー名).ctp
<div class="paginator">
 <ul class="pagination">
  <?= $this->Paginator->first('<< ' . '最初') ?>
  <?= $this->Paginator->prev('< ' . '前へ') ?>
  <?= $this->Paginator->numbers() ?>
  <?= $this->Paginator->next('次へ' . ' >') ?>
  <?= $this->Paginator->last('最後' . ' >>') ?>
 </ul>
</div>

ページ番号

【通常】
<?= $this->Paginator->numbers() ?>

【オプション】
<?=
  $this->Paginator->numbers([
    現ページより前のページがあれば'<<'を表示
    'before' => $this->Paginator->hasPrev() ?
     $this->Paginator->first('<<') : '',
    現ページより後のページがあれば'>>'を表示
    'after' => $this->Paginator->hasNext() ?
     $this->Paginator->last('>>')
    'modules' => 4
    'separator' => '|'
  ]);
?>

設定項目 機能
before 最初のリンクの前に表示する内容
after 最後のリンクの前に表示する内容
modules カレントページ番号を除いた表示リンク数
2の場合→1,2(カレント),3
separator リンク間区切り文字

カウンター

<?=
 $this->Paginator->counter([
  'format' => 'ページ {{page}} / {{pages}}, レコード {{current}} / {{count}} '])
?>

メソッド

メソッド 機能
next
prev
first 最初
last 最後
counterRange カウンター(format=rangeの場合)
counterPages カウンター(format=pagesの場合)
numbers ページ番号
current 現在ページ番号
sort ソートヘッダー(並び順未指定)
sortAsc ソートヘッダー(昇順)
sortDesc ソートヘッダー(降順)

組込変数

変数名 機能
{text} ページ番号
{url} 遷移先URL
{page} 現ページ番号
{pages} 総ページ数
{current} 現ページでのレコード数
{count} 総レコード数

独自リンク

テンプレート

※~\config\my-paginator-temp.php
<?php

$number  = '<span style="';
$number .= 'border: solid 1px black; ';
$number .= 'padding: 10px; ';
$number .= 'margin: 1px; ">';
$number .= '<a href="{{url}}">{{text}}</a>';
$number .= '</span>';

$current  = '<span style="';
$current .= 'background-color: black; ';
$current .= 'color: white; ';
$current .= 'border: solid 1px black; ';
$current .= 'padding: 10px; ';
$current .= 'margin: 1px; ">';
$current .= '{{text}}';
$current .= '</span>';

return [
 'number' => $number,
 'current' => $current
];

テンプレート読み込み

※~\src\View\AppView.php
class AppView extends View
{
 public function initialize()
 {
  $this->loadHelper(
   'Paginator', [
    'templates' => 'my-paginator-temp'
   ]);
 }
}

CakePHP CSV出力機能(friendsofcake/cakephp-csvview)

インストール

Composerからライブラリインストール
# composer require friendsofcake/cakephp-csvview:~3.0

設定

※~/config/bootstrap.php
Plugin::load('CsvView');

コントローラ

直接出力

public function receiptDownload(){

 出力対象
 $receipts = $this->Receipt
  ->find()
  ->all();

 $_serialize = ['receipts'];

 ヘッダー(※省略可)
 $_header = ['Column 1', 'Column 2', 'Column 3'];

 フッター(※省略可)
 $_footer = ['件数:' . $receipts->count()];

 ファイル名(※省略可)
 $this->response->download('売上一覧.csv');

 CsvViewを利用
 $this->viewBuilder()->className('CsvView.Csv');

 設定値をプラグインへ引き渡し
 $this->set(compact('receipts', '_serialize', '_header', '_footer'));
}

テンプレート使用

public function receiptDownload(){

 出力対象
 $receipts = $this->Receipt
  ->find()
  ->all();

 $_serialize = null;

 ファイル名(※省略可)
 $this->response->download('売上一覧.csv');

 CsvViewを利用
 $this->viewBuilder()->className('CsvView.Csv');

 設定値をプラグインへ引き渡し
 $this->set(compact('receipts', '_serialize'));
}

\src\Template\(コントローラ名)\csv\receipt_download.ctp
<?php foreach ($receipts as $receipt): ?>
  列名、デミリタ(,)を指定
  <?php echo $receipt->id ?><?php echo ',' ?>
  <?php echo $receipt->col1 ?><?php echo ',' ?>
  <?php echo $receipt->col2 ?><?php echo ',' ?>
  JOINした場合の複層モデルを指定
  <?php echo $receipt->Model1['col'] ?><?php echo ',' ?>
  最終列には改行を指定
  <?php echo $receipt->Model2['col'] ?><?php echo 'PHP_EOL' ?>
<?php endforeach; ?>