ブログ・エス技研

当ブログは引越しをしました。10秒後に自動で転送しますが、転送されない場合は、http://blog.s-giken.net/ をご覧ください。
ブログ・エス技研 TOP  >  2013年09月

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --年--月--日 --:-- ] カテゴリ:スポンサー広告 | TB(-) | CM(-)

baserCMSをほかのサーバ、環境にコピーする場合

今日は、baserCMSの環境をほかのサーバ、他の環境にコピーする場合の手順です。

baserCMSが設置してあるフォルダのファイルを一式取得します。

続いて、baserCMSに関連するテーブルとデータを一式バックアップを取ります。(phpMyAdminでエクスポートしてもいいですし、SQLコマンドでダンプを取っても構いません。)

そして、取得したファイル一式を新しい環境に設置し、バックアップを取ったデータベースのデータを設置します。

そして、下記の通り、環境の違いを吸収するための設定を変更します。

/app/config/database.php
 Databaseへの接続情報を変更します。
  DB接続情報は 2つ記述があるが、本体プログラムとプラグインがそれぞれ使うテーブルの設定のため、両方の設定を変更します。

/app/config/install.php
 5行目の下記の「BcEnv.siteUrl」の値を変更します。
 Configure::write('BcEnv.siteUrl', 'http://localhost/xxxxxx/');


また、「スマートURL」オンにしている場合は、下記の手動設定の方法を読みながら、
http://basercms.net/manuals/2/introductions/6.html

/.htaccess
/app/webroot/.htaccess
/app/config/install.php

の設定を行います。

スマートURLの設定情報は、DBに保存されておらず、上記 2か所の「.htaccess」、「install.php」に情報が記載されているだけですので、設定をするのが面倒であれば、一度設定を削除したうえで管理画面から設定変更の実行をする方が安全かもしれません。

その場合の管理画面の URLは、下記の様になります。
 http://localhost/xxxxxx/index.php/admin/users/login


この説明を読んでいただいてもよく分かる通り、baserCMSにおいて環境の設定情報は数か所にしかなく、そこさえ変更すれば簡単に違う環境に移すことが可能です。

ロリポップで baserCMSを利用する際の Basic認証の設置には注意しましょう
 http://ssgiken.blog.fc2.com/blog-entry-45.html

baserCMSで開発環境と公開環境でドメイン、フォルダが変わる場合の不具合
 http://ssgiken.blog.fc2.com/blog-entry-46.html
スポンサーサイト
[ 2013年09月29日 11:53 ] カテゴリ:baserCMS | TB(0) | CM(0)

baserCMSで開発環境と公開環境でドメイン、フォルダが変わる場合の不具合

Webサイトを構築する際、本番環境をそのまま使って開発、設置を行っていく場合は非常に少ないと思います。
開発環境で開発を行い、それを本番環境に移動させるのか、もしくは、開発環境にドメインを当ててそこを本番環境に切り替えるのか。

そのような対応を行う場合、baserCMSの管理画面からの対応だけではエラーになってしまいます。
「500 - Internal Server Error」が表示されて動かなくなります。

私もこの不具合の理由が分からず、丸 1日費やしてしまいました。


私が陥った状況は、下記のような環境でした。
開発中のフォルダはドメインが当たっておらず、レンタルサーバの共有ドメイン(ここでは「kyouyuu.com」とします)を利用してアクセスしていました。

 共有ドメインでのドキュメントルート
 /        ←http://kyouyuu.com/ でアクセス

 現在公開中のフォルダ
 /honban_com/  ←http://honban.com でアクセス

 開発中のフォルダ
 /test_com/   ←http://kyouyuu.com/test_com/ でアクセス

そして、開発中の環境で構築が完了したので、まず、baserCMSの管理画面の「システム設定」-「サイト基本設定」の「WebサイトURL」を「http://honban.com」に変更しました。
そして、サーバの管理画面から「http://honban.com」でアクセスした際に「/test_com/」のフォルダをドキュメントルートとして読みに行くように設定を変更しました。
すると、「500 - Internal Server Error」が表示されて動かなくなったのです。


