Blogブログ

Month: December 2013

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 […]

cakePHP: ajaxでのデータ取得。

ajaxを使います。 /user/index で、Userと紐付くStudentをajaxを使って取得する。 データの取得は、/user/ajax_get_students/ から行うと仮定。 ・/user/index.ctp 下のようなプルダウンでユーザを選択する。 user 1 user 2 ajaxリクエスト関数を用意。 戻ってきたdata展開の処理は省きます。 $(“#userselect”).change(){ var userid = $(this).val();     $.ajax({ type:”POST”,         url: “”, data: { ‘user_id’: userid, }, success:function(data){ console.log(data); }, error :function(XMLHttpRequest,textStatus){ console.log(textStatus); }     }); } コントローラ。 ・UsersController class ・UsersController extends AppController { public $components = array(‘RequestHandler’); public function ajax_get_students($id = null) { if($this->RequestHandler->isAjax()){ $user_id […]

Cakephp : HABTM アソシエーションでのupdateAll

状況としては、UserモデルとStudentモデルがある。Userは複数のStudentを持つ。 さらに、Studentは複数のCourseを持つ。Courseは重複するのでHABTM Associationとして登録。 Studentは各コース毎に受講しているか休学してるかstatusで管理する。status = 1 -> 受講中 、status = 0 -> 休学とする。 受講、休学はこんなボタンを表示させて、それぞれ studentsコントローラのadmin_couse_take()で処理を行う。 ちなみに、コントローラ内のファンクションにこうやって複数引数を渡せることも知った。 // absent echo $this->Form->postLink(__(‘Absent’), array( ‘controller’ => ‘students’, ‘action’ => ‘couse_take’, $student[‘Student’][‘id’], $course[‘CoursesStudent’][‘id’], false, ‘admin’ => true ), null, __(‘Are you sure you want to retake the class?’)); // take echo $this->Form->postLink(__(‘Take’), array( ‘controller’ => ‘students’, ‘action’ => ‘couse_take’, $student[‘Student’][‘id’], $course[‘CoursesStudent’][‘id’], […]

CSSで吹き出しデザイン

吹き出しデザインをCSSのみで実装。 吹き出しの出てる部分をbefore, after擬似要素で実装。 Chrome, FF, safari, IE8,9,10で確認。 こっちは吹き出しに影をつけたもの。 出てる部分はbefore, after擬似要素で実装しているが、影をつけるためroteteで2d transformしている。 Chrome, FF, IE9,10で確認。FFではあんまりキレイじゃない。

Cakephp reinitialize ACO

コマンドラインが使えない環境でacoテーブルを更新するには、以下のような関数を追加して実行する。 ex. Add new_page on User model. Parent_id is 10, public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow(‘reinitDB’); } public function reinitDB() { $this->Acl->Aco->create(array(‘parent_id’ => 10, ‘alias’ => ‘new_page’, ‘model’ => ‘User’)); $this->Acl->Aco->save(); echo “all done”; exit; } その後、aros_acosテーブルの更新を行う。 このページの initDB()を実行。

Google analytics 設定メモ

新規で作ったランディングページから、ECを通してのコンバージョンを取る必要があった。 但し全体のページビューは見せたくないので、ビューに解析用のユーザーを割り当てて対応する事に。 まず以下のディレクトリに新しくLPを作ると仮定。 somedomain.com/newitems/product-a.html somedomain.com/newitems/product-b.html … そしてECシステムの方はECCUBEを使っている想定。 Google Analyticsでは、新規にビューを作る。 その後の設定は以下。 ・そのビューのeコマース設定をONにする。 ・解析用ユーザーを「表示と分析」権限で登録。 ・フィルタを追加。 このフィルタの設定の仕方は、 ・カスタムフィルタで、種類は「一致」を選択し、フィールドには「リクエスト URI」で、フィルタパターンに「^/ec/(newitems|cart|shopping)/」 と設定。 これで、/newitems/配下から来た人で/cart/, /shopping/の流れで購入を行った人のコンバージョンがとれたようだ。 まだ調査中なので、何かわかれば追記します。

Cakephp localize

Cakephpのローカライズ。 コンソールでの作業になるので、先ずは\app\console\に行ってパスを通す。 cd …\app\cnosole SET PATH=%PATH%;%CD% アプリのルートパスへ行き、コマンドを実行。 cake i18n 対話形式でプログラムが実行される。 [E]xtract POT file from sources What would you like to do? 先ずはPOTファイルの生成。 What is the path you would like to extract? [Q]uit [D]one そして抽出元を選択。 Would you like to extract the messages from the CakePHP core? (y/n) cakePHPからの翻訳を書き込む場合はy What is the path you would like to […]

Up grade to universal code

イベントトラッキングのテストで、計測されていなかったので調べてみた。 今貼り付けてるアナリティクスコードは、サイトから取ったもの=universal analyticsのタグなのだが、この場合だと今までの関数が使えない様だ。 trackEvent()が、ga()に置き換わる様。 Before : <a href="#" onclick="_gaq.push([‘_trackEvent’, ‘nav’, ‘home’, ‘label_home’]);">test</a> After : ga('send', 'event', 'category', 'action', 'opt_label', opt_value, {'nonInteraction': 1}); <a href="#" onclick="ga('send', 'event', 'category', 'click', 'test');">test</a> または <a href="#" id="tracktest">test</a> $(document).ready(function(){          var testclick = document.getElementById(&#39;tracktest&#39;);     addListener(testclick, &#39;click&#39;, function() {       ga(&#39;send&#39;, &#39;event&#39;, &#39;button&#39;, &#39;click&#39;, &#39;tested&#39;);     }); […]