[CakePHP2] webroot/index.php で定義されているディレクトリなど

定義名 定義内容 説明
ROOT /home/www/cakephp cakePHPのルート
APP_DIR app appのディレクトリ名称
WEBROOT_DIR webroot webrootのディレクトリ名称
WWW_ROOT /home/www/cakephp/app/webroot/ webrootのフルパス

フルパスのべた書きはやめて下さい。

Javaで日付変換(文字列⇔文字列)

Java で日付文字列を久々に変換したのでメモ

今回は、文字列から文字列への変換です。
英語表記の日付文字列にも対応してます。
なお、new Date(String ) は非推奨の為、使用しておりません

// 月や曜日が英語表記の場合はLocaleを設定すること!!
SimpleDateFormat sdfBef = new SimpleDateFormat("dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH); //28 Dec 2012 09:01:48 -0000
SimpleDateFormat sdfAft = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //2012/12/28 18:01:48
// parseしてから、formatの流れで再変換する
String result = sdfAft.format(sdfBef.parse("28 Dec 2012 09:01:48 -0000"));
System.out.println(result);	// 2012/12/28 18:01:48

動作確認はScalaで行っています(変数宣言は書き換えてます)

[CakePHP2]FormHelper dateTimeのオプション設定をやってみた

CakePHP2で日時入力のフィールドを作ってくれるヘルパーのdateTimeですが、
デフォルトの挙動は残念ながら日本人が苦手なタイプです。
[日]-[英語月名]-[年][時(12時間表記)]:[分][am/pm]

ということで、カスタマイズの例

YMDの順、24時間表記、月の名前は数字、デフォルトは現在日付、分の間隔は15分、最小年は2012年から(最大も指定可能)
⇒[年(2012開始)]-[月(数字)]-[日][時(24時間表記)]:[分(15分刻み)]

echo $this->Form->dateTime('filename1', 'YMD', '24', array('monthNames' => false, 'empty ' => false, 'interval' => 15, 'minYear' => 2012));

整形が便利な input を使用する場合は、オプションを並列に表記する。

echo $this->Form->input('filename2', array('type' => 'datetime', 'label' => '日時', 'dateFormat' => 'YMD', 'timeFormat' => '24', 'monthNames' => false, 'empty' => false, 'interval' => 15, 'minYear' => 2012));
// dateTime でなく datetime なのがポイント

詳しくは、cake/lib/Cake/View/Helper/FormHelper.php を読んでいただければと。

[CakePHP2]CakeDC の Tags を導入してみた。

CakeDC の Tags を使ってみていますよ

こんばんは、PHP初心者のJapdoorです。

今回は、今やデータ管理の定番の『タグ付け』を実装しているプラグイン導入をやってみましたよ。
本記事は初心者向けの記述になってますので悪しからず。

インストールターゲット

↑ここで手に入るので、zipとかgitとか各種DL方法に対応しているので、適当にDLしましょう。

配置

zipを前提に話を進めると、unzipして親ディレクトリをTagsにネーム。
で、app/Pluginの下に移動。
app/Plugin/Tags ←こんな感じになるように。

コンフィグ設定

↓こいつに追記。
app/Config/bootstrap.php

CakePlugin::load('Tags');

テーブル作成

テーブル作成はプラグインにモジュールが付属しているので、半自動で行えます。
作られるテーブルは、

  • Tags – タブテーブル
  • Tagged – 関連付け管理テーブル

既存で同名のテーブルがある場合は、このモジュールは使用できません。
コマンドはコンソール配下で実行

cake schema create --plugin Tags --name tags

モデルに設定

タグ化したいテーブルのフィールドにビヘイビアを指定

public $actsAs = array('Tags.Taggable');

ビューに追加

tagsフィールドを他のフィールドと同じように指定すると、登録等が可能に。

タグクラウドの取得

$this->Model->Tagged->find('cloud')

書きかけ。

Scalaで乱数とかランダム文字列とか

CakePHPで使う乱数を作るのに、久々にScala書いてみた

まずは乱数APIの読み込み

import scala.util.Random

Security.salt

scala> val str = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
scala> (1 to 40).map(x => str(Random.nextInt(str.length))).mkString

文字列を定義している時点で負けかなと思っている。

Security.cipherSeed

scala> (1 to 29).map(x => Random.nextInt(10)).mkString

本当はこんな感じ↓で書きたかったけど、無駄が多いので

(0 until 29).map(x => Random.nextInt(10) * Math.pow(10, x)).sum

[クロスドメイン] JQuery で行う クロスドメイン対応(IE含)

通信相手

まず、肝は“Access-Control-Allow-Origin”
jsからアクセスする対象のコンテンツがクロスドメインアクセス許可をしていないといけない。
レスポンスヘッダーに存在すればよいということで、
PHPだと、こんな感じで書く(らしい)

<?php
header("Access-Control-Allow-Origin: *");

通信モジュール

近代的なブラウザはJQueryのajaxでそのまま通信できるが、やっぱり彼は…

IE 対応 – XDomainRequest

JQueryのajax等でクロスドメイン通信を行う場合は、xdr.jsを呼んでおくと、
IE8以上(?)のブラウザはXDomainRequest(IE用のクロスドメイン通信モジュールのようなもの)が自動で使用される。
xdr.js

宣言例

<script src="./js/jquery.min.js"></script>
<script src="./js/xdr.js"></script>

Modした方の記事↓
IE9のXDomainRequestでCORSするときにjQuery.noop使うと通信中断するバグ – classmethod

XDomainRequestの注意点はこの辺↓が読みやすかった(英語)。
http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
特に気になったのは、

7. Requests must be targeted to the same scheme as the hosting page

http同士、https同士でないとアクセスができないという点。
他の近代的なブラウザはスキームがクロスしていても動いた。(http→https→http, https→http→https)

その他

文字コード – charset

で、さらにサーバがEUCだったりすると、また厄介ですが、
アクセス相手が管理下にある場合は、charsetを書いてあげたらいいんでないかと。

呼び出し先

<?php
header("Access-Control-Allow-Origin: *");
header("Content-type: text/plain; charset=euc-jp");
define('Charset', 'EUC-JP');
 
print 'ここの文字列が返ります';

呼び出し元

<script src="./js/jquery.min.js"></script>
<script src="./js/xdr.js"></script>
<script type="text/javascript">
$( function () {
  $.ajax({
    url: "http://konna-domain.neeyo/text-wo-kaese",
    cache: false,	// 一応
    crossDomain: true,	// 不要かも
    dataType : 'text'	// 条件次第
//    ,beforeSend: function ( xhr ) {
//      xhr.overrideMimeType("text/plain; charset=euc-jp"); // これをしてもxdrには反映されないので、不十分
//    }
  })
  .done(function(html) { $("#rewritable").html('done'); })
  .fail(function(jqXHR, textStatus) { $("#rewritable").html('fail');});
</script>
 
<div id="rewritable"></div>

[Android] Android SDK Tools v.21にアップデートできなかったので対応

会社の環境では何の問題も無くアップデートできたのですが、
自宅ではなぜかAndroid SDK Tools v.20までしか表示されず、
アップデートができませんでした。

なので、↓ここのUSE AN EXISTING IDEのとこに隠れてるSDKを新たにダウンロード。
http://developer.android.com/sdk/index.html
で、解凍し、確認しながら既存環境に上書き。

※念のため、事前に(v.20の時点で、)
Android SDK Tools とAndroid SDK Platform-tools を削除しましたが、
このオペレーションは不要かも。

で、無事にv.21に相成りました。