サーバのファイルをバックアップし、ゼロからインストールし直してみて、ファイルの差分を確認してみたり、DBを差し替えてみたりしましたが、なかなかうまくいきませんでした。
逆に、表示が崩れていったり、データが歯抜けになったりして、全くうまくいきませんでした。

ですが、そんな試行錯誤をしている中で、「.htaccess」で処理を制御していたことを思い出したのです。

そして、「RewriteBase」の項目をそれぞれ下記の通り変更すると無事に動き出したのです。

------------/.htaccess
RewriteEngine on
RewriteBase /
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
------------


------------/app/webroot/.htaccess
RewriteEngine on
RewriteBase /app/webroot
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
------------

この「.htaccess」は、インストールのタイミングで作成されるのですが、その後は、管理画面から設定を変更してもそれが反映されない、ということなのでしょう。

この設定が反映されない、という不具合は、もしかしたらサーバに由来するものかもしれません。
もしかしたら、運営しているサーバはロリポップサーバなのですが、先日の WordPressを発端とする大規模ハッキングの影響で何かしら設定が変更されているのかもしれません。

ただ、他のサーバでもサーバの設定によって「.htaccess」が更新されない場合があるのであれば、今回の私のハマった不具合は参考になるのではないかと思っています。


ロリポップで baserCMSを利用する際の Basic認証の設置には注意しましょう
 http://ssgiken.blog.fc2.com/blog-entry-45.html

baserCMSをほかのサーバ、環境にコピーする場合
 http://ssgiken.blog.fc2.com/blog-entry-47.html
[ 2013年09月29日 11:46 ] カテゴリ:baserCMS | TB(0) | CM(0)

ロリポップで baserCMSを利用する際の Basic認証の設置には注意しましょう

私は、baserCMSをロリポップサーバで運用しているのですが、baserCMSを利用しているディレクトリに対して、ロリポップサーバのコントロールパネルから Basic認証の削除を行うと、「.htaccess」が削除されて baserCMSが動かなくなりますので注意しましょう。

同じように、レンタルサーバを利用している方の場合、最近はコントロールパネルがついていないレンタルサーバはおおよそないわけですが、その場合はサーバの設定やアクセス制限等といった対応はコントロールパネルから行う方がほとんどだと思います。

その場合、Basic認証の設定を行う場合のファイルの処理方法を確認しておく方がいいでしょう。


特に、ロリポップサーバの場合は、baserCMSは「簡単インストール」対象の CMSとして認定されていることもあり、今後利用者が増えていくものと思われます。


ですが!!!
インストールする前にこの文章を読んでくださいっ!

ロリポップサーバでは、管理画面で Basic認証を設定すると「.htaceess」をまるっと上書きしてしまいます。
もしくは、Basic認証を削除すると「.htaceess」をまるっと削除してしまいます。
そうなると、baserCMSは動かなくなってしまいますので注意が必要ですっ!!

※注意:管理画面の「システム管理」で設定する「スマートURL」を「オン」にしている場合のみ不具合が発生します。「オフ」にしている場合は「.htaccess」は関係ありませんので不具合は起こりません。


対応方法は、以下の通り。
・baserCMSをインストールする階層を一つ深くすること。
・Basic認証を設定するのは baserCMSがインストールされている階層の一つ上の階層に設定すること。


例えば、ロリポップのドキュメントルートに直置きする場合下記の様になります。
 /       ドキュメントルート
 /.htaceess  baserCMSの設定「.htaccess」
 /app/     baserCMSのフォルダ
 /baser/    baserCMSのフォルダ
 /cake/    baserCMSのフォルダ

ロリポップの割り当てられたドメインをそのまま利用するのであれば、ドキュメントルートに直置きすることになると思いますが、この場合は対応できません!(この場合も階層を深くし、フォルダを含めてアクセスしてもらう必要があります。)

ですが、オリジナルのドメインを当てる場合は、下記の様にドメインごとにフォルダを分けると思います。

 /aaa_com/       ドキュメントルート
 /aaa_com/.htaceess  baserCMSの設定「.htaccess」
 /aaa_com/app     baserCMSのフォルダ
 /aaa_com/baser    baserCMSのフォルダ
 /aaa_com/cake     baserCMSのフォルダ

