月別アーカイブ: 2013年1月

【cakePHP】コントローラからViewファイルを使う

cakePHPのサイトでユーザーにメッセージを送るときに、テンプレートファイルで内容を用意しておきたいな、と思ったもので、コントローラーから好きなViewファイルの内容を変数に入れるのをやってみました。CakeEmail.phpを参考にしました。

コントローラのアクションの中で

フォルダ名は既存のものに階層を掘っても(/スラッシュが使える)新しく作ってもかまいません。ファイル名のtemplate_nameを書き換えることで好きなViewファイルを使えます。

レスポンシブウェブデザインのコーディングを担当したサイトリリース

tamasyu

おもっさまミカメジャーナルにも協力していただいているデザイナーのサイトがリニューアルされました。今回コーディングを担当しました。

これまでもこのサイトはFlashでかなり動きのあるおもしろいサイトだったのですが、今回はスマートフォンやipadにも対応させるためシンプルにいくということで、どの画面サイズ、比率でも対応できるようレスポンシブウェブデザインにしました。

http://tamasyu.com

【cakePHP】トグルスイッチをAJAXで反映させる

さして目新しいことでもないですが簡単な小ネタでも。

トグルスイッチを切り替えるたびにDBを書き換えることは簡単にできます。
cakePHP2.0+jQueyMobile1.2でのトグルスイッチのDBへの反映のやり方です。いいやり方か分からないですが何かの助けになればと。

cakePHPのアクションは

こんな感じです。これをコントローラに記述して /{コントローラ名}/toggleValid/{ID} にアクセスするたびにvalidカラムが0と1に交互に変わります。CASE文で判定すればいろいろできて便利なのでcakePHPでSQL組み立てるやり方が分からないときはとりあえずqueryファンクション使っちゃいます。

そしてこの関数はコントローラーでなくモデルに書くべきものなので実際にはモデルに書いてます。またjQueryMobileと組み合わせているので下のようになります。

[共通読み込みJavaScriptファイル]

このファイルはjQueryMobile特有の処理をしています。最初のイベントバインドはDOMキャッシュを有効にしたままJavascriptを実行させるため、data-role=”page”の属性を持つコンテナにidを割り振り、そのページコンテナの初期イベントを監視しています。

[ビューファイル(index.ctp)]

$validと$idはコントローラからセットしておいてください。data-idはjQueryMobileではおなじみのHTML5の独自データ属性です。これでデータIDをjQueryへ渡すのが簡単です。

[AJAX呼び出し先コントローラー]

[モデル]

【cakePHP】検索エンジンに補足されないよう削除リンクはPOSTにしよう

かなり前に作ったサービスなんですが、入れたはずのデータが時間が経つと消えているという怪現象に遭遇しました。

いや、分かってみると怪現象でもなんでもなかったんですが、とある中華検索サイトが削除リンクをクローラ収集中に踏んでいたのでした。

こういうことが起きないよう、クローラにアクセスされるとデータが変わってしまうようなリンクはPOSTかJavaScriptを使ったリンクにしましょう。

元のリンク

cakePHP1.3のajaxヘルパー(2.0では非推奨)を使ってリンク先の画面を画面を遷移せずに取得していました。変換されるHTMLをみると

とJavaScriptが実行できないクローラでも普通のリンクとして辿れるようにできています。
POSTに書き換えました。(div内を書き換えるのでなく特定のdivを削除するようやり方は変わってます)
jQueryを使用しています。

ちなみにcakePHP2.0のFormヘルパーにはpostLINKという関数が追加されていますので、動的に書き換えたりしないならこっちを使ったほうが簡単なのではないでしょうか。

キャッシュ可能なURLはGETで、データ操作のあるURLはPOSTで行うと考えると分かりやすいでしょう。

しかし検索クローラはPOSTをSUBMITしないのでしょうか。googleは2012年のWEBマスター向け公式ブログでPOSTリクエストに対応していると明記しています。
いずれまた対策を施さないといけなくなるかもしれません。その時は、パーミッションの与えられた会員ユーザーかどうかをチェックしたうえで削除することになるでしょう。