アーカイブ : 2014年 2月

Eclipse日本語版をインストールする

DBの設計で、ER-Masterを使用しています。
ER図からエクスポートで、Table CreateのSQLを生成してくれるため非常に重宝しています。

パソコンを変更したので、新しい環境にER-Masterをインストールする作業をメモ。

まずはEclipseをインストールします。

日本語版をインストールしたいので、
MergeDoc Projectからファイルをダウンロードします。

現時点(2013/11/21)の最新版「Eclipse 4.3 Kepler Pleiades All in One」をクリックします。
使用したいパッケージを選択してダウンロードします。
重くしたくないので、「Platform」を選択します。

パソコンはWindows8 64bitなので、64bit Full Editionにします。

ダウンロードしたファイルを解凍します。
解凍すると、pleiadesというフォルダが生成され、この下にeclipseというフォルダがありますが、
ここにeclipseの本体が入ります。
pleiadesフォルダをコピーして、cドライブ直下に貼り付けます。
c:\pleiades\eclipseという構成になります。

c:\pleiades\eclipse\eclipse.exeを実行します。
以下のようなスプラッシュ画像が表示され、ワークスペース・ランチャーが立ち上がると、導入終了です。
eclipse

Google Chromeでコンソールに値を表示する方法

Javascriptのデバッグで、変数に入っている値を知りたいときには、

var hoge = "ほげ";
alert(hoge);

として、alertで表示させていました。

これはこれで便利なのですが、loop処理などでいちいちalertボックスを
表示させているのがメンドくさい場合もあります。
そういった場合は、

var hoge = "ほげ";
console.log(hoge);

としてください。

Google Chromeのデバッグツールで「Console」を表示させると
hogeにセットされている値を表示させることができます。
これは便利!

CakePHPでリダイレクトの際にパラメーターを設定する

CakePHPで、登録や変更処理が終わった後にリダイレクトする場合は以下のようにします。

$this->redirect(array('action' => 'index'));

これで、一覧画面にリダイレクトします。
コントローラーを指定したい場合は、以下のように指定します。

$this->redirect(array('controller' => 'orders', 'action' => 'index'));

編集画面等で、idを渡したい場合は以下のようにします。

$this->redirect(array('action' => 'edit', $id));

これで、「/コントローラー名/edit/id」というURLにリダイレクトします。

名前付きパラメーターを渡すこともできます。

$this->redirect(array('controller' => 'orders', 'action' => 'confirm', 'product' => 'pizza', 'quantity' => 5));

これで、「/orders/confirm/product:pizza/quantity:5」というURLにリダイレクトします。

ちょっとハマったのが、idをパラメーターとして渡したいときです。

$this->redirect(array('action' => 'edit', 'id' => 5));

としていたのですが、これだと「/コントローラー名/edit/id:5」というURLになってしまいます。
「’id’ => 」は不要で、

$this->redirect(array('action' => 'edit', 5));

とします。

JavascriptでFormのsubmitを行う

FormのsubmitをJavascriptで行う方法です。

ボタンでsubmitする場合は、以下のように書きます。

<input type="submit" value="登録">

Javascriptで実行する場合は以下のようにします。

<script>
function do_submit() {
  document.forms['hoge'].submit();
}
</script>

<form method="post" name="hoge" action="index.php">
<input type="text" name="name" />
<input type="submit" value="登録" />
</form>

<input type="button" value="登録" onClick="do_submit();">

type=”submit”をクリックしても、type=”button”をクリックしても同じように動作します。
Javascriptの方のforms['hoge']には、formタグのname=”hoge”の値をセットします。

また、Javascriptの方で変数を追加してpostしたいということがよくあると思います。
jQueryを使って以下のようにしてやります。

$('<input>').attr({
  type: 'hidden',
  id: 'hoge_id',
  name: 'hoge',
  value: 'ほげ'
}).appendTo('#target_id');

これで、id=”target_id”の要素に、inputタグのtype=”hidden”が追加されます。

まとめると、以下のようになります。

<script>
function do_submit() {
  $('<input>').attr({
    type: 'hidden',
    id: 'hoge_id',
    name: 'hoge',
    value: 'ほげ'
  }).appendTo('#target_id');
  document.forms['hoge'].submit();
}
</script>