この場合も全体のドキュメントルートに Basic認証を当てるならば問題ありませんが、それではサーバ全体に Basic認証が設定されます。
そのため、下記の様にさらにフォルダの階層をもう一つ追加し、Basic認証用の「.htaccess」を置く場所を確保します。

 /aaa_com/.htaccess     Basic認証用の「.htaccess」
 /aaa_com/docs/       ドキュメントルート
 /aaa_com/docs/.htaceess  baserCMSの設定「.htaccess」
 /aaa_com/docs/app     baserCMSのフォルダ
 /aaa_com/docs/baser    baserCMSのフォルダ
 /aaa_com/docs/cake     baserCMSのフォルダ

こうすることで Basic認証用の「.htaccess」と baserCMSが使う「.htaccess」がぶつからずにすみ、コントロールパネルから Basic認証の設定をしても baserCMSに影響を及ぼさなくなります。

この場合、オリジナルのドメインのドキュメントルートは「/aaa_com/docs/」になります。
その一つ上位階層に Basic認証の設定がされていますが、ドメインでアクセスした場合も Basic認証は有効に働きますのでご安心ください。


※フォルダ名を「aaa.com」とせずに「aaa_com」とする理由は、ロリポップの管理画面から Basic認証を設定する場合、「.」が入っているフォルダには設定することができません。
そのため、ドメインそのものをフォルダ名にしたい場合も「.」を使わずに替わりに「_」を入れるようにしています。


また、そのほか、ドメイン変更や、フォルダ等の移動に際しての設定にヒントについては、下記のページも書いていますのであわせて参考にしていただければ、と思います。

baserCMSで開発環境と公開環境でドメイン、フォルダが変わる場合の不具合
 http://ssgiken.blog.fc2.com/blog-entry-46.html

baserCMSをほかのサーバ、環境にコピーする場合
 http://ssgiken.blog.fc2.com/blog-entry-47.html
[ 2013年09月24日 11:31 ] カテゴリ:baserCMS | TB(0) | CM(0)

XAMPPの Apacheが起動しなくなった場合の対処方法

XAMPPを使っていると、Apacheが起動しなくなることがままあります。

よくある話としては、Skypeが 80番ポートを使うため、それとポートがダブるために起動しなくなる、という感じで、起動しなくなる理由として一番多いのがポートのダブりだと思われます。

特に、昨日まで起動していたのに、今日はエラーが出て起動しなくなった!という場合は、新しくインストールしたアプリとポート番号がダブってしまっていることが原因と思われます。

ポートだブリかどうかを調べる方法としては、下記のサイトが参考になります。Apacheのつづりは間違えているようですが...
 http://nuru.me/blogs/2009/04/xamppapach.php


ただ、上記のサイトでは、ダブっているサービスを止めましょう、Skypeを止めましょう、ということが書かれていますが、業務で Skypeを使っている場合などは止めろと言われても止められないという場合は大いにあるでしょう。

そもそも、あるサービスを使うのにほかのサービスを止めましょう、という発想はあまりよろしくないでしょうね。
やはり、XAMPPのポート番号を変更して使いましょう。という方が一般的かと思います。

というわけで、XAMPPのポート番号の変更方法です。


まず、「httpd.conf」です。

ファイルの場所は、C:\xampp\apache\conf\httpd.conf ですが、XAMPPのコントロールパネルの「Config」から選択できます。(「C:\xampp」に XAMPPをインストールしている場合。)

そして、「80」などで検索すればポート番号の設定箇所が見つかりますので、他とぶつからなさそうなポート番号を設定しましょう。
私の場合は、httpの「80」は「8080」に変更しました。

#Listen 0.0.0.0:80
#Listen [::]:80
#Listen 88
Listen 8080


#ServerName localhost:80
ServerName localhost:8080


また、80番のポート番号がダブっているだけであっても、SSLの 443のポート番号も変更しないと起動できませんので、続いて「httpd-ssl.conf」の 443番のポートも変更します。
パスは、C:\xampp\apache\conf\extra\httpd-ssl.confですが、こちらもコンパネから選択できます。

