CakePHPのinputで、label、divタグを消したい

CakePHPのFormヘルパーでinputを使用した場合、

labelタグとdivタグが表示されます。

これを表示しないようにするには、以下のようにします。


echo $this->Form->input('name', array('type'=>'text', 'label'=>false, 'div'=>false));

ただ、これだと1個ずつ指定しなければならないので、面倒くさいです。

まとめて指定する方法がないか探してみたらありました。

Formヘルパーのcreateメソッドで、「inputDefaults」を指定します。

以下のように使います。


echo $this->Form->create('Item', array('inputDefaults'=>array('label' => false, 'div' => false));

CakePHPでCSSのlink タグをヘッダ内に表示する

/app/webroot/css ディレクトリ以下に置いたCSSファイルを表示するには、

viewファイルに以下のように記載します。


echo $this->Html->css('forms');

すると以下の様に表示されます。

ページごとに使用したいCSSを変えたい場合、

個別のviewファイルにCSSを書きます。

このときに、headタグ内にCSSに追加する方法です。

HtmlHelperのCSSメソッドは、以下のような定義になっています。


HtmlHelper::css(mixed $path, string $rel = null, array $options = array())

この$optionsパラメーターのキー‘inline’を「false」に設定すると

CSSのlinkタグはHTML内のheadタグ内にあるcssブロックに追加されます。

以下のようにします。


echo $this->Html->css('forms', null, array('inline'=>false));

CakePHPで、CSSとJavascriptのタグを表示する方法

CakePHPで、CSSファイル、Javascriptファイルのタグを表示する方法です。

Javascriptのタグを忘れやすいのでメモ。

まず、app/webroot/css/以下にCSSファイルを、

app/webroot/js/以下にJavascriptファイルを置きます。

Viewファイル(ここではapp/View/Layouts/default.ctp)に

以下のように記載します。


echo $this->Html->css('import');
echo $this->Html->script('jquery');

すると以下のようにタグが表示されます。


また、複数のCSS、Javascriptを同時に指定したい場合は、

引数に配列を使用します。


echo $this->Html->css(array('import', 'jquery.bxslider'));
echo $this->Html->script(array('jquery', 'jquery.bxslider.min'));

これで以下のように複数のタグが表示されます。



CakePHPのfindでORを複数指定したい

CakePHPの検索条件でORを指定するには、以下のようにします。


$conditions = array('name IS NOT NULL',
"OR"=>array('company_id IS NULL', 'company_id'=>1)
);

これで発行されるSQLは下記のようになります。


SELECT * FROM users
WHERE
(name IS NOT NULL)
AND
((company_id IS NULL) OR (company_id = 1))

ORをANDで繋げたいという場合があります。

以下のような場合ですね。


SELECT * FROM users
WHERE
(name IS NOT NULL)
AND
((company_id IS NULL) OR (company_id = 1))
AND
((post_id IS NULL) OR (post_id = 1))

単純にORをもう一つ増やせばいいと考え、以下のようにしてみました。


$conditions = array('name IS NOT NULL',
"OR"=>array('company_id IS NULL', 'company_id'=>1),
"OR"=>array('post_id IS NULL', 'post_id'=>1)
);

しかし、上記のコードだと、以下のようになってしまいます。


SELECT * FROM users
WHERE
(name IS NOT NULL)
AND
((post_id IS NULL) OR (post_id = 1))

前のORで指定した「array(‘company_id IS NULL’, ‘company_id’=>1)」が

後ろのORで上書きされているようです。

どうすれば、と調べたところORを配列にすればよい

という記載を見つけました。


$conditions = array('name IS NOT NULL',
array("OR"=>array('company_id IS NULL', 'company_id'=>1)),
array("OR"=>array('post_id IS NULL', 'post_id'=>1))
);

こうすると、前のORが上書きされなくなりますね。

意図したように、下記のようなSQLを吐き出してくれました。


SELECT * FROM users
WHERE
(name IS NOT NULL)
AND
((company_id IS NULL) OR (company_id = 1))
AND
((post_id IS NULL) OR (post_id = 1))

以下のサイトを参考にしました。

findで複数のORを使う場合はarrayで囲む

CakePHPのfind条件にORを設定したい

PHPで特定の月の日数を取得する

PHPで特定の月の日数を取得したい

ということがあったのでメモ。

やることは簡単です。

取得したい月の末日を求めます。

末日の日付を取得したい場合には、

date('Y-m-t');

というように、日付に「t」を使います。

その月の日数は、末日の日付とイコールなので、

date('t');

で求められます。

特定の月の日数を求める場合はstrtotimeを使用して

date('t', strtotime($date));

というようにします。

先月の日数を求める場合は、

date('t', strtotime('-1 month'));

とします。

Sublime Text 2の設定(Packageの導入)

Sublime Text 2をより使いやすくするために、

Packageの導入を行いましょう。

始めにPackage Controlをインストールします。

メニューのViewからShow Consoleをクリックすると

入力ボックスが表示されますので、以下を貼り付けてEnterキーを押します。


import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())

Sublime Text 2を再起動します。

再起動後、メニューのPreferencesからPacage Controlが表示されれば完了です。

Packageのインストール

Ctrl+Shift+P もしくは、

メニューのToolsからCommand Palette…をクリックします。

入力ウィンドウが開きますので、「install」と入力し、

「Package Control:Install Package」が表示されたら

Enterキーを押します。

パッケージのリストが表示されますので、

インストールしたいパッケージを入力するか選択します。

