月別アーカイブ: 2013年2月

CakePHP2.x Cookie

ここではCakePHP2.xでCookieの使い方についてまとめています。

cakephp

解説

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

public $components = Array('Cookie');

Cookieコンポーネントを読み込んでください。

Cookieの書き込み

$this->Cookie->write('key', 'name', false, '5 day');

引数の順番は左からCookieの名前、値、暗号化、有効期限です。
有効期限はtime()+60*60のようにも指定できます。

Cookieを表示

$this->Cookie->read('key');

keyと言う名前の値を取り出せます。

Cookieを削除

$this->Cookie->delete('key');

keyで指定したCookieが削除されます。

全てのCookieを削除

$this->Cookie->destroy();

保存されているCookieを全て削除します。

Cookieのパスを指定

$this->Cookie->path = '/hoge/';

Cookieを保存するパスを設定します。
指定しない場合デフォルトで「/」が指定されます。

Cookieのドメインを指定

$this->Cookie->domain = 'example.com';

Cookieを利用するドメインを設定します。
指定しない場合はデフォルトで「null」となります。

Cookieの値がセットされているのかの判定

if (is_null($this->Cookie->('key'))) {}

Sessionのように「$this->Session->check();」メソッドがCookieにはないため
php.iniのerror_reportingによっては「is_null」関数でチェックしないとエラーになってしまいます。

PHP ファイルのダウンロードダイアログを出す

ここではPHPでExcelファイルやPDFファイルなどをダウンロードさせる方法について解説していきます。

phpfile

サンプルソース

<?php

    $file = 'fileName.pdf';
    $fileSize = filesize($file);
    header("Content-Disposition: attachment; filename={$file}");
    header("Content-Length:{$fileSize}");
    header("Content-Type: application/octet-stream");
    readfile($file);

解説

header(“Content-Disposition: attachment; filename={$file}”); (5行目)
Content-Dispositionでダウンロードさせるファイル名を指定します。

header(“Content-Length:{$fileSize}”); (6行目)
Content-Lengthでダウンロードさせるファイルのサイズを指定します。

header(“Content-Type: application/octet-stream”); (7行目)
Content-Typeでapplication/octet-streamを指定します。

readfile($file); (8行目)
ファイルからデータを読み取ります。

こうする事でユーザーにファイルをダウンロードさせることができます。

WordPress コメントをどうぞの位置を記事の下に移動する

ここではWordPressでコメントをどうぞの位置を記事の下に移動する方法を解説していきます。

wordpress_logo

content.phpの編集

<?php if ( comments_open() ) : ?>
    <div class="comments-link">
    <?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'twentytwelve' ) . '</span>', __( '1 Reply', 'twentytwelve' ), __( '% Replies', 'twentytwelve' ) ); ?>
    </div><!-- .comments-link -->
<?php endif; // comments_open() ?>

このブロックが/headerの前にあるので、これをfooterタグの前に移動します。

PHP 画像合成

ここではPHPで画像を合成する方法について解説していきます。

サンプルソース

<?php
  
    // 画像作成
    $dst_im = imagecreatetruecolor(200, 200);
    // 塗りつぶし
    $color = imagecolorallocate($dst_im, 'ffffff');
    imagefill($dst_im, 0, 0, $color);
    // 合成する画像1枚目を取得
    $src_im = imagecreatefrompng('img1.png');
    // 画像に貼り付け
    imagecopy($dst_im, $src_im, 0, 0, 0, 0, 100, 100);
    imagedestroy($src_im);
    // 合成する画像2枚目を取得
    $src_im = imagecreatefrompng('img2.png');
    // 出力先の画像に貼り付け 横100、縦0の位置
    imagecopy($dst_im, $src_im, 100, 0, 0, 0, 100, 100);
    imagedestroy($src_im);
    // 合成する画像3枚目を取得
    $src_im = imagecreatefrompng('img3.png');
    // 出力先の画像に貼り付け 横0、縦200の位置
    imagecopy($dst_im, $src_im, 0, 200, 0, 0, 100, 100);
    imagedestroy($src_im);
    // ファイルの保存
    imagepng($dst_im, 'output.png');
    // メモリ開放
    imagedestroy($dst_im);

解説

imagecreatetruecolor(200, 200); (4行目)
width200、height200で出力用に画像を用意します。

imagefill($dst_im, 0, 0, $color); (7行目)
画像の塗りつぶしです、ここでは白色で塗りつぶしています。