下記の「443」の部分を「44380」に変更しました。

#Listen 0.0.0.0:443
#Listen [::]:443
#Listen 443
Listen 44380

そして、Apacheの起動をし直せば起動するようになるでしょう。


で、公開側のサイトのアクセス方法は、ポート番号をデフォルトのものから変更しましたので、今後は変更したポート番号を指定してアクセスする必要が出てきます。

変更前
 http://localhost/
  ↓
変更後
 http://localhost:8080/
[ 2013年09月17日 11:24 ] カテゴリ:システム開発関連技術 | TB(0) | CM(0)

ロリポップで非常に大きなハッキング騒動がありました。

08月29日、ロリポップで非常に大きなハッキング騒動がありました。

下記は、その経緯とその過程をまとめたサイト。
 http://webshufu.com/wordpress-krad-xin-hacked-many-japanese-sites/


記事にも書かれていますが、最初は、WordPressの個別プラグイン、テーマの脆弱性を狙ったもの、とアナウンスしていましたが、結局はサーバ側の設定ミスが原因の大規模なハッキングでした、と訂正されましたね。

このブログは FC2ブログですので全く無関係ですが、個人的にロリポップサーバを借りていることもあり、そちらでは直接的な被害がありました。
(問題の震源地となった WordPressもインストールしていましたが、WordPressの実験環境だということもあり、まるっと削除しても問題ない環境でしたが、そちらは特に大きな問題はありませんでしたね。)


ロリポップサーバで運用しているのは、個人的な Webサイト。
そして、間の悪いことに、前の週からちょうどそのサイトをリニューアルの作業をしていたのです。
...いや、間がよかったと思いたい。その個人的な Webサイトは、自分で見る必要性はないため、実際に自分で見る機会はほとんどなく、リニューアルの作業をしていなかったらいまだに気づいていなかったかもしれないのですからね。


8月31日朝。
土曜日で会社が休みだったので、前週の続きの作業をしようとしたのですが、

導入していた CMSのログイン画面からアクセスできない。
「パスワードを忘れた方はこちら」からパスワードを送信しようとしてもエラーが発生する。

さらに、
そこで、ID、PASSを確認するために、phpMyAdminから DBにアクセスしようとするも ID、PASSが違うといわれる。
ロリポップの管理画面から phpMyAdminにアクセスしようとすると、なんと!パスワードが違うものになっているっ!!!

このとき
  これはまずい!!
  ハッキングされた?!
瞬間的にそう思いました。

そして、問合せをしようとロリポップのサポートページに移動すると....WordPressが大量にハッキングされているため、DBのパスワードを変更させていただきました、とのアナウンスが!

少しホッとすると同時に、なんだか面倒なことになったなぁ、と思わずにいられませんでした。


そして、ロリポップのアナウンスでは、すべてのユーザの DBのパスワードを勝手に変更したと書いてあり、また、同様に WordPressの設定ファイルのパスワードも勝手に変更しました、と書かれていました。
ですが、それ以外のものについては一切触れず、その他はユーザが個別に対応していくしかありませんでした。

私が作業をしていた個人用の Webサイトは、baserCMSという CMSを使って構築をしていましたが、もちろん、この CMSの DB接続のためのパスワードの設定は変更されていなかったわけです。
そして、なぜか DB接続のためのパスワードを変更してもうまく動作せず、これは、ロリポップが DBのパスワードを変更してしまったことによることなのか、baserCMSに何らかの不具合があったのかはわかりませんが、結局原因分からず再設定を余儀なくされました。(全ファイルを削除し、baserCMSのインストールからやり直し...)

その後も、これは baserCMSの問題と、私の作業ミスもあってのことですが、4回、5回とインストールを繰り返し、結局復旧までに丸一日を費やす結果となってしまいました。


そのほか、オリジナルのプログラムも作って公開していましたので、そちらも動かなくなっていまして、被害甚大でした。
緊急避難的措置とはいえ、DBのパスワードを変更するとは思い切ったことをやったものだ、と思いましたね。