オススメのPackage

HTML5:HTMLの自動補完

CSS Snippets:CSSの自動補完

jQuery:jQueryの自動補完

SublimeLinter:HTML,CSS,JSのエラーをリアルタイムで指摘

Goto-CSS-Declaration:HTMLのclass、ID名にカーソルをあてcommand + →でCSSの同じ単語に一発ジャンプ

IMESupport:日本語を入力する時に、エディタ内の現在行で入力できるようにする

AutoFileName:imageやlinkでファイルを扱う際、フォルダ名・ファイル名を一覧から選択できるようにする

他にも色々ありますので、検索すると良さそうです。

以下のサイトを参考にさせて頂きました。

SublimeText2の初心者 インストール・設定方法

Sublime Text 2ってエディタがすごくイイ。Dreamweaverから乗り換えた時の初期設定とか使い方とかをメモ

Sublime Text 2が立ち上がらなくなったときの対応

Sublime Text 2を使い始めて、色々カスタマイズをしていたら

エラーが表示されて、立ち上がらなくなってしまいました。

SublimeText2エラーメッセージ

SublimeText2エラーメッセージ

メッセージの内容は以下です。

Error trying to parse settings: Trailing comma before closing bracket in C:\Users\admin\AppData\Roaming\Sublime Text 2\Packages\User\Preferences.sublime-settings:9:1

どうも閉じカッコの前に不要なカンマが入っているということのようです。

メッセージにあった「C:\Users\admin\AppData\Roaming\Sublime Text 2\Packages\User\Preferences.sublime-settings」

というファイルを探してテキストエディタで開きます。


{
"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
"ignored_packages":
[
"Vintage"
],
"draw_white_space": "all", // スペース、タブを表示
"highlight_line": true, //現在行を強調する
}

となっていました。

最後の「”highlight_line”: true,」の「,」が不要なようです。

削除して、以下のようにして保存します。

{
"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
"ignored_packages":
[
"Vintage"
],
"draw_white_space": "all", // スペース、タブを表示
"highlight_line": true //現在行を強調する
}

これでOKだろうと、起動を試みたが立ち上がらない・・・。

タスクマネージャーにSublime Text 2が残っていないか確認してみたら、

バックグラウンドプロセスにいました。

このプロセスを終了させて、Sublime Text 2の起動で立ち上がってくれました。

テキストエディタはSublime Text 2がオススメ

テキストエディタはずっと秀丸を使い続けてきたのですが、

最近「Sublime Text 2」を使い始めています。

しばらく使ってみて良さそうなら、

完全に乗り換えようと思っています。

Packageをインストールすることで

入力補完機能など便利な機能を使えるようになります。

とりあえずインストールしてみて

使ってみるだけなら無料でできますので、

気になる方はぜひ試してみてください。

継続して使用する場合は、有料になります。

とりあえずインストールしたら初期設定を行ってみましょう。

メニューの「Preferences」から「Settings – User」をクリックします。


{
"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
"ignored_packages":
[
"Vintage"
]
}

上記のように表示されるので、「}」の前に設定を追加して以下のようにしました。

{
"color_scheme": "Packages/Color Scheme - Default/Sunburst.tmTheme",
"ignored_packages":
[
"Vintage"
],
"draw_white_space": "all", // スペース、タブを表示
"highlight_line": true, //現在行を強調する
"word_wrap": true //自動改行
}

「draw_white_space」、「highlight_line」、「word_wrap」の3つを追加しました。

他にも設定できるパラメーターがありますので、

試しながら紹介していきます。

PHPでURLが存在するかを調べる方法

PHPで、入力されたURLが実際に存在するかを

チェックする処理を実装したので、その時のメモ。

以下を使う方法があります。

1.get_headers

2.fopen

3.file_get_contents

結局、get_headersを使う方法を採用しました。

get_headers()は、HTTP リクエストに対するレスポンス内で

サーバーによって送出されたヘッダの配列を返すので、

この中からステータスコードが200であるかを

チェックします。

以下のように実装しました。


$header = @get_headers($url);
if(preg_match('#^HTTP/.*\s+[200]+\s#i', $header[0])) {
return true;
} else {
return false;
}

以下のサイトを参考にさせてもらいました。

PHPでURLが存在するか確認する方法

URLが実際に存在するかどうかを調べる方法(PHP)

PHPのファイルダウンロードでのファイル名文字化け対応

PHPでファイルダウンロードが画面を作ったのですが、

ユーザーさんからダウンロードしたファイルが文字化けする

という報告があり調査しました。

私が普段使っているのはGoogle Chromeなのですが、

Chromeでは文字化けは起こっていませんでした。

ユーザーさんに確認すると、使用しているブラウザは

IEとのこと。

IEで試してみると、やはり文字化けしました。

ダウンロードする処理は以下のように書いていました。


header("Content-Type: application/octet-stream;");
header("Content-Disposition: attachment;filename=".$file_name);
echo file_get_contents($file_name);

文字化けするのなら文字コードを変えてやればいいということで

mb_convert_encodingを使ってみます。


header("Content-Type: application/octet-stream;");
header("Content-Disposition: attachment;filename=".mb_convert_encoding($file_name, 'sjis-win', 'UTF-8'));
echo file_get_contents($file_name);

サーバー上のプログラム、DBはUTF-8なので、

UTF-8からWindows用にShift-JISに変換します。

これで文字化けは解消しました。

IEだけではなく、念のためChromeで試しても文字化けせず。