2012年7月9日月曜日

[cakephp] Formヘルパー


$this->Form->chckbox()のオプション

echo $this->Form->checkbox('hoge',array('label'=>'hoge'));
と書いた時以下のように出力される。





この時チェックされなかった時に値が"0"となるようにする仕掛けhiddenが要らない時

optionsに'hiddenField'=>false入れておくとこれが表示されない。

2012年6月29日金曜日

[apache] さくらのレンタルサーバーとmod_rewrite

さくらのレンタルサーバーはRewriteEngine OnしてもRewriteBase の記述がないとうまく動かない。
↓↓これでは動かない↓↓
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

↓↓こうしないとダメ↓↓
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

サーバーのスペックは
FreeBSD 7.1-RELEASE-p16 i386
Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
PHP 5.2.17
です。

2012年6月5日火曜日

[Mercurial][win] マーキュリアル分散型バージョン管理システムの導入 for Win

Windowsなので迷わずTortoiseHgを導入します。MacのようにGitもMercurialのどちらでも使えるようなものがあればいいのですが・・・。Mercurialの公式サイトにTortoiseHg with Mercurial というのがありますのでこれをダウンロードしてインストールします。

  • TortoiseHg Workbenchを実行します。
  • ファイルメニューの設定をクリックします
  • 左のメニューリストTortoiseHgをクリックし、マージツール、差分表示ツールをWinmergeuに、エディタをお使いのエディタに設定します
  • コミットをクリック、ユーザー名にご自分のメールアドレスを入力します
  • マスターリポジトリのサーバーが自己証明書を使っている場合は証明書を登録します。ファイルを開くボタンをクリックして以下を追加します。
    [web]
    cacerts=C:\Users\username\cacert-root.crt
    
  • OKをクリックして設定を閉じます。
  • マスターリポジトリがあるならファイルメニューのリポジトリのクローンを実行します
  • ソースに URL(https://example.com/hg/testdemo等、任意)を入力します。
  • ターゲットに (/Users/username/hg/testdemo)を入力し、「クローン」ボタンをクリックします。
  • ユーザーIDパスワードを入力ししばらく待ちます。完了が表示されたら、ウインドウを閉じます。
以上です。

2012年6月4日月曜日

[cakephp] 画像ディレクトリ等の変更


app/webroot/index.phpの
"if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {"の前に
以下を挿入するとimgをimagesに変更できるが、スタイルシート等に記述した
background-image:url("../img/background.gif"); は手で変更しなくてはいけないので注意が必要。

if (!defined('IMAGES_URL')) {
define('IMAGES_URL', 'images/');
}

[Mercurial][Mac] マーキュリアル分散型バージョン管理システムの導入 for Mac

windowsならば迷わずTortoiseシリーズを使うところだが、MacならばAppストアーで扱っているSourceTreeというが凄いらしいのでこれを使ってみます。
まず、mercurialがインストールされていない場合は、Mercurialの公式サイト でダウンロードしてきます。公式サイトの右上のボタンを押すとダウンロードが始まります。ダウンロードしているOSに併せてファイルが違うので、snow leopard ならMercurial-2.2.2-py2.6-macosx10.6.zipが Lion ならMercurial-2.2.2-py2.7-macosx10.7.zipがダウンロードされますので間違えのないようにお願いします。mercurial-2.2.2+20120602-py2.7-macosx10.7.mpkgを実行してインストールします。

次にAPPストアーからSourceTreeをインストールします。今なら(2012.06.03現在)無料ですのでお早めに!!。

これで準備はできました。

  • SourceTreeを実行します。
  • 初めて実行すると、ようこそウィンドウが表示されるのでユーザー名とメールアドレスを入力、「・・設定ファイルを更新することを許可する」にチェックを入れて、次へをクリックします
  • オンラインサービスにアカウントがあれば入力、なければそのまま次へ
  • ローカルリポジトリがあれば検索して登録、なければそのまま仕上げ
  • ブックマークというウインドウが立ち上がるのでツールバーの左端のリポジトリの追加ボタンを押します。
  • マスターリポジトリが有るのなら「リポジトリをクローン」タブを新規ならば「リポジトリを作成」タブを選びます。
  • 「クローン」タブを選んだ場合はソースパスにURL(https://example.com/hg/testdemo等、任意)を入力します。
  • 認証ウインドウが開きますのでユーザー名とパスワードを入力します。
  • 保存先のパス(/Users/username/hg/testdemo)を入力し、「クローン」ボタンもしくは「作成」ボタンをクリックします。
たったこれだけです。

2012年6月1日金曜日

[javascript] JSONの使い方

まず、http://www.json.org/ のJavaScript json2.js を取得する。

github から ZIPボタンを押してダウンロード、解凍して適当に設置する。

<script type="text/javascript" src="../js/json2.js"></script>

これで準備は整った。
オブジェクトや配列からJSON文字列に変換するには

JSON.stringify() を使う

JSON.stringify(value, replacer, space)

value オブジェクトや配列

replacer 

space 入れ子の構造のインデント値、整形して表示するような時に使用する。
通常のJSON文字列にする場合は指定しない。
ここにスペースを入れておくと、phpのvar_dump()ようにインデントする。

JSON文字列からオブジェクトに変換するには 

JSON.parse()を使う

JSON.parse(text, )

text

reviver


2012年5月31日木曜日

[javascript] オブジェクトの表示phpのvar_dumpみたいなもの

 function printProperties(obj) {
     var properties = '';
     for (var prop in obj){
         properties += prop + "=" + obj[prop] + "\n";
     }
     document.write(properties);
 }

[php] JSONと連想配列の相互変換

$arrayData = (array) json_decode($jsonData);

$jsonData = json_encode((object) $arrayData);

2012年5月28日月曜日

[cakephp][jQuery] radioボタンを選択する時は"["と"]"をエスケープする。


<input class="category" type="radio" name="category" value="1" />携帯
<input class="category" type="radio" name="category" value="2" />スマートフォン
<div id="category_select">
</div>

こういうラジオボタンで下の  id="category_select" のdivブロックを下記のjavascriptで
表示したり非表示にしたりしているのは良くある話ですが。

<script>
$(document).ready(function(){

    function displayVals() {
        var singleValues = $('input[name="category"]:checked').val()
        if(singleValues == 2){
            $("#category_select").css("display","block");
        }else{
            $("#category_select").css("display","none");
        }
    }

    $('input[name="category"]:radio').change(displayVals);
    displayVals();
});
</script>

cakephpでデータをやり取りすると少し困ってしまう。

普通のヘルパーを使って

<?php
echo $form->input('category', array(
  'type'=>'radio',
  'legend' => false,
  'label'=> true,
  'class'=>'category',
  'options'=>array('1'=>'携帯', '2'=>'スマートフォン'),
));
?>
このようにViewを書くとname部分が"data[Mobile][category]"になってしまい

<div class="input radio">
<input type="hidden" name="data[Mobile][category]" id="MobileCategory_" value="" />
<input type="radio" name="data[Mobile][category]" id="MobileCategory1" class="category" value="1"  />
<label for="MobileCategory1">携帯</label>
<input type="radio" name="data[Mobile][category]" id="MobileCategory2" class="category" value="2"  />
<label for="MobileCategory2">スマートフォン</label>
</div>

こんなコードが出力される。

javascriptのSelectors部分がダブルクォーテーションで囲まれているから
input[name="category"] を input[name="data[Mobile][category]"] こう書き換えると

良いように思うが、これでは上手く行かない。理由は上手く説明できないので割愛するが
下記のように"["と"]"をエスケープしてやらなくてはいけない。

input[name="data\[Mobile\]\[category\]"]

だから正しいjavascript文は

<script>
$(document).ready(function(){

    function displayVals() {
        var singleValues = $('input[name="data\[Mobile\]\[category\]"]:checked').val()
        var defined = 0;
        if(singleValues == 2){
            $("#category_select").css("display","block");
        }else{
            $("#category_select").css("display","none");
        }
    }

    $('input[name="data\[Mobile\]\[category\]"]:radio').change(displayVals);
    $(window).load(function () { displayVals();});
});
</script>

こうなる。

2012年5月8日火曜日

サーバサイドでタグを動的に複数出力し、
レイアウト1段目に<br />
<br />
<li>をfloatで3つ配置、
2段目にも</li>
<li>を3つ配置・・・といった構成の場合、
テキスト量によっては要素の高さが異なってしまい、
レイアウトが崩れる原因ともなるがそんな時。

jqueryAutoHeight.jsが横一列の高さを揃えてくれる。

http://code.google.com/p/opensocial-jquery/wiki/PluginAutoHeight</li>

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jqueryAutoHeight.js"></script>
<script type="text/javascript">
jQuery(function($){
    $(揃えたいセレクタ).autoHeight();
});
</script>

2012年5月7日月曜日

[wp]予定に基づいたメンテナンスを行っているためしばらくの間ご利用できません。少し間をおいて再度確認してください。

「予定に基づいたメンテナンスを行っているためしばらくの間ご利用できません。少し間をおいて再度確認してください。」が 表示されてサイトが表示しない場合。 WordPress下に、.maintenanceのファイルが作成されてますので、これを削除することで、メンテナンスモードが解除されます。 もしくは、.maintenanceをに書き換える。