私の場合はそのサイトは趣味で公開しているものですので、特に個人的な対応の面倒くささだけですが、業務で何かしら使っているサイトが乗っていた場合は、直接的な対応コストだけでなく、Webサイトが動かなかったことによる機会損失まで考えるとかなーり痛手を被ったところもあろうことは想像に難くありませんね。

ちなみに、オリジナルのプログラムを公開している部分は、エラーメッセージが出ているのだけは確認しましたが....さすがに疲れてその日は放置することとなりました。

そちらはそちらでトラブルがありましたので、また別途ご報告します。



ちなみに、ロリポップサーバは、GMO系列ということもありまして使っています。

別にロリポップサーバのサービスが好きとか、GMOが好きというわけではなく...まぁ、GMOは大きなサーバ事業会社ということもあり、業務がらみでこれまで多くの取引もしてきましたし、転職の際には GMOを受けて落ちたりもしましたし、他には友達が結婚する際には諸事情あって GMOのあの社長が主賓として列席していたりもしまして、GMOのことはよく存じておりますが...実際のところは単に、GMOインターネットの株を持っていると株主優待が受けられて、全くコストをかけずにドメイン付でサーバが運営できるために利用しているわけです。
当時 1株 295円。単位株数が 100株でしたので 30,000円弱ほどの投資でサーバ運用コストがゼロになるのは魅力でしたからね。
その後、現在の株価は 1,000円くらいになっており、キャピタルゲインも投資額の 3倍近くにもなっていますので、いいタイミングで買えたのかなぁ、と思いつつも、優待目的なので売る理由もないので、今の株価が高かろうが安かろうが関係ないわけですが。
[ 2013年09月14日 23:32 ] カテゴリ:システム開発関連技術 | TB(0) | CM(0)

CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索

