タグ

ブックマーク / kwski.net (32)

  • recursive設定によるfind()性能改善

    CakePHPでは、モデルにアソシエーションを設定している場合、recursive(=>joinする階層)はデフォルトで0に設定されています。「recursiveゼロ」の意味するところとは、「1跨ぎまでのJoinを行う」ということになり、Find()関数を使用した場合、デフォルトの状態でJoinが行われてしまいます。テーブル単体でfindしたい場合などは、find()の前に$recursive = -1とすることで余計なjoin処理を省略することができます。join先のテーブルのレコード数が多い場合などは効果絶大。 例 「User」とそれに紐付く「Usercomment」モデルを用意しました。 -- usersテーブル CREATE TABLE IF NOT EXISTS `users` ( `id` INT NOT NULL AUTO_INCREMENT , `username` VAR

    recursive設定によるfind()性能改善
  • selectボックスを実装

    今まで、selectボックスのgroupを作成するのにSet::Combineを使用していましたが、意外と簡単にできることに気付いてしまったので、ご紹介。(自分だけ知らなかったことに気付いた と言ったほうが近い。) デモ(データ配列なども) モデルは、散々出尽くしているかもしれませんが、以下 CREATE TABLE IF NOT EXISTS `prefectures` ( `id` INT NOT NULL AUTO_INCREMENT, -- id `prefecture` VARCHAR(8) NOT NULL, -- 都道府県 `area` VARCHAR(8) NOT NULL, -- 地方 PRIMARY KEY (`id`) ) 単一選択のselectボックス 一般的なセレクトボックス。中から1つを選ぶものです。 find('list')でfieldsに対して2項目設定しま

    selectボックスを実装
  • 投稿タイトル(entry-title)を非表示にする

    表題通り「投稿タイトルを表示しない」ことは、"投稿ページ"ではあまりないと思いますが、"固定ページ"では意外とあったりします。 編集画面でTitleを入力しないでおけば、それで済むのですが、ページの記事タイトル(entry-title)を非表示にしたいというときに以下使えると思います。 CSSで非表示 それぞれのcssクラス設定は、以下を条件としています。なので、テーマによっては、固定ページ・投稿ページ・個別記事と特定方法を探し出す必要があります。 投稿タイトルのclassは「entry-title」 投稿全体部分にpost_class()でclassを出力 例: <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> 固定ページでは.page、投稿ページでは.post、個別ページではpost-[id]となります。 sty

    投稿タイトル(entry-title)を非表示にする
  • コメント欄停止・コメント削除

    WordPressでは標準でコメント機能が付いてきます。この投稿ではコメント機能の停止や既に投稿されたコメントを削除する方法を紹介します。 設定による停止方法 新規の投稿に関してコメントを停止する 管理画面より「設定」→「ディスカッション」とすすみ、"新しい投稿へのコメントを許可する"のチェックをはずす。 これで、これから投稿するページのコメントは停止されますが、説明("これらの設定は各投稿の設定が優先されます。")にあるように、既に投稿しているページのコメントは有効です。 既存の投稿に関してコメントを停止する 管理画面より「投稿」→「投稿一覧」とすすみ、そのページの投稿画面へすすんで下さい。右上の「表示オプション」を開き、"ディスカッション"と"コメント"にチェックを入れると要素が追加されるので、"コメントの投稿を許可する。"のチェックをはずして下さい。 これでその投稿に対するコメントは

    コメント欄停止・コメント削除
  • カレンダー実装プラグイン「Bootstrap Calendar」

    Bootstrap Calendar」はBootstrap 3ベースでカレンダーが実装できるjQueryプラグインです。 ダウンロード スクリプト <link href="bootstrap.css" type="text/css" rel="stylesheet"> <!-- Bootstrap 3 --> <link href="css/calendar.css" type="text/css" rel="stylesheet"> <script src="underscore-min.js" type="text/javascript"></script> <script src="js/calendar.js" type="text/javascript"></script> <script src="bootstrap.js" type="text/javascript"></

    カレンダー実装プラグイン「Bootstrap Calendar」
  • Js/Cssファイルの読み込みや出力する方法

    CakePHPHTMLヘルパーにはjsファイルやcssファイルを読み込むためのメソッドが用意されています。ファイルを読み込むのに加えて、出力先を複数指定できるようになっています。 また、インラインに出力する関数も用意されており、動的に出力する際にも便利なようにつくられているようです。 javascriptファイルの読み込み javascriptファイルの読み込みを行うには以下のようにHtmlヘルパーのscriptにパスを指定します。 echo $this->Html->script( 'jsファイル(パス)'); // パスに//が含まれている場合は、CDNから取得される。 echo $this->Html->script( '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'); // App.jsBaseUrl(J

    Js/Cssファイルの読み込みや出力する方法
  • 複数ファイルアップロードフォーム

    CakePHP 2.0からはHTML5が標準でサポートとなり、複数ファイルアップロードのためのフォーム記述が容易になりました。 View (ビュー) <?php echo $this->Form->create( 'Upload', array( 'type'=>'file', 'url' => '/uploadmulti', 'enctype' => 'multipart/form-data')); echo $this->Form->input( 'files.', array( 'type' => 'file', 'multiple')); echo $this->Form->submit( 'upload'); echo $this->Form->end(); ?> 配列 Array ( [files] => Array ( [0] => Array ( [name] => bg-

    複数ファイルアップロードフォーム
  • テキストから自動的にリンクを付与「autoLink」と除去「stripLinks」

    Textヘルパーには、テキスト処理に関する便利な機能があります。ユーザによる投稿などを表示する際に、URLが貼り付けられている場合に自動的にリンクを付けてくれるautoLinkや、逆に、リンクが貼られている場合にそれを除去してくれるstripLinksがあります。デモ 対象のテキスト内からURLもしくはメールアドレスを抽出してリンクを付与します。 URLのプロトコルは、https, http, ftp, nntpが対象。 自動的にエスケープされる。エスケープさせない場合は、オプションに'escape' => falseを指定。 メールアドレスのみを対象とする場合は、autoLinkEmailsを。URLのみの場合は、autoLinkUrlsを使用して下さい。 <?php $my_text = 'Contact Form http://kwski.net/contact/'; echo $t

    テキストから自動的にリンクを付与「autoLink」と除去「stripLinks」
  • シンプルに設置できる数字Captcha「MathCaptcha」

    スパム防止などで利用されているCaptchaですが、数字版で使えるものがないか探してみました。この「MathCapthca」は非常にシンプルに設置できます。 ダウンロードはこちらから。 MathCaptcha Component for CakePHP 2. 解凍したCaptchaComponent.phpをコンポーネントディレクトリに配置して下さい。 app/Controller/Component/CaptchaComponent.php Controller var $components = array('MathCaptcha'); // captcha表示 function mathcaptcha(){ $this->set('mathCaptcha', $this->MathCaptcha->generateEquation()); } // captchaチェック func

    シンプルに設置できる数字Captcha「MathCaptcha」
  • Captchaプラグイン「Captcha Component & Helper」

    Captchaプラグインを実装してみました。 ダウンロードはこちら 解凍して、このようになるようにそのままappディレクトリ下に置いてください。 app/Controller/Component/CaptchaComponent.php app/View/Helper/AppHelper.php app/View/Helper/CaptchaHelper.php app/webroot/cakecaptcha (webrootに関してはインストール環境によると思いますので読み替えてください。) コントローラ (Controllers) public $components=array( 'Security', 'Captcha', ); public $helpers=array( 'Captcha'); public function captcha() { $this->Captcha

    Captchaプラグイン「Captcha Component & Helper」
  • テキストボックスの入力値を数値限定にしてくれる「jQuery - numeric」

    「jQuery - numeric」は、テキストボックスへの入力を数字のみに制限してくれるjQueryプラグインです。正/負、整数/小数点 チェックまで限定してくれます。ダウンロード スクリプト <script src="jquery.min.js" type="text/javascript"></script> <script src="jquery.numeric.js" type="text/javascript"></script> 実装 <input class="numeric antirc" type="text"> <input class="integer antirc" type="text"> <input class="positive antirc" type="text"> <input class="positive-integer antirc" type

    テキストボックスの入力値を数値限定にしてくれる「jQuery - numeric」
  • ログインに追加の条件を付与する「scope」

    ユーザ登録では、仮登録処理(status=1)から送付したメール内のリンクをクリックしてもらい登録(status=0)を行ってもらう実装をしました。仮登録の状態ではログインできないように実装するには、1.3では「userScope」を使用しました(記事)が、2.xでは「scope」に変更されているようです。 Authコンポーネントを呼び出す際に以下のように定義して下さい。 2.0から「Authenticate type」というものが追加されており、今回はフォームからpostされた認証に対して追加を行うため'Form'に追加しています。(参考) var $components = array( 'Auth' => array( 'authenticate' => array( 'Form' => array( // 認証されるには、「Userのstatusが0である必要がある」を追加する

    ログインに追加の条件を付与する「scope」
  • クリックするとテキストボックスにかわるラベルを実装

    Flickrなどでは、写真の編集画面でキャプションをラベルとして表示しておきクリックするとテキストボックスやテキストエリアに変換してくれて編集させるようなインターフェイスを実装しています。結構いいですよね~。そこで実装してみました。 スクリプト <script type="text/javascript" src="jquery.min.js"></script> <div id="div802">3.25</div> <input id="div802-edit" name="div802" style="display:none;"></input> <script type="text/javascript"> $('#div802').click(function() { $('#div802').css( 'display', 'none'); $('#div802-edit')

  • 数値系バリデーション

    CakePHP 2になっていくつか数値用バリデーションルールが追加されています。 数値用 (コア)バリデーション decimal - 十進数であること numeric - 数値であること naturalNumber - 自然数(正の整数)であること range - 数値の範囲(超え・未満)であること comparison - 大・小・一致・不一致の比較に合致すること 5つともnotEmptyとなるので、必須としない場合は'allowEmpty' => trueを追加する必要があります。 decimal 十進数であることであることを検証します。 decimal(integer $check, integer $places = null, string $regex = null) 小数点以下の桁数を限定する場合は第2引数($places)で指定します。 第3引数で正規表現を指定した場合は、

    数値系バリデーション
  • Cookieログイン

    今回は、ログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcookieメソッドのラッパー)メソッドはwriteとreadです。わかりやすい。 ログイン時に、「ログインしたまま」というチェックボックスをつけてログインしてきたユーザのクッキーをwriteして、次回そのユーザが訪問した際に、クッキーをreadして自動的にログインさせます。 Cookieコンポーネントの使用 var $components = array( 'Cookie', } 使用する際は、コントローラ内でコンポーネントを読み込んで下さい。 writeメソッド (クッキーをつくる) ログイン画面にチェックボックスを用意します。今回は、remember_meにします。以下は、Userモデルのusernameとpasswordという前提にして

    Cookieログイン
    kathew
    kathew 2016/02/20
    わかりやすいですね
  • 実装方法が選べるツールチップ用プラグイン「Smallipop」

    Smallipopは、ツールチップの実装をマークアップベース(HTMLに書き出し)とJavascriptベース両方で行えるjQueryプラグインです。世の中この手のツールは結構片方でのみだったりします。(そうでもないかもしれないですが) ダウンロード デモ スクリプト <link href="jquery.smallipop.css" type="text/css" rel="stylesheet"> <script src="jquery.min.js" type="text/javascript"> <script src="jquery.smallipop.js" type="text/javascript"> マークアップベースで実装 a要素のtitle属性にツールチップで表示する要素を記述することで実装できます。動的に生成する場合はより容易に実現できるかと。 <a class="

    実装方法が選べるツールチップ用プラグイン「Smallipop」
  • 表示パターン豊富なスライダー「flexslider 2」

    「flexslider 2」は、シンプルに実装でき、かつカスタマイズ機能が豊富なスライダー用プラグインです。 flexslider 2 オプションや機能 サムネイルナビゲーション 複数表示のカルーセル 高さ自動調整(smoothHeight) レスポンシブ スワイプ など スクリプト <link href="flexslider.css" type="text/css" rel="stylesheet"> <script src="jquery.min.js" type="text/javascript"></script> <script src="jquery.flexslider-min.js" type="text/javascript"></script> 実装 <div class="flexslider"> <ul class="slides"> <li><img src="

    表示パターン豊富なスライダー「flexslider 2」
  • jQuery: ポップアップを実装できる「PopBox」 | Think deeply, Do less, More effective

    「PopBox」は、シンプルにポップアップを実装できるjQueryプラグインです。 スクリプト <link href="css/popbox.css" type="text/css" rel="stylesheet"> <script src="js/jquery.min.js" type="text/javascript"></script> <script src="js/popbox.js" type="text/javascript"></script> HTML <div class='popbox'> <a class='open' href='#'>Click Here!</a> <div class='collapse'> <!-- ポップアップ全体 --> <div class='box'> <!-- ポップアップ --> <div class='arrow'></div

  • ハッシュ関数の選択とハッシュ化処理

    CakePHPでは、ログイン時にはpasswordを自動的にハッシュ化して認証を行ってくれますが、そのパスワードを登録する際は、明示的にハッシュ化する必要があります。 ハッシュ関数はデフォルトではSHA-1が使用されます。変更する場合は、Security::setHash($hash)を使用して(AppController.php内で)定義することができます。 ソース:/lib/Cake/Utility/Security.php // /app/Controller/AppController.php public function beforeFilter(){ Security::setHash( 'sha256'); } 各ハッシュ関数でハッシュ化した際の長さになります。(length固定なのでvarcharよりcharを指定したほうが処理コストが少なくなるでしょう。) 以下がCak

    ハッシュ関数の選択とハッシュ化処理
  • 独自のバリデーションルールを作成

    CakePHPで組み込みバリデーションルールをつくる方法は、正規表現を定義する方法と独自メソッドを定義する方法の2つがあるようです。 参考 Custom Validation Rules 正規表現を使用 'rule'に正規表現を直書きしてもいいようです。 正規表現はスラッシュで囲まれている必要があります。最後にiを付与すると大文字・小文字を区別しなくなります。 ここでは、「文字と数字のみで3文字以上となる値を入力」というバリデーション public $validate = array( 'code' => array( 'rule' => '/^[a-z0-9]{3,}$/i', 'message' => 'Only letters and integers, min 3 characters', 'allowEmpty' => true ), ); 「custom」ルールを使用 コアにも

    独自のバリデーションルールを作成