LT『baserCMSでホームページをリニューアルしたときのアレコレ』のスライド
オープンソースカンファレンス2012 Kansai@Kyoto の「ライトニングトークfor Business」で話した『baserCMSでホームページをリニューアルしたときのアレコレ』のスライドです。
baserCMSでホームページをリニューアルしたときのアレコレ
書きすぎたとは思っていましたが、実際に話すと思ってた以上にボリュームありすぎでした。
5分なんだってば。失敗。
baserCMSを2.0.1から2.0.3に更新
弊社サイトで使用しているbaserCMSのバージョンを2.0.1から2.0.3に更新しました。
あっさりサックリ上手く行ったのでホッとしたのですが、動作確認するとブログでの一覧表示でおかしな所が。「≫ 続きを読む」をクリックするまで隠れているはずの詳細が一覧で見えてしまっていました。
あれ〜?と思いつつbaserCMS公式にいくと関係しそうな解決済チケットがありました。
BlogHelper::getPostContent の挙動がおかしい
リビジョン a845999e から更新ファイルを取ってきてファイルを差し替えました。
さぁ〜、どうだ! あれ〜? なおらないな。
しばし悩む。 フォーラムを見に行ったりしつつ。
ああ、そうか。ブログのviewカスタマイズしてるからかも。 そうでした。
lancardというテーマ名の場合ですが、以下の2ファイルをリポジトリのindex.phpの変更内容に合わせて修正したらなおりました。
app/webroot/themed/lancard/blog/default/index.php
app/webroot/themed/lancard/blog/default/archives.php
修正内容はリポジトリの差分を見てもらうのが手っ取り早いですね。
$blog->postContent($post, false, true) と第2引数がfalseに変わってます。
Mac で複数ファイルの一括置換ってどうしてます?パート2
- 2012/07/23
- uchida
<前置き>
とある休日の午後、grepして置換したい場面が訪れた。
(そういえば、macでgrepで置換ってどうするんだろう?)と思った。
早速、googleで『mac grep 置換』で検索してみる。
すると、なんということでしょう。我が社のブログが一番にヒットするではないですか。
読んでみて1秒後
(なんだか難しい・・。)
そして他の検索候補を見てみると「TextWrangler」を使うといいらしい。
ということで、「TextWrangler」でgrepで置換する方法を試してみます。
<grepで置換する>
1.「TextWrangler」をインストールする。
App Storeで検索してインストールします。
4.メニューの「Search」→サブメニューの「Search in (選択したディレクトリ名)」を選択します。

5.次の内容でセッティングする。
①紫枠内に対象とする文字列を入力
②緑枠内に置換後の文字列を入力
③黄色枠内で対象のディレクトリが選択されているか確認
④赤枠内の「Replace All」ボタンを押下する。

6.次の内容で実行
①青枠内をチェックすると保存するたびに、ダイアログが出て保存するか聞いてくるので、はずしています。
②赤枠内のProceedで実行します。