今回は、「'type' => 'query'」を使い、オリジナルの検索条件を記述して検索する方法を行います。
今回の処理は、その2(http://ssgiken.blog.fc2.com/blog-entry-31.html)をベースにしていますので、そちらもご覧ください。


本当は、「Group By句」による集計の処理をやろうかと思っていましたが、Group By + sumによる集計は、集計した項目をバーチャルフィールド(virtual fields)を使って値を取得する必要があるため(バーチャルフィールドを使わなくても値を取得できないわけではないですが)、長くなりそうなので、「'type' => 'query'」の方を先にやってみたいと思います。


「'type' => 'query'」を使うと、検索の条件を柔軟性を持って設定することができるため、もともと用意されている検索方法以外の検索方法を行いたい、と思った場合に利用できる方法です。

具体的な検索方法を考える際にあれこれ悩みましたが、あまりいいサンプルを思いつかず、今回の記事は、下記のサイトを参考にさせていただきました。
http://kamakurasoft.net/blog/?p=1479


まずは、Viewから。
Viewの Elementsに下記の項目を追加してください。

--------------(/app/View/Elements/searchForm.ctp)
    :
    :
    <dt><label>日付</label></dt>  
    <dd><?php echo $this->Form->input('start',array(
        'type'=>'date', 'dateFormat'=>'YMD', 'timeFormat'=>'NONE', 'monthNames'=>'false',
//        'label'=>'開始年月日(年-月-日)',
        'label'=>'',
        'minYear'=>2010, 'maxYear'=>date('Y') + 5,
        'selected'=>array('year'=>date('Y')-1,'month'=>date('m'),'day'=>date('d')), /*1年前*/ )) ?></dd>
    :
    :
--------------

「'label'=>'開始年月日(年-月-日)',」をコメントにしていますが、labelの設定があると入力エリアのすぐ上にラベル表示がされるためにコメントにしています。
ちなみに、labelの設定がない場合は、デフォルトの設定として項目名の「start」がラベル名として表示されます。そのため、labelを消すためには「'label'=>'',」の設定が必要なようです。


続けて、Modelです。
サンプルは開始日と終了日での設定がしてありますが、ここでは面倒なので開始日しか設定していません。

日付の項目に関して、今回の日付項目は、「start」という項目名で設定しています。その中から、日付の「年」の項目は「$data['start']['year']」として取得します。同じように「月」「日」は、「$data['start']['month']」「$data['start']['day']」として取得します。

私は、最初のうちはこのことがよく分からず、日付の項目の項目名は一つなのに、年月日のそれぞれの項目はどうやって取得したらいいのだろう、としばーらく悩んでいました。
分かってしまえば意外に簡単ではあるんですが...

--------------(/app/Model/User.php)
<?php
class User extends AppModel {
    :
    :
  // 検索対象のフィルタ設定
  public $filterArgs = array(
    array('name' => 'id',       'type' => 'value', 'field' => 'User.id'),
    array('name' => 'username', 'type' => 'like',  'field' => 'User.username'),
    array('name' => 'nickname', 'type' => 'like',  'field' => 'Profile.nickname'),
    array('name' => 'start',    'type' => 'query', 'method'=>'createSql'),
  );

  public function createSql ( $data = array () ) {
    $start = $data['start']['year'] . '-' . $data['start']['month'] . '-' . $data['start']['day'];
    $condition = array ( 'DATE(User.created) >= DATE(?)' => array($start) );
    return $condition;
  }
    :
    :
}
--------------


また、入力の値を再び設定する処理で、下記のように設定してみましたがうまくいかず、デフォルトの設定に戻ってしまいます。
こちらの設定方法については後日分かり次第改めて対応したいと思います。

--------------(/app/Model/User.php)
<?php
class User extends AppModel {
    :
    :
  // 検索対象のフィールド設定
  public $presetVars = array(
    :
    :
    array('field' => 'start',    'type' => 'date'),
  );
    :
    :
}
--------------

どなたかわかる方、教えてくださいっ!!


【CakePHP2.3 Search Plugin検索処理 目次】
CakePHP2.3 Search Pluginで検索処理 その1設置方法
CakePHP2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHP2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHP2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHP2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHP2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHP2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
[ 2013年09月09日 01:10 ] カテゴリ:CakePHP 2.x | TB(0) | CM(0)

baserCMSでサイトの構築をしてみることにしました

CMSの構築依頼があり、CMSの構築をすることになりました。

しかし、CMSに関しては、すでに多くのシステムが提供されており、いまさらそこに向かって新規でシステムを構築することは効率的ではない、という判断に至りました。

これまで社内での実績として WordPressは使っており、そこそこ実績もあったために WordPressでもよかったのですが、社内で対応出来るものが WordPress一択と言うより、やはり複数の選択肢を持っておくべきじゃないか、と言うことで別の CMSを試してみることにしたためです。


そして、選ばれた CMSが「baserCMS」です。
 http://basercms.net/

これを選んだ理由は、
 ・言語が PHP。また、フレームワークに CakePHPを採用していること。
 ・現在も開発が続いていること。
 ・採用実績が相応にあること。
 ・コーポレートサイトにちょうどいい、との触れ込みであること
 ・国産の CMSであること
などがそれです。

特に、CakePHPを採用していることが大きかったですね。
社内で注力している技術が CakePHPであることもあり、社内で機能拡張、メンテナンスをする際に対応できるエンジニアが多いことも安心材料になりました。
最悪開発元の開発が中断したとしても、自社で開発を続けていくことも可能になるからです。


話を戻しますが、WordPress一択でも十分な機能がありますので、それを使い倒すことでも何ら問題ないレベルではありますが、baserCMSが CakePHPで作られていたために、それを使い倒してみることで、今後自社でのシステム開発の参考になるのではないか、と言う思惑もありました。


というわけで、まずは baserCMSをインストールするわけですが、レンタルサーバなどに設置する場合は問題ありませんが、XAMPPなどを使ってローカル環境の設置をする場合、ローカル環境からメールの送信処理ができるようになっていないと、最後の管理者登録のところでエラーになって登録できませんのでご注意ください。

そんな場合は、まずは、「ローカル環境の XAMPPからメールを送信できるように設定する(ローカル環境の XAMPPからメールを送信できるように設定する)」を参考にしていただいて、ローカル環境からメール送信ができるように設定してください。


それ以外は、たぶん、画面に従って手続きを進めれば、問題なく登録できると思います。


おまけ
この baserCMSは、福岡の方が開発をされ、現在も福岡を中心に開発が進んでいるそうです。
私は福岡出身ですので、応援したいな、という気持ちもあったのは事実ですね。
[ 2013年09月05日 22:44 ] カテゴリ:baserCMS | TB(0) | CM(0)

CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能

今回は、検索をする際に、あらかじめソートキーを選択できるようにする処理を作っていきます。


ソートキー(ORDER BY)の設定は、その2(http://ssgiken.blog.fc2.com/blog-entry-31.html)の「limit」の設定ができさえすれば簡単に分かると思います。
また、今回の処理は、その2をベースにしていますので、そちらもご覧ください。


なぜなら、タイトルをクリックしてソートをさせた際に表示される URLを見れば「sort:User.username/direction:asc」表示されていますので、「sort」「direction」という項目名でソートをさせる項目を設定している、ということがなんとなく分かるでしょう。


まず、入力フォームです。
「表示件数」の次あたりに追加してもらえればいいと思います。
今回は、動作を検証するためのものですので、text形式で作っていますが、実際に運用する際には、プルダウンの選択式にする必要があるでしょうね。

--------------(/app/View/Elements/searchForm.ctp)
    :
    :
    <dt><label>ソート条件・キー</label></dt>  
    <dd><?php echo $this->Form->input('sort', array(  
      'type' => 'text', 'div' => false, 'label' => false ))?></dd>  
    <dt><label>ソート条件・降順昇順</label></dt>  
    <dd><?php echo $this->Form->input('direction', array(  
      'type' => 'text', 'div' => false, 'label' => false ))?></dd>  
    :
    :
--------------

続いて Modelを修正します。
こちらも「array('field' => 'sort', 'type' => 'value'),」を追加するだけです。
細かな説明は、その2の方を見てもらえると分かりやすいかと思います。

--------------(/app/Model/User.php)
<?php
class User extends AppModel {
    :
    :
  // 検索対象のフィールド設定
  public $presetVars = array(
    array('field' => 'id',        'type' => 'value'),
    array('field' => 'username',  'type' => 'value'),
    array('field' => 'nickname',  'type' => 'value'),
    array('field' => 'limit',     'type' => 'value'),
    array('field' => 'sort',      'type' => 'value'),
    array('field' => 'direction', 'type' => 'value'),
  );
    :
    :
}
--------------

また、デフォルトでソートキーを設定したい場合は、Controllerに「'order' => array ( 'User.username' => 'desc', 'User.id' => 'desc' ),」の設定を追加しておきます。
limitの時と同じく、ここで設定してあってもソートキーの入力があった場合はそちらが優先されます。


--------------(/app/Controller/UsersController.php)
<?php
class UsersController extends AppController {  
    :
    :
    $this->paginate = array(
      'conditions' => $conditions,
      'order' => array ( 'User.username' => 'desc', 'User.id' => 'desc' ),
      'limit' => 3,
    );
    :
    :
}
--------------


【CakePHP2.3 Search Plugin検索処理 目次】
CakePHP2.3 Search Pluginで検索処理 その1設置方法
CakePHP2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHP2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHP2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHP2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHP2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHP2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
[ 2013年09月02日 01:02 ] カテゴリ:CakePHP 2.x | TB(0) | CM(0)
プロフィール

エス技研

Author:エス技研
性別:男性
職業:Web系エンジニア
エンジニアになって 15年ほど経ちますが、その途中で 5年ほどディレクタ、マネジメントを中心とした業務を行っていたためにやや現場を離れていましたが、転職をきっかけに 2012年に現場に復帰し、新たな技術を楽しみながら勉強しています。
メインの環境は LAMP環境です。

FC2ブログランキング
FC2カウンター
FC2拍手ランキング
GoogleAdWords
カレンダー
08 | 2013/09 | 10
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -
検索フォーム
ブロとも申請フォーム
QRコード
QR
フリーエリア


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。