定義名 | 定義内容 | 説明 |
---|---|---|
ROOT | /home/www/cakephp | cakePHPのルート |
APP_DIR | app | appのディレクトリ名称 |
WEBROOT_DIR | webroot | webrootのディレクトリ名称 |
WWW_ROOT | /home/www/cakephp/app/webroot/ | webrootのフルパス |
フルパスのべた書きはやめて下さい。
Japan to World. World to Japan.
定義名 | 定義内容 | 説明 |
---|---|---|
ROOT | /home/www/cakephp | cakePHPのルート |
APP_DIR | app | appのディレクトリ名称 |
WEBROOT_DIR | webroot | webrootのディレクトリ名称 |
WWW_ROOT | /home/www/cakephp/app/webroot/ | webrootのフルパス |
フルパスのべた書きはやめて下さい。
今回は、文字列から文字列への変換です。
英語表記の日付文字列にも対応してます。
なお、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で日時入力のフィールドを作ってくれるヘルパーの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 を読んでいただければと。
こんばんは、PHP初心者のJapdoorです。
今回は、今やデータ管理の定番の『タグ付け』を実装しているプラグイン導入をやってみましたよ。
本記事は初心者向けの記述になってますので悪しからず。
↑ここで手に入るので、zipとかgitとか各種DL方法に対応しているので、適当にDLしましょう。
zipを前提に話を進めると、unzipして親ディレクトリをTagsにネーム。
で、app/Pluginの下に移動。
app/Plugin/Tags ←こんな感じになるように。
↓こいつに追記。
app/Config/bootstrap.php
CakePlugin::load('Tags');
テーブル作成はプラグインにモジュールが付属しているので、半自動で行えます。
作られるテーブルは、
既存で同名のテーブルがある場合は、このモジュールは使用できません。
コマンドはコンソール配下で実行
cake schema create --plugin Tags --name tags
タグ化したいテーブルのフィールドにビヘイビアを指定
public $actsAs = array('Tags.Taggable');
tagsフィールドを他のフィールドと同じように指定すると、登録等が可能に。
$this->Model->Tagged->find('cloud')
書きかけ。
CakePHPで使う乱数を作るのに、久々にScala書いてみた
まずは乱数APIの読み込み
import scala.util.Random |
scala> val str = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" scala> (1 to 40).map(x => str(Random.nextInt(str.length))).mkString |
文字列を定義している時点で負けかなと思っている。
scala> (1 to 29).map(x => Random.nextInt(10)).mkString |
本当はこんな感じ↓で書きたかったけど、無駄が多いので
(0 until 29).map(x => Random.nextInt(10) * Math.pow(10, x)).sum
まず、肝は“Access-Control-Allow-Origin”。
jsからアクセスする対象のコンテンツがクロスドメインアクセス許可をしていないといけない。
レスポンスヘッダーに存在すればよいということで、
PHPだと、こんな感じで書く(らしい)
<?php header("Access-Control-Allow-Origin: *"); |
近代的なブラウザはJQueryのajaxでそのまま通信できるが、やっぱり彼は…
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)
で、さらにサーバが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 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に相成りました。