Monster Debugger – Flex開発のお供に
この2週間ほどFlex4でクライアントサイド書いているわけですが、いくつか階層を重ねたコンテナの上部に、paddingTop=”0″にしているのに妙なpaddingが空いたりとかで、Firebug的なものが欲しいなーと思って探したらちょうど良いのがありました。
インストールしたらAirアプリケーションとして立ち上がります。
プロジェクトタイプなどを選んでExportすると必要なswcが出力されますので、それに対してFlexプロジェクトのライブラリパスを通してあげます。
後は、キャプチャにもあるように
ライブラリをインポートして
import com.demonsters.debugger.MonsterDebugger;
初期化するだけです。
MonsterDebugger.initialize(this);
MonsterDebuggerを開いた状態でプロジェクトを実行すると、デバッガに接続されてこんな感じになります。
Highlight & Inspectをクリックして、画面から要素を選択してオブジェクトのプロパティを確認したり、そのプロパティをLiveに変更したりなど。
またconsole.log的にオブジェクトのダンプも含めたログを吐いたりなどもさくっとできます。
MonsterDebugger.trace(this, "Hello World!");
いろいろと助かりそうです。感謝。
「夏だ!Rubyだ!RBC Nightだ!!Rubyで作ったスマホアプリってどうなの??」な話
muraveです。Rubyビジネス・コモンズ(RBC)というコミュニティのスタッフもしています。
「夏だ!Rubyだ!RBC Nightだ!!Rubyで作ったスマホアプリってどうなの??」というイベントが6/22(金)の夕方から開催されました。RBCでは毎月土曜日に1日、または半日規模の勉強会を開催してきたのですが「もっとフランクにいろいろやっていこう」ということになりました。このイベントはその1回目です。
長崎から福岡での金曜日夕方のイベントへの参加はちょっとキビシイですが以前からリクエストしていたRhodesでのスマホアプリ開発ネタとなれば行くしかありません。
イベントでは実際にRohdesで開発された新感覚スマホ式カードラリー『る〜ら』について技術とビジネスのお話を聞くことができました。技術寄りのお話をしていただいた古川さんのスライドはslideshareで公開されています。
http://www.slideshare.net/purukyawa/rubyrbc-nightruby
苦労はされてますが「機能制限は必ずある」のだから「制限を理解して提案、設計」してちゃんとチューニングすれば「決して遅くない!!」とのこと。
最近だと機能優先で進めてから速度のチューニングをすることが多いですが、回線や端末の速度に制限があるスマホのような環境では最初から速度のことを考えつつ進めたほうがいいのかもしれないな、と思いました。
ビジネス寄りのお話では実際のユーザー数のお話、さらに懇親会では投下資金のお話などもでてエキサイティングでしたが、ココら辺は参加者特権ということ秘密。
次はRubyでスマホアプリの第2弾、ネイティブiPhoneアプリが開発できるRubyMotionについてのイベントを7/20に開催予定です。
あと、9月は私が担当でイベントをやる予定です。長崎で。
まだ何をするか決めてませんがそのときはよろしくお願いします。
ところで、RBCのオフィシャルサイト、古いページがのこってしまっていてややこしいんですがfacebookのページがそうなんです。
http://www.facebook.com/rubybizcommons
最新情報については上記URLからお願いします。
baserCMSの認証をカスタマイズ(WordPressのアカウントでログイン)
baserCMSのバージョンは2.0.1です。
現在弊社のサイトはbaserCMSとWordPress(スタッフブログ)が同居しています。
アカウントの管理を統一したかったのでbaserCMSにWordPressのアカウントでログイン可能なようにbaserCMSの認証をカスタマイズしました(先にWordPressを運用していたのでスタッフのアカウントがWordPressにありますので)。
次のような仕様にしました。
- WordPressのアカウントでbaserCMSにログインした場合、事前に作成したstaffアカウントとしての操作になる。
- 公開ページで表示される名前(氏名)はstaffとする。
- ログイン中、氏名を「staff(WordPressアカウント)」とする。
- 誰が操作したかの記録は欲しいのでダッシュボードの「最近の動き」に by 氏名 と付加して記録する。
baserCMSの認証はbcAuthComponent(baser/controllers/components/bc_auth.php)に切り出してありますので、このファイルをappディレクトリの同一階層にコピーしてそのファイルを修正します。元のbcAuthComponentは携帯の簡単ログイン対応になっていたのですが携帯でのログインは必要なかったので全部削除して書き直しって感じになりました。
app/controllers/components/bc_auth.php
App::import('Component', 'Auth', 'Sanitize');
class BcAuthComponent extends AuthComponent {
//WordPressアカウントでstaffとしてログイン murave
function login($data = null) {
$this->__setDefaults();
$this->_loggedIn = false;
$wordpress_id = null;
if (empty($data)) {
$data = $this->data;
}
$model =& $this->getModel();
$alias = $model->alias;
$cnt = $model->find('count',
array('conditions' => array($this->userModel . '.' . $this->fields['username'] => $data['User']['name'])));
if($cnt == 0) {//baserCMSには存在しないユーザー
if($this->_wp_CheckPassword($_POST['data']['User']['name'], $_POST['data']['User']['password'])) {
$wordpress_id = $_POST['data']['User']['name'];
$staff_record = $model->find('first',
array('conditions' => array($this->userModel . '.' . $this->fields['username'] => 'staff')));
$username = $staff_record[$this->userModel][$this->fields['username']];
$password = $staff_record[$this->userModel][$this->fields['password']];
$data = array(
$this->userModel . '.' . $this->fields['username'] => $username,
$this->userModel . '.' . $this->fields['password'] => $password
);
}
}
if ($user = $this->identify($data)) {
if(!is_null($wordpress_id)) {
$user['real_name_2'] = '('.$wordpress_id.')';
}
$this->Session->write($this->sessionKey, $user);
$this->_loggedIn = true;
}
return $this->_loggedIn;
}
/**
* WordPressユーザー認証を行う。
*/
private function _wp_CheckPassword($wordpress_id, $password) {
//WordPressの関数を使って認証を行ない結果をtrue/falseで返す処理です。
}
}
_wp_CheckPasswordがWordPressに認証させる処理で「肝心な所」ではあるのですが、環境によって異なるはずなので申し訳ありませんが割愛しています。
baserCMSにアカウントが無かったらWordPressに認証させて、WordPressで認証に成功したらstaffというアカウントでbaserCMS側は認証、その場合には $user[‘real_name_2’] = ‘(‘.$wordpress_id.’)’ とreal_name_2に設定してからセッションに書き込んでいます。real_name_1はstaffにしているので操作中の氏名は「staff(WordPressアカウント)」となります。
次に「最近の動き」への記録ですがBaserAppModelのsaveDbLogメソッドで行われていますのでこのメソッドの動作を変更します。baser/models/app_model.phpをappディレクトリの同一階層にコピーしてメソッドを定義すれば上書きできます。
app/models/app_model.php
class AppModel extends BaserAppModel {
function saveDbLog($message) {
// ログを記録する
App::import('Model', 'Dblog');
$Dblog = new Dblog();
$logdata['Dblog']['name'] = $message
.' by '.@$_SESSION['Auth']['User']['real_name_1'].@$_SESSION['Auth']['User']['real_name_2'];
$logdata['Dblog']['user_id'] = @$_SESSION['Auth']['User']['id'];
return $Dblog->save($logdata);
}
}
これで当初予定していたカスタマイズが一通り完了しました。baserCMSはカスタマイズしやすくていいですね。