imagecreatefrompng(‘img1.png’); (9、14、19行目)
合成する画像を取得しています。
今回はpngで解説していますが、
jpegならimagecreatefromjpeg()
gifならimagecreatefromgif()とかもあります。

imagecopy(…) (11、16、21行目)

Manualより
imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);

dst_im
出力する画像リソース
src_im
コピーする画像リソース
dst_x
コピー先の x 座標(横)
dst_y
コピー先の y 座標(縦)
src_x
コピー元の x 座標(横)
src_y
コピー元の y 座標(縦)
src_w
コピー元の幅
src_h
コピー元の高さ

これで貼り付け位置をずらしながら画像を合成していきます。

imagepng($dst_im, ‘output.png’); (24行目)
png画像の保存をします。
jpegならimagejpeg()
gifならimagegif()などがあります。

imagedestroy($dst_im);
メモリの開放
たくさん画像を生成するとメモリリークに陥ってしまうので適度にコールしてください。

jQuery 郵便番号から住所を自動入力 AjaxZip2.0

※AjaxZip3.0の記事があります。
関連記事
jQuery 郵便番号から住所を自動入力 AjaxZip3.0
https://office-goto.info/javascript-jquery/ajaxzip3-0/

ここでは郵便番号から住所を自動入力してくれるAjaxZip2.0の紹介をしていきます。

ajaxzip2

デモはこちら
https://office-goto.info/demo/ajaxzip2/

AjaxZip2.0のダウンロード
http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html

head内で読み込み

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="ajaxzip2/ajaxzip2.js"></script>

ajaxzip2.jsを読み込んでください。

html

郵便番号
<input type="text" name="pos1" style="width:50px; ime-mode:disabled;" />
&nbsp;-&nbsp;
<input type="text" name="pos2" style="width:50px; ime-mode:disabled;" onKeyUp="AjaxZip2.zip2addr('pos1','pref','city','pos2');"/>
都道府県
<select name="pref">
    <option value="">--</option>
    <option value='北海道'>北海道</option><option value='青森県'>青森県</option>
    <option value='岩手県'>岩手県</option><option value='宮城県'>宮城県</option>
    <option value='秋田県'>秋田県</option><option value='山形県'>山形県</option>
    <option value='福島県'>福島県</option><option value='茨城県'>茨城県</option>
    <option value='栃木県'>栃木県</option><option value='群馬県'>群馬県</option>
    <option value='埼玉県'>埼玉県</option><option value='千葉県'>千葉県</option>
    <option value='東京都'>東京都</option><option value='神奈川県'>神奈川県</option>
    <option value='新潟県'>新潟県</option><option value='富山県'>富山県</option>
    <option value='石川県'>石川県</option><option value='福井県'>福井県</option>
    <option value='山梨県'>山梨県</option><option value='長野県'>長野県</option>
    <option value='岐阜県'>岐阜県</option><option value='静岡県'>静岡県</option>
    <option value='愛知県'>愛知県</option><option value='三重県'>三重県</option>
    <option value='滋賀県'>滋賀県</option><option value='京都府'>京都府</option>
    <option value='大阪府'>大阪府</option><option value='兵庫県'>兵庫県</option>
    <option value='奈良県'>奈良県</option><option value='和歌山県'>和歌山県</option>
    <option value='鳥取県'>鳥取県</option><option value='島根県'>島根県</option>
    <option value='岡山県'>岡山県</option><option value='広島県'>広島県</option>
    <option value='山口県'>山口県</option><option value='徳島県'>徳島県</option>
    <option value='香川県'>香川県</option><option value='愛媛県'>愛媛県</option>
    <option value='高知県'>高知県</option><option value='福岡県'>福岡県</option>
    <option value='佐賀県'>佐賀県</option><option value='長崎県'>長崎県</option>
    <option value='熊本県'>熊本県</option><option value='大分県'>大分県</option>
    <option value='宮崎県'>宮崎県</option><option value='鹿児島県'>鹿児島県</option>
    <option value='沖縄県'>沖縄県</option>
</select>
市区町村
<input type="text" name="city" />
番地等
<input type="text" name="address" />

解説

onKeyUp=”…” (4行目)
表示させるinputタグのnameで指定します。
このサンプルでは郵便番号を2つのフィールドで分けていますので、第1、第4引数にpos1、pos2と指定しています。
郵便番号のフィールドを分けない場合は第1引数にthisを指定してください。