Blogブログ

Archives

Underscore.js Practice

bind bindAll partial memoize delay defer throttle debounce once after wrap compose bind function をobjectに束縛する。 (function() { var func = function(greeting){ return greeting + this.title }; func = _.bind(func, { title: ‘アンダースコア’ }, ‘titleは’); console.log(func()); })(); bindAll イベントハンドラとして使う予定の関数を、オブジェクトに束縛する partial 引数の部分適用を行う。関数をオブジェクトとして受け渡す時に便利。 (function() { var add = function(a, b) { return a + b; }; var already_added_25 […]

スムーズなページ遷移 pjax

最近見かける事が多くなったjquery プラグイン、またgithubで使われていることで有名な、pjaxを実装してみます。 pjaxとは、pushState + ajax を意味する造語だそう。 そしてpushStateとはHTML5で導入されたURLを操作するAPIのこと。 これを使うことで、ajaxでコンテンツを入れ替えてもページ移動が行われる→ブラウザの進む・戻るボタンが使える、PVが取れる。 さらに重複するコンテンツの読み込みがなくなるので、スムーズな遷移が実現出来て、ウェブサイトやアプリケーションなどのUX向上に繋がります。 https://github.com/defunkt/jquery-pjax 対応ブラウザは以下。 caniuse.com/#search=pushstate pushStateが実装されていない、E9以下では使えません。 まずは静的ページへ実装してみます。 静的ページ内の、#pjax-container内部のコンテンツを入れ替える想定。 サンプル Sample page jquery と、jquery.pjax.jsを読み込んでいます。 その後、mypjax.jsで実装しています。 最初は$.pjaxをコールした後にanimateするような実装だったが、コンテンツが一瞬表示されてから透過を初めてしまうケースがあったので、 animateのコールバックでpjaxするのが吉。 if ($.support.pjax) { $(document).on(‘click’, ‘a’, function(e) { e.preventDefault(); var href = $(this).attr(‘href’); $(‘#pjax-container’).animate({ opacity : 0 }, 300, function(){ $.pjax({ url: href, container : ‘#pjax-container’, fragment : ‘#pjax-container’, timeout : 2000 }); }); […]

WordPress widget カスタマイズ

WordPress widget カスタマイズ デフォルトテーマ等で、ウィジェットに特定カテゴリの記事リストを追加する。 実装の方法は、テキストウィジェットを追加して、 [get_my_posts slug=”slug名” taxonomy=”タクソノミー名”] このようにショートコードを記載するように出来ると手軽かと思う。 デフォルトでは、ウィジェット内にショートコードは記載出来ないので、 add_filter(‘widget_text’, ‘do_shortcode’); を追加する。 function.phpに以下のコードを追加。 if(!function_exists(“_get_posts_specific”)): function _get_posts_specific($atts) { /* * extractを使って配列で渡されるパラメータを変数に格納。デフォルトの値もここで設定 */ extract( shortcode_atts( array( ‘slug’ => ‘undefined’, ‘taxonomy’ => ‘category’, ‘num’ => 5, ), $atts ) ); $output = “”; $args = array( ‘posts_per_page’ => $num, ‘post_type’ => ‘post’, ‘tax_query’ => array( array( ‘taxonomy’ […]

wp-jquery-scrollup-plugin

超便利なjQuery プラグイン、jquery-scrollup-pluginをWPプラグイン化しました。 https://github.com/shnr/wp-jquery-scrollup-plugin 管理画面からオプションを編集可能です。

wp-ogp-shnr-customed

もともとはこちらを使っていましたが、 wp_ogp_customized_plugin 「OGPタグをサムネイルじゃなく、専用に登録したい。」 「好きな画像をFACEBOOKで表示させたい。」 こんな要望に答えるべく、カスタマイズされたこのプラグインを更にカスタマイズしてみました。 wp-ogp-shnr-customed Activateすると、記事や固定ページのサイドバーに、サムネイルをアップするエリアが出現します。 お試し下さい。

cakePHP : Auto Loginの実装

cakePHP 2.4 で、Auto Loginを実装した。 その手順をメモ。 まず、使用したコンポーネントはこちら。 http://milesj.me/code/cakephp/auto-login ただしこれは注意書きにあるように、2.Xでは非推奨になっているので、最新版を下からいただく。 http://milesj.me/code/cakephp/utility こちらをダウンロードして、使うのはContoroller/Component/AutoLoginComponent.php。 ※探してみたところ、こちらにアップデートのお知らせがあった。 http://milesj.me/blog/read/upgrading-ajaxhandler-1.6-3 実装の方法は、上のページと変わらない様だ。 1.AppControllerでComponentの追加。 (username => emailとしてるは、認証時のユーザー名をemailしているため。) public $components = array( ‘AutoLogin’, // 追加 ‘Auth’ => array( ‘authenticate’ => array( ‘Form’ => array( ‘fields’ => array(‘username’ => ’email’) ) ), ‘authorize’ => array( ‘Actions’ => array(‘actionPath’ => ‘controllers’) ) ), ‘Session’ ); 2.loginフォーム(僕の場合はuser/login.ctp)にチェックボックスの追加 echo $this->Form->input(‘auto_login’, […]

ワイヤーフレームテンプレート for Google document

ウェブサイトやモバイルサイト、アプリケーションのワイヤー作成に便利な、google document用のテンプレートを集めてみた。 1.Blue wireframe By Ian Channing シンプルで使いやすいワイヤーフレームの雛形。 2.Wireframe: Front page By Morten Just PC用のランディングページに良さそう。 3.prefabSOFT – Mockup Template Wireframe PUBLIC #wfkit By Jochen Szostek ECサイトに特化しているようだ。CMSでもいけそう。 ここからはスマホ、タブレット対応のもの。 1.Mobile Phone By Morten Just モバイルサイトのワイヤーに。ブランクのiphone画面に色々なオブジェクトを足していける。 2.Wireframe: iPad By Tony Hanna iPad等のタブレット型デバイスに対応。 3.iPhone 5 Collection iphone5のフレームが欲しい時はこれ。

php: 半角または全角スペースで文字列を区切る。

problem: フルネーム検索窓で、実際には苗字・名前と分かれているテーブルをそれぞれ検索する為に、分割を行う。 code: $kw = mb_convert_kana($keyword, ‘s’); $kw_arr = preg_split(‘/[\s]+/’, $kw, -1, PREG_SPLIT_NO_EMPTY); print_r($kw_arr); description: $keywordには全角または半角でフルネームが区切られ入力されているとする。(例:田中 太郎、田中 太郎) 1.mb_convert_kanaで全角スペースを半角に変換。 2.preg_splitで正規表現を使って、’/[\s]+/’というように一文字以上の半角スペースで区切る。また、パラメータにPREG_SPLIT_NO_EMPTYを指定してnon-emptyのものだけを返す。 ちなみに、苗字だけの検索窓があったとして、ここに入力された前後のスペースを取り除きたい場合はtrimを使えばよし。 $kw = mb_convert_kana($keyword, ‘s’); $kw = trim($kw);

wordpress: add new column on admin panel.

wordpress管理画面の、投稿一覧に新しくカスタムフィールドを表示する列を追加してくれと言われたら。 /** * 新しい列を日付の前に追加。 */ function add_cfield_on_posts_columns($columns) { global $post; if ( $post->post_type == ‘post’ ) { $date_escape = $columns[‘date’]; unset($columns[‘date’]); $columns[‘new_custom_field’] = “Custom field”; $columns[‘date’] = $date_escape; } return $columns; } /** * 作った列にカスタムフィールドの値を表示 */ function show_cfield_on_the_new_column( $column_name ) { global $post; $columns = array( array( ‘col’ => ‘new_custom_field’, ‘cf’ => ‘custom_field_name’ ), ); […]

cakePHP: update aco table without command.

コマンドラインが使えない環境でacoテーブルを更新するには、以下のような関数を追加して実行する。 例えば、studentモデルを追加する。 まず、user/reitnitDBにアクセスすることでDBが更新されるよう、usersContorllerに下を追加する。 最初にStudentsのみ追加。 public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow(‘reinitDB’); } public function reinitDB() { $this->Acl->Aco->create(array(‘parent_id’ => 1, ‘alias’ => ‘Students’, ‘model’ => ”)); $this->Acl->Aco->save(); echo “all done”; exit; } user/reitnitDBにアクセスする。 acoテーブルに一行追加されているはず。 今回追加した分のIDを93とする。 下層のページのために、下記を追加。 $aliasesの配列に含まれるページをacoテーブルに追加していくもの。 public function reinitDB() { $aliases = array( ‘admin_index’, ‘admin_add’, ‘admin_edit’, ‘admin_delete’, ‘admin_view’, ‘admin_course_edit’, ‘admin_couse_take’, ‘index’, ‘add’, ‘edit’, ‘view’, ); foreach […]