5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

カテゴリー: システム関連

  • CakePHPでpaginate()での検索結果の引き継ぎの話し

    引き続きCakePHPの話し。覚え書きです。

    検索結果をリストにして、このリストをページ替えしたり、ある項目でソートしたりしたいということはよくあります。CakePHPではページング処理は、コントローラーでpaginate()に検索条件を与えてあげるだけで実現できます。

    しかし、ソートしたり次へリンクを押してページ替えすると、検索条件を忘れてしまうのです。検索条件の引き継ぎはここでも書きましたが、getパラメータの処理を書いてあげなくてはなりません。セレクトメニューや、ラジオボタンは、検索項目に1つにつき1つの値しかありませんのでいいのですが、チェックボックスは複数の値がありますので、すべての項目をパラメータにするのはURLが長くなってしまいます。

    最初は、チェックボックスの項目を配列に格納し、シリアライズ化してGETパラメーターに置いてみましたが、GETパラメーターを解析するpassedArgs()がうまく解析してくれませんでした。

    そこで、チェックボックスをグループにして、この値をコンマ区切りに変換してからパラメーターに渡してしまいます。しかし、最初に検索条件を入力するページはPUTで各項目が配列で渡してきますので、検索条件を生成する処理を共通にするために、GETで来たパラメータはPUTで来たパラメータに合わせるように、コンマ区切りからPUTパラメーターの配列に変換してあげます。

    こんなことをしてあげないと、複数の値を持ったチェックボックスでの検索結果がpaginate()で処理できないのは、CakePHPでの面倒なところです。

    PS. 以上の内容を読んでみると、理解できなさそうですね。自分が理解できるだけのメモ書きですね。該当するソースを公開して説明できればいいのですが・・・。

    著:山田祥寛
    ¥1,870 (2025/06/26 14:04時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/06/26 14:04時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/06/26 14:04時点 | Amazon調べ)
  • 昨日のCakePHPでhasManyでの検索の続きの話し

    昨日のCakePHPでhasManyでの検索の続きです。うまくいったと思いましたが、検索結果に重複項目があります。hasManyのモデルにまともにSQLを実行したら重複するのは当たり前ですね。

    そこで、pagenate()でページングの処理をしているので、コントローラーのメンバー$pagenateのfieldsに、キーとなる項目にDISTINCTを付けてみる。これで、重複されなくなった。

    しかし、新たな問題。検索個数が合わない。こちらもcount(*)になっているところをcount(DISTINCT キー項目)にすればいいのだけど、$pagenateのfieldsからは影響されないようでした。

    いろいろ調べてみると、やはりありました。ここです。モデルにpaginateCount()を定義してあげればいいのでした。pagenate()のソースを見ると、モデルにpaginateCount()があるかどうかをチェックして、あればpaginateCount()を実行してくれます。無ければfindCount()を実行します。ここはSQLをゴリゴリ書いて、該当する条件でレコード数を返してあげるようにしました。配列に格納されている条件は次のようにWHERE句に変換できます。

    $Db = ConnectionManager::getDataSource($this->useDbConfig);
    $where = $Db->conditions($conditions);

    これで、重複せずに検索結果を表示できました。

    いまいち具体的な説明ではないので、もしご興味ある方はコメントに入れてください。

    著:山田祥寛
    ¥1,870 (2025/06/26 14:04時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/06/26 14:04時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/06/26 14:04時点 | Amazon調べ)
  • CakePHPでhasManyのモデルに対して条件式を書いた話し

    CakePHPロゴ

    ただ今、CakePHPでWebサイトを開発しています。今回は、検索条件を設定して抽出して結果をリストにするという、定型的な検索サイトです。

    あるモデルに対して検索条件を与えるのは普通です。CakePHPの場合、belongsToのような外部参照の関係であるモデルにも検索条件を与えても、簡単に抽出してくれます。

    しかし、hasManyの関係にあるモデルの項目に検索条件を書いてあげるとSQLを発行しているところでエラーになります。SQLのデバックログによると、hasManyのモデルに対しては、SQLでleft joinを作ってくれません。これで、未定義のテーブルということでSQLエラーになります。

    Googleで検索してみると、このように書けばOKと書いている。しかし、これではhasMany以外の関係のモデルを検索してから、hasManyのモデルにフィルターをかけているだけなので、検索結果が違ってくる。

    無理矢理SQLを生成してみることもやりましたが、ビューに渡す結果を生成するのが大変なので止めました。

    いろいろと調べてみると、ここにありました。後からhasManyのモデルに対してjoinを設定すればいいのです。モデルに対して、beforeFind()を定義してあげることが必要でした。CakePHPのソースを追ってみると、findAllのところでオプションにjoinが使えるように定義されていました。これで無事にhasManyのモデルでも条件式を書くことができました。

    すべてのサイトに感謝です。

    著:山田祥寛
    ¥1,870 (2025/06/26 14:04時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/06/26 14:04時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/06/26 14:04時点 | Amazon調べ)
  • レンタルサーバー会社からの回答がようやくきた話し

    spamメールが頻繁に届く件。2週間かかってレンタルサーバー会社から回答がありました。遅すぎる!

    最初のメールは、

    弊社にて、スパムメールが増えるように設定等は行っておりません。恐れ入りますが、スパム対策などをお客様側で行っていただくよう 何卒よろしくお願いいたします。ご確認いただけましたら幸いです。

    とのこと。メールサーバーの機能にスパムメールの対策があると明示されているし、以前同じ障害があって連絡したら対応してくれたので、再度問い合わせしました。

    すると、

    現在も引き続きspamが多く転送されておりますでしょうか。

    調査の結果、cpanelの一部バージョンとspamassassinの設定の問題で、spamが正しく判定されていない状態があったようです。

    現在は正常にspamの遮断を行っていると思われます。

    spam検出ツールのspamsassassinはオープンソースで提供されており、特に海外のspamには強いのですが日本語のメールでは誤判定率が高く、正常なメールまで削除されることを防ぐため比較的spamが通りやすい傾向になっております。

    誠に申し訳ございませんが、可能であるならばお客様のクライアント側でのspam対策も併せて行っていただくことをお勧め致します。

    との回答がすぐにありました。つまり、やはりspamフィルターの設定の問題であったようです。今回のクレームは2点です。

    • 回答が遅すぎる。2回催促しても音沙汰無し。これはひどい。
    • サポートしているはず機能を、サポートしていないと言い切って話しを終わらせようとした。

    spamassassinのフィルターの機能が低いのは諦めて、Thunderbirdのフィルター機能と地道に手作業で振り分けますが、最初の回答はいかがなものでしょう。

  • 迷惑メールのフィルタが先か、転送が先か?

    Yahooメールの転送を解除して思ったのですが、これだけ迷惑メールを転送してくれるということは、フィルタの処理前にメールは転送しているのでしょう。Gmailの場合、フィルタをかけてからメールを転送してくれるようでしたが、どうだったでしょうか?

    Yahooメールは正常に迷惑メールのフィルタが動いているようです。Yahooメールに届くメールは、ほぼ迷惑メールのようです。3時間で20通来ています。メールアドレス変更してあげたほうが、Yahooのためになる?

  • Yahooメールの転送を停止

    いままで、Yahooメールに来たメールは、自分のアドレスに転送するように設定していた。しかし、Yahooメールに来るメールは、あまりにも迷惑メールが多い。そこで、メールの転送をやめる。

    今までは、使っているレンタルサーバーのメールサーバーの迷惑メールのフィルターがうまく効いてくれたので、そこではじいてくれていたが、最近のメンテナンスからはじいてくれなくなっている。レンタルサーバー会社にはクレームを入れているが音沙汰無し。

    迷惑メールの宛先をみるとYahooメールが多いので、こちらで対応することにする。まずは転送をやめて、Yahooメールの迷惑メールのフィルター機能にがんばってもらおう。Gmailの迷惑メールのフィルター機能は優秀だけど、Yahooメールはどうでしょうか?

    ということで、私にYahooメールでメールを送ってこられても、対応が遅くなりますのでご注意を。といっても、Yahooメールはほとんど使っていないので、問題は無いかと思います。

  • 低血糖

    血糖値を下げる薬が効きすぎて、急激な低血糖になってしまい、動けなくなるのでかかりつけの先生に言ったら薬を変えてくれた。今まで朝食後に一回服用するだけであったが、毎食食前に飲むことになった。薬局では薬と一緒にブドウ糖ももらう。今度の薬はマイルドになったといっても、低血糖になった場合は今までのように飴やジュースでは回復しないのでブドウ糖で対応するそうだ。でも、どうしてマイルドになったのにブドウ糖が必要なのかは、次回聞いてみよう。

    でも、今日その薬を飲んだら、やはり体がだるくなる。これからちょっと心配。

  • CakePHPでNot foundエラーが出た話し

     

    CakePHPで開発しているときに、以下のメッセージが表示されてしまった。

    Not found
    
    The requested address was not found on this server.

    調べてみると、いろいろ原因があるようだが、自分の場合は、Modelが正しく設定されていないのが原因であった。core.phpのDebug.level を1にすれば、原因はすぐにわかる。そういえば、携帯電話対応のために、メッセージがうるさいので0にしていた。

    以上、覚え書き。

    追記

    一つのテーブルのアクセス権が設定されていないのが原因だった。ただし、まだまだエラーだらけ・・・。

    著:山田祥寛
    ¥1,870 (2025/06/26 14:04時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/06/26 14:04時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/06/26 14:04時点 | Amazon調べ)
  • シャープNetWalkerが出るよ、という話し

    シャープからNetWalkerというモバイル端末(何て言うのでしょうか?)が出るようです。欲しいと言われれば欲しいかもしれないし、いらないねと思えばいらないし・・・。どっちなんだとつっこまれるような製品です。

    中身はUbuntuのLinux PC。ソフトはがんばればいろいろとインストールできそう。CPUはFreescaleのi.MX515。これは、ソースからコンパイルする必要があるのでしょうか? ブラウザはFirefoxだし、メールはThunderbird、しかもOpenOfficeが入っているので、ある程度はこれで済みますが、ネットブックの代わりにしようとすると、いろいろソフトを入れたくなりそうです。

    無線LANは付いていますが、モバイル系の通信手段は何が対応しているのでしょうか? USB経由で各社のモジュールを接続するようなことをかいていますが。

    私の場合、Sharpのザウルス, W-ZERO3とかカシオのWindowsCEの端末とかPDAをいろいろ買いましたが、使いこなせないまま終わっています。今回も同じようなことになりそうだから躊躇していますが、GmailとかTwitterとかネットワークのサービスが充実してきて、外での活用が広がってきていますので迷うところです。

  • Google Readerで項目移動ボタン

    最近、ブログはサボり気味です。理由は、仕事に集中しているため。仕事に煮詰まったり、気がなくなったりとしたときは、ブログを書いているということ。なので、ブログのカレンダーの埋まり具合で、自分の気のありととか無さがわかります。

    さて、以前から気になるサイトの更新情報は、RSSでGoogle Readerで読むようにしてします。どうも記事を斜め読みするときに、いちいちタイトルをクリックしなければいけないので、めんどくさいなと思っていました。しかし、今日Google Readerの画面を見ると、下の方に「Previaou item」「Next item」という便利なボタンがあるのを知りました。これのボタンを押せば簡単に、記事を移動できるのですね。これで、記事を読むのが5倍速くなりました(おおげさ・・)。

    まだまだ、知らないことばかり・・・。

    Google Readerの問題としては、サイトによっては画像が見えないこと。これは相手のサイトの問題でどうしようがないのでしょうか?