<form method="post" name="hoge" action="index.php">
<div id="target_id">
  <input type="text" name="name" />
  <input type="submit" value="登録" />
</div>
</form>

<input type="button" value="登録" onClick="do_submit();">

CakePHPでレイアウトファイルを指定する

CakePHPでは、デフォルトのレイアウトファイルは
View/Layouts/default.ctp
です。

これを別のレイアウトファイルを使用する場合は、
コントローラーに以下のようにしています。

$this->layout = "sample";

同時に、
View/Layouts/sample.ctp
というファイルを作成しておきます。

これで、sample.ctpというレイアウトファイルが使用されます。

HTMLで印刷用ページを作成する

印刷ボタンを用意して、クリックすると印刷用ページを開くという実装を行ったのでメモ。
通常は、Web表示用と印刷用でそれぞれのCSSを用意して、
印刷したい場合だけ印刷用のCSS(print.cssなど)が適用されるように実装します。

印刷ボタンを以下のようにして設置することで印刷が実行されます。

<button onclick="window.print()">印刷する</button>

今回は、別途印刷専用のページを用意して、そのページを開くと印刷が実行されるように実装しました。
で、ページを開くとすぐに印刷が実行されるようにするにはどうするか?と思い
とりあえず以下を入れてみたらOKでした。簡単でした・・・。

<script>
window.print();
</script>

Javascriptで確認ダイアログを表示する

Javascriptで、「OK」か「キャンセル」かを選択できる確認ダイアログを表示する方法です。

window.confirm()を使用します。

<script>
function kakunin() {
  if(window.confirm("")) {
    //OKをクリックした場合の処理

  } else {
    //キャンセルをクリックした場合の処理

  }
}
</script>

<input type="button" value="確認" onClick="kakunin()" />

PHPでディレクトリごとコピーする

PHPのcopy関数は、ファイルのコピーを行いますが、
ディレクトリごとコピーすることができません。

ディレクトリごとコピーする方法がないか調べていたところ、
そのものズバリの関数を作成されている方がいらっしゃったのでそのまま使わせてもらいました。

//------------------------------------------------------------------------------
// ディレクトリ階層以下のコピー
// 引数: コピー元ディレクトリ、コピー先ディレクトリ
// 戻り値: 結果
function dir_copy($dir_name, $new_dir)
{
  if (!is_dir($new_dir)) {
    mkdir($new_dir);
  }

  if (is_dir($dir_name)) {
    if ($dh = opendir($dir_name)) {
      while (($file = readdir($dh)) !== false) {
        if ($file == "." || $file == "..") {
          continue;
        }
        if (is_dir($dir_name . "/" . $file)) {
          dir_copy($dir_name . "/" . $file, $new_dir . "/" . $file);
        }
        else {
          copy($dir_name . "/" . $file, $new_dir . "/" . $file);
        }
      }
      closedir($dh);
    }
  }
  return true;
}

以下のサイトを参考にさせて頂きました。
・ディレクトリ全コピー関数 | Search A.I.

Javascriptで足し算を行う際に気をつけること

Javascriptで足し算をしようと何も考えずに

var hoge = 2;
var hoge = hoge + 4;

とすると、hogeは6ではなく、24になってしまいます。

Javascriptでは、足し算だけではなく、文字列の連結も「+」で行います。
ですので、この場合、文字列の連結とみなされて「24」となってしまうのです。

では、数値計算したい場合はどうするか?
以下のようにして、文字列を数値型に変換します。

var hoge = 2;
var hoge = parseInt(hoge) + 4;

parseInt(hoge)だけではなく、eval(hoge)も使えます。
あと、マイナス(-)は数値型として計算してくれますので、以下のようにする方法もあります。

var hoge = 2;
var hoge = hoge - (-4);

バグの元になりやすいので気をつけたいですね。

jQueryでリンク先を変更する方法

jQueryでリンク先のURLを変更する方法を調べたのでメモ

<a href="http:\\hoge.com/">Hoge</a>

上記のようなリンクのURLをjQueryから変更する方法です。
aタグにid=”hoge”を追加します。

<a href="http:\\hoge.com/" id="hoge">Hoge</a>

以下のようにして、リンク先を置き換えます。

$("#hoge").attr("href", "http:\\hogehoge.com/");