SlideShare a Scribd company logo
CodeIgniterによるPhwittr
                                         日本CodeIgniterユーザ会
                                            Kenji Suzuki

                                                 2008/10/08
CodeIgniter and its logo are property of EllisLab Inc         CodeIgniter Users Group in Japan
Phwittrとは?


         Tritterクローン
            ➔ミニブログ
            ➔「ひとこと」を投稿するサイト
         「PHP Framework Fight!」という企画もの




CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
Phwittrとは?




CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
PHP Framework Fight!とは?


         開催概要
            ➔ PHPで色々あるフレームワークで、同じ仕様のア
              プリを実装し、ベンチマークを取り競争する。
            ➔ 処理速度だけでなく、開発工数(ジェネレータが
              吐いた以外のコード量)などでも比較したい。
            ➔ 数あるPHPフレームワークの頂点に立つのはど
              のれか、今ここにPHPフレームワークの熱いバト
              ルが始まる!
         まとめサイト
            ➔ http://labs.strk.jp/code-fight/wiki/


CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
PHP Framework Fight!とは?


         経過
            ➔ 4/22告知、5月末までに実装の予定
            ➔ 仕様がなかなか出てこない
            ➔ 出てきたが、細かいところまではない
            ➔ 企画自体、ポシャった?

                 • PHP界隈では、この話題はタブーに
            ➔ 8/18に突然、締切日が9月末に設定される
            ➔ 実装しはじめると、HTMLテンプレートすら足りない
            ➔ Twitterや先に動いていたSabelを参考に
              テキトーに作る

CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
PHP Framework Fight!とは?


         現状
            ➔ エントリー

                 •     14フレームワーク

                 • 17エントリ(バージョン違いなど)
            ➔ 一応できてるもの

                 •     Sabel

                 • CodeIgniter
                 • 素のPHP(独自フレームワーク)

                 • Piece

CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
ビューの実装




CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
ビューの実装

     layoutビュー(system/applications/views/layout.php)
     ...略...
     <body id="yourDomainName" class="indexBody">
     <div id="page">
         <div id="header"><?=$header?></div>
         <div id="contents">
             <div id="wrapper">
                 <div id="main"><?=$main?></div>
             </div>
             <div id="sub"><?=$sub?></div>
         </div>
         <div id="footer">...略...</div>
     </div>
     </body>
     ...略...
CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
ビューの実装

homeコントローラ(system/applications/controllers/home.php)
...略...
$data->header = $this->load->view('home/header', '', TRUE);
$data->main = $this->load->view('home/main', $data, TRUE);
$data->sub   = $this->load->view('home/side', $data, TRUE);
$this->load->view('layout', $data);
...略...




 CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
認証の実装


         Redux Auth 1.4a
            ➔GPL or MIT License
            ➔ http://code.google.com/p/reduxauth/

         (参考)Neo base
            ➔http://neo-navi.net/top/neo_base
            ➔デモ http://neo-navi.net/neo_base/




CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
JavaScriptの出力


         JavaScriptファイルを出力するコントローラ
            ➔viewファイルにJavaScriptを書けば、
             CIのヘルパーなどが使える
            ➔ブラウザにキャッシュされるように
             ヘッダ出力
         <script>タグを生成するヘルパー
            ➔ファイルが更新されたときのために
             「?YYYYMMDDHHSS」を付加



CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
JavaScriptの出力


         viewとして処理したい場合
            ➔ <?=js('default')?>
                 •     <script type="text/javascript"
                       src="http://example.jp/phwittr/js/default.js?
                       200810021129"></script>

         ファイルをそのまま出力したい場合
            ➔ <?=js('jquery-1.2.6.min.js', FALSE)?>
                 •     <script type="text/javascript"
                       src="http://example.jp/phwittr/js/jquery-1.2.6.min.j
                       s"></script>




CodeIgniter and its logo are property of EllisLab Inc        CodeIgniter Users Group in Japan
JavaScriptの出力


         URIルーティング
            ➔ application/config/routes.php
                 •     $route['js/(S+)'] = "js/index/$1";




CodeIgniter and its logo are property of EllisLab Inc        CodeIgniter Users Group in Japan
Ajaxの実装


         「つぶやき」の投稿
            ➔jQueryを使用
            ➔$.post()メソッドでPOST
                 •     $.post(URL, データ, コールバック関数, データタイプ);

            ➔受信用コントローラstatus/update()

                 •     データを受信して検証し、保存

                 • 結果をjsonで返す
            ➔ページを部分的に更新

CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
Ajaxの実装

viewファイル(system/applications/views/home/main.php)
<form action="#" name="whatdoing">
<div id="post">
<span class="whatdoing">イマナニシテル?</span>
<span class="textCount" id="js_textcount">140</span>
<textarea id="message" class="message"></textarea>
<p class="btn btnSpace">
<input type="button" name="twitter" id="twitter"
 class="formBtn" value=" つぶやく " />
<input type="hidden" id="ticket" value="<?=$ticket?>" />
<input type="hidden" id="page_" value="<?=PAGE_OTHER?>" />
</p>
</div>
</form>



CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
Ajaxの実装

      JavaScriptファイル(system/applications/views/js/default.php)
      /* つぶやきの投稿 */
      $(function(){
          $('#twitter').click(function(){
               comment = $('#message').val();
               $.post('<?=site_url('status/update')?>',
                        {msg: comment,
                        ticket: $('#ticket').val(),
                        p: $('#page_').val()},
                        addComment, 'json');
               $('#message').val('').focus();
               $("#js_textcount").text(140);
          });
      });



CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
Ajaxの実装

   controllerファイル(system/applications/controllers/status.php)
   // Ajax つぶやき投稿の受信(一部省略されていますので、このままでは動作しません)
   function update()
   {
          header('Content-Type: application/json; charset=UTF-8');
          $ticket = $this->session->flashdata('ticket');
          if ( ! $this->input->post('ticket') || $this->input->post('ticket') !== $ticket) {
                  echo json_encode(array('status' => 'ng', 'html' => 'チケットが異なります'));
                  exit;
          }

             $comment = $this->input->post('msg');
             $page = $this->input->post('p');

             if ($this->redux_auth->logged_in()) {
                    $this->load->model('Status_model', '', TRUE);
                    list($id, $reply_username) = $this->Status_model->
                            add_comment($user_id, $reply_username, $comment);
                    $html = $this->load->view('status/comment', $data, TRUE);
                    echo json_encode(array('status' => 'ok', 'html' => $html));
             }
             else {
                    echo json_encode(array('status' => 'ng',
                                                'html' => 'ログインしていません'));
             }
   }

CodeIgniter and its logo are property of EllisLab Inc                  CodeIgniter Users Group in Japan
Ajaxの実装

JavaScriptファイル(system/applications/views/js/default.php)
function addComment(data){
    if (data.status == 'ok') {
         $('tbody:first').prepend(data.html);
         $('p#last_comment').text(comment);
         count = parseInt($('#side_count_post').text()) + 1;
         $('#side_count_post').text(count);
    }
    else {
         alert(data.html);
    }
}




 CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
140文字カウントの実装

    JavaScriptファイル(system/applications/views/js/default.php)
    /* エラーメッセージ */
    $("#message").before('<p class="errorMsg">140字を超えました!</p>');
    $(".errorMsg").css({display:"none"});

    $("#message").bind("keyup blur submit",
    function(){
           if( $("#message").val().length > 140){
                   $("#js_textcount").text(140 - $("#message").val().length).css(
                   "color", "#FF0000");
                   $(".errorMsg").css({display: "block"});
                   $("#twitter").attr("disabled","disabed");
           }
           else {
                   $("#js_textcount").text(140 - $("#message").val().length ).css(
                   "color", "#CCCCCC");
                   if($("#message").val().length >= 1 && $("#message").val().length != ''){
                          $("#twitter").attr("disabled","");
                   }
                   else {
                          $("#twitter").attr("disabled","disabled");
                   }
                   $(".errorMsg").css({display:"none"});
           }
    }
    );


CodeIgniter and its logo are property of EllisLab Inc                 CodeIgniter Users Group in Japan
ヘルパーの作成


         pagerヘルパー
            ➔offset()、pager()
         アイコン画像表示のHTML生成
            ➔picture()、my_pict()
         投稿日時表示
            ➔posted_time()
         HTMLエスケープ
            ➔h()

CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
Pagerヘルパー


         なにもの?
            ➔ページを移動する
            ➔home?page=2
            ➔「前へ」「後へ」移動
         CIにはPaginationクラスがあるのに
            ➔Paginationクラスより低機能
            ➔GETを使っている



CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
Pagerヘルパー


         GETの使い方
            ➔ $config['uri_protocol']をPATH_INFOに設定する
            ➔ 必要な時にQUERY_STRINGをパース
            ➔ むろん、CIでは推奨されない方法!!

                 •     セキュリティに自信のある人だけ使ってください

 $this->load->helper('pager');

 parse_str($_SERVER['QUERY_STRING'], $_GET);
 $page = intval($this->input->get('page'));
 $per_page = 20;
 $offset = offset($page, $per_page);

 $data->pager = pager($page, $per_page, $count, 'home');
CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
参考URL

         Phwittrソースコード
            ➔ CodeRepos
                 •     http://coderepos.org/share/browser/events/phpfra
                       mework/codeigniter/trunk

                 •     http://svn.coderepos.org/share/events/phpframew
                       ork/codeigniter/trunk

         テストサイト
            ➔ http://club.h14m.org:8000/kenji/phwittr/

         Framework Fightまとめサイト
            ➔ http://labs.strk.jp/code-fight/wiki/



CodeIgniter and its logo are property of EllisLab Inc     CodeIgniter Users Group in Japan
日本CodeIgniterユーザ会


         http://codeigniter.jp/

         CodeIgniter日本語言語パック/
          日本語ユーザガイド作成中

         メンバー募集中




CodeIgniter and its logo are property of EllisLab Inc   CodeIgniter Users Group in Japan
書籍のお知らせ


                                             日本初のCodeIgniter解説本
                                              『CodeIgniter徹底入門』

                                             2008年6月9日、
                                              翔泳社より発売されました

                                             http://codeigniter.jp/tettei/



                             Amazon.co.jpより             ご静聴
                                                        ありがとうございました
CodeIgniter and its logo are property of EllisLab Inc         CodeIgniter Users Group in Japan

More Related Content

What's hot (12)

PPTX
Magento meet up Tokyo#1 for Design
Miho Nakano
 
PDF
WordCamp Tokyo2012 Session
regret raym
 
KEY
EC-CUBEプラグイン講義
ria1201
 
PDF
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
Takashi Yahata
 
PDF
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
PDF
はじめよう JavaFX 2.x
a know
 
PPT
20111031 MobileWeb at TDC
Nobuhiro Sue
 
PDF
20120118 titanium
Hiroshi Oyamada
 
PDF
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
 
PPTX
Webシステム脆弱性LT資料
Tomohito Adachi
 
PDF
Robot_framework_introduction-ja
Kazumasa EBATA
 
PDF
WordPress widget api
Takami Kazuya
 
Magento meet up Tokyo#1 for Design
Miho Nakano
 
WordCamp Tokyo2012 Session
regret raym
 
EC-CUBEプラグイン講義
ria1201
 
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
Takashi Yahata
 
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
はじめよう JavaFX 2.x
a know
 
20111031 MobileWeb at TDC
Nobuhiro Sue
 
20120118 titanium
Hiroshi Oyamada
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
 
Webシステム脆弱性LT資料
Tomohito Adachi
 
Robot_framework_introduction-ja
Kazumasa EBATA
 
WordPress widget api
Takami Kazuya
 

Viewers also liked (20)

PDF
Как стать резидентом КРИТБИ? критби
Alexander Verhozin
 
PPT
Fresh Business Thinking - Social Media Event - Jemima presentation
fbtslides
 
PPT
Seguridad: sembrando confianza en el cloud
Nextel S.A.
 
PDF
Jak przygotowac startup do fazy inwestycyjnej
pcmp
 
PPTX
Kaal flex property
kaalflex
 
PDF
Is Ukraine on the road towards EU?
Morten Munk
 
PDF
Human Rights and Exploring Global Citizenship
youth_upf
 
PPT
ballorig
Roy Hermans
 
DOCX
Microsoft Project workshop in Pune 6th & 7th August
vrushalis
 
PDF
Caso catenaria aprendiendo a innovar en la organizacion
InnovacionSistematica
 
PDF
Linkedin presentation-red-1225231144081339-8
nizetanaiz
 
PPTX
Youth nited for juan healthy nation
Bernard Cielo
 
PPT
Resum Curs 2011 - 2012. Tercera Part
Oliverasqv
 
PDF
はじめてのMercurial/Bitbucket その2
kenjis
 
PDF
Linguagem sql
Tic Eslc
 
PDF
Fresh Business Thinking Social Media Event - Julie Hall
fbtslides
 
PPT
Spectrum deck v5.3
SLaM Iam
 
PDF
Ukraine - Business unplugged!
Morten Munk
 
PDF
Presentacion motivafit startup live alicante
Nadia Calatayud
 
PPT
Resum Curs 2011 - 2012. Segona Part
Oliverasqv
 
Как стать резидентом КРИТБИ? критби
Alexander Verhozin
 
Fresh Business Thinking - Social Media Event - Jemima presentation
fbtslides
 
Seguridad: sembrando confianza en el cloud
Nextel S.A.
 
Jak przygotowac startup do fazy inwestycyjnej
pcmp
 
Kaal flex property
kaalflex
 
Is Ukraine on the road towards EU?
Morten Munk
 
Human Rights and Exploring Global Citizenship
youth_upf
 
ballorig
Roy Hermans
 
Microsoft Project workshop in Pune 6th & 7th August
vrushalis
 
Caso catenaria aprendiendo a innovar en la organizacion
InnovacionSistematica
 
Linkedin presentation-red-1225231144081339-8
nizetanaiz
 
Youth nited for juan healthy nation
Bernard Cielo
 
Resum Curs 2011 - 2012. Tercera Part
Oliverasqv
 
はじめてのMercurial/Bitbucket その2
kenjis
 
Linguagem sql
Tic Eslc
 
Fresh Business Thinking Social Media Event - Julie Hall
fbtslides
 
Spectrum deck v5.3
SLaM Iam
 
Ukraine - Business unplugged!
Morten Munk
 
Presentacion motivafit startup live alicante
Nadia Calatayud
 
Resum Curs 2011 - 2012. Segona Part
Oliverasqv
 
Ad

Similar to CodeIgniterによるPhwittr (20)

PDF
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
kenjis
 
PDF
はじめてのCodeIgniter
Yuya Matsushima
 
PDF
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
PDF
PHP勉強会 #51
Takako Miyagawa
 
PDF
CodeIgniter入門
Sho A
 
PDF
2011 PHPカンファレンス関西 懇親会LT
Takako Miyagawa
 
PDF
PHPフレームワーク入門
Sho A
 
PPT
Code Igniterについて
Keita Ojima
 
PDF
CodeIgniterユーザガイドの翻訳に参加しよう!
kenjis
 
PDF
PHPカンファレンス関西 2011
Takako Miyagawa
 
PDF
関西アンカンファレンス CodeIgniter CMS
Fumito Mizuno
 
PDF
CodeIgniter東京勉強会 2011.05.14
Takako Miyagawa
 
PDF
CodeIgniter 最新情報 2011 (増補版)
kenjis
 
PDF
20091030cakephphandson 01
Yusuke Ando
 
ODP
Ci tutorial
Kazuaki Ueda
 
PDF
はじめてのMercurial/Bitbucket
kenjis
 
PPTX
PHPCON fukuoka 2015 CodeIgniter update
Takako Miyagawa
 
PDF
CodeIgniter 最新情報 2010
kenjis
 
PDF
PHPMATSURI2011 LT大会
Takako Miyagawa
 
PDF
Php勉強会資料20090629
Takako Miyagawa
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
kenjis
 
はじめてのCodeIgniter
Yuya Matsushima
 
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
PHP勉強会 #51
Takako Miyagawa
 
CodeIgniter入門
Sho A
 
2011 PHPカンファレンス関西 懇親会LT
Takako Miyagawa
 
PHPフレームワーク入門
Sho A
 
Code Igniterについて
Keita Ojima
 
CodeIgniterユーザガイドの翻訳に参加しよう!
kenjis
 
PHPカンファレンス関西 2011
Takako Miyagawa
 
関西アンカンファレンス CodeIgniter CMS
Fumito Mizuno
 
CodeIgniter東京勉強会 2011.05.14
Takako Miyagawa
 
CodeIgniter 最新情報 2011 (増補版)
kenjis
 
20091030cakephphandson 01
Yusuke Ando
 
Ci tutorial
Kazuaki Ueda
 
はじめてのMercurial/Bitbucket
kenjis
 
PHPCON fukuoka 2015 CodeIgniter update
Takako Miyagawa
 
CodeIgniter 最新情報 2010
kenjis
 
PHPMATSURI2011 LT大会
Takako Miyagawa
 
Php勉強会資料20090629
Takako Miyagawa
 
Ad

More from kenjis (11)

PDF
AspectMock 最強のモッキングフレームワーク
kenjis
 
PDF
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
kenjis
 
PDF
10分でわかるFuelPHP @ OSC2013 Nagoya
kenjis
 
PDF
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
 
PDF
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
kenjis
 
PDF
10分でわかるFuelPHP @ 2011/12
kenjis
 
PDF
フレームワーク入門書の決定版が完成
kenjis
 
PDF
達人出版会からPHPの本を出版しよう
kenjis
 
PDF
FuelPHPでのファイルアップロード
kenjis
 
PDF
『PHP逆引きレシピ』とセキュリティのこと
kenjis
 
PDF
CodeIgniter 貴方はどのフレームワークを使うべきか?
kenjis
 
AspectMock 最強のモッキングフレームワーク
kenjis
 
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
kenjis
 
10分でわかるFuelPHP @ OSC2013 Nagoya
kenjis
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
kenjis
 
10分でわかるFuelPHP @ 2011/12
kenjis
 
フレームワーク入門書の決定版が完成
kenjis
 
達人出版会からPHPの本を出版しよう
kenjis
 
FuelPHPでのファイルアップロード
kenjis
 
『PHP逆引きレシピ』とセキュリティのこと
kenjis
 
CodeIgniter 貴方はどのフレームワークを使うべきか?
kenjis
 

Recently uploaded (8)

PDF
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 
PPTX
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PDF
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PPTX
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 

CodeIgniterによるPhwittr

  • 1. CodeIgniterによるPhwittr 日本CodeIgniterユーザ会 Kenji Suzuki 2008/10/08 CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 2. Phwittrとは?  Tritterクローン ➔ミニブログ ➔「ひとこと」を投稿するサイト  「PHP Framework Fight!」という企画もの CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 3. Phwittrとは? CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 4. PHP Framework Fight!とは?  開催概要 ➔ PHPで色々あるフレームワークで、同じ仕様のア プリを実装し、ベンチマークを取り競争する。 ➔ 処理速度だけでなく、開発工数(ジェネレータが 吐いた以外のコード量)などでも比較したい。 ➔ 数あるPHPフレームワークの頂点に立つのはど のれか、今ここにPHPフレームワークの熱いバト ルが始まる!  まとめサイト ➔ http://labs.strk.jp/code-fight/wiki/ CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 5. PHP Framework Fight!とは?  経過 ➔ 4/22告知、5月末までに実装の予定 ➔ 仕様がなかなか出てこない ➔ 出てきたが、細かいところまではない ➔ 企画自体、ポシャった? • PHP界隈では、この話題はタブーに ➔ 8/18に突然、締切日が9月末に設定される ➔ 実装しはじめると、HTMLテンプレートすら足りない ➔ Twitterや先に動いていたSabelを参考に テキトーに作る CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 6. PHP Framework Fight!とは?  現状 ➔ エントリー • 14フレームワーク • 17エントリ(バージョン違いなど) ➔ 一応できてるもの • Sabel • CodeIgniter • 素のPHP(独自フレームワーク) • Piece CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 7. ビューの実装 CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 8. ビューの実装 layoutビュー(system/applications/views/layout.php) ...略... <body id="yourDomainName" class="indexBody"> <div id="page"> <div id="header"><?=$header?></div> <div id="contents"> <div id="wrapper"> <div id="main"><?=$main?></div> </div> <div id="sub"><?=$sub?></div> </div> <div id="footer">...略...</div> </div> </body> ...略... CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 9. ビューの実装 homeコントローラ(system/applications/controllers/home.php) ...略... $data->header = $this->load->view('home/header', '', TRUE); $data->main = $this->load->view('home/main', $data, TRUE); $data->sub = $this->load->view('home/side', $data, TRUE); $this->load->view('layout', $data); ...略... CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 10. 認証の実装  Redux Auth 1.4a ➔GPL or MIT License ➔ http://code.google.com/p/reduxauth/  (参考)Neo base ➔http://neo-navi.net/top/neo_base ➔デモ http://neo-navi.net/neo_base/ CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 11. JavaScriptの出力  JavaScriptファイルを出力するコントローラ ➔viewファイルにJavaScriptを書けば、 CIのヘルパーなどが使える ➔ブラウザにキャッシュされるように ヘッダ出力  <script>タグを生成するヘルパー ➔ファイルが更新されたときのために 「?YYYYMMDDHHSS」を付加 CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 12. JavaScriptの出力  viewとして処理したい場合 ➔ <?=js('default')?> • <script type="text/javascript" src="http://example.jp/phwittr/js/default.js? 200810021129"></script>  ファイルをそのまま出力したい場合 ➔ <?=js('jquery-1.2.6.min.js', FALSE)?> • <script type="text/javascript" src="http://example.jp/phwittr/js/jquery-1.2.6.min.j s"></script> CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 13. JavaScriptの出力  URIルーティング ➔ application/config/routes.php • $route['js/(S+)'] = "js/index/$1"; CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 14. Ajaxの実装  「つぶやき」の投稿 ➔jQueryを使用 ➔$.post()メソッドでPOST • $.post(URL, データ, コールバック関数, データタイプ); ➔受信用コントローラstatus/update() • データを受信して検証し、保存 • 結果をjsonで返す ➔ページを部分的に更新 CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 15. Ajaxの実装 viewファイル(system/applications/views/home/main.php) <form action="#" name="whatdoing"> <div id="post"> <span class="whatdoing">イマナニシテル?</span> <span class="textCount" id="js_textcount">140</span> <textarea id="message" class="message"></textarea> <p class="btn btnSpace"> <input type="button" name="twitter" id="twitter" class="formBtn" value=" つぶやく " /> <input type="hidden" id="ticket" value="<?=$ticket?>" /> <input type="hidden" id="page_" value="<?=PAGE_OTHER?>" /> </p> </div> </form> CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 16. Ajaxの実装 JavaScriptファイル(system/applications/views/js/default.php) /* つぶやきの投稿 */ $(function(){ $('#twitter').click(function(){ comment = $('#message').val(); $.post('<?=site_url('status/update')?>', {msg: comment, ticket: $('#ticket').val(), p: $('#page_').val()}, addComment, 'json'); $('#message').val('').focus(); $("#js_textcount").text(140); }); }); CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 17. Ajaxの実装 controllerファイル(system/applications/controllers/status.php) // Ajax つぶやき投稿の受信(一部省略されていますので、このままでは動作しません) function update() { header('Content-Type: application/json; charset=UTF-8'); $ticket = $this->session->flashdata('ticket'); if ( ! $this->input->post('ticket') || $this->input->post('ticket') !== $ticket) { echo json_encode(array('status' => 'ng', 'html' => 'チケットが異なります')); exit; } $comment = $this->input->post('msg'); $page = $this->input->post('p'); if ($this->redux_auth->logged_in()) { $this->load->model('Status_model', '', TRUE); list($id, $reply_username) = $this->Status_model-> add_comment($user_id, $reply_username, $comment); $html = $this->load->view('status/comment', $data, TRUE); echo json_encode(array('status' => 'ok', 'html' => $html)); } else { echo json_encode(array('status' => 'ng', 'html' => 'ログインしていません')); } } CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 18. Ajaxの実装 JavaScriptファイル(system/applications/views/js/default.php) function addComment(data){ if (data.status == 'ok') { $('tbody:first').prepend(data.html); $('p#last_comment').text(comment); count = parseInt($('#side_count_post').text()) + 1; $('#side_count_post').text(count); } else { alert(data.html); } } CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 19. 140文字カウントの実装 JavaScriptファイル(system/applications/views/js/default.php) /* エラーメッセージ */ $("#message").before('<p class="errorMsg">140字を超えました!</p>'); $(".errorMsg").css({display:"none"}); $("#message").bind("keyup blur submit", function(){ if( $("#message").val().length > 140){ $("#js_textcount").text(140 - $("#message").val().length).css( "color", "#FF0000"); $(".errorMsg").css({display: "block"}); $("#twitter").attr("disabled","disabed"); } else { $("#js_textcount").text(140 - $("#message").val().length ).css( "color", "#CCCCCC"); if($("#message").val().length >= 1 && $("#message").val().length != ''){ $("#twitter").attr("disabled",""); } else { $("#twitter").attr("disabled","disabled"); } $(".errorMsg").css({display:"none"}); } } ); CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 20. ヘルパーの作成  pagerヘルパー ➔offset()、pager()  アイコン画像表示のHTML生成 ➔picture()、my_pict()  投稿日時表示 ➔posted_time()  HTMLエスケープ ➔h() CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 21. Pagerヘルパー  なにもの? ➔ページを移動する ➔home?page=2 ➔「前へ」「後へ」移動  CIにはPaginationクラスがあるのに ➔Paginationクラスより低機能 ➔GETを使っている CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 22. Pagerヘルパー  GETの使い方 ➔ $config['uri_protocol']をPATH_INFOに設定する ➔ 必要な時にQUERY_STRINGをパース ➔ むろん、CIでは推奨されない方法!! • セキュリティに自信のある人だけ使ってください $this->load->helper('pager'); parse_str($_SERVER['QUERY_STRING'], $_GET); $page = intval($this->input->get('page')); $per_page = 20; $offset = offset($page, $per_page); $data->pager = pager($page, $per_page, $count, 'home'); CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 23. 参考URL  Phwittrソースコード ➔ CodeRepos • http://coderepos.org/share/browser/events/phpfra mework/codeigniter/trunk • http://svn.coderepos.org/share/events/phpframew ork/codeigniter/trunk  テストサイト ➔ http://club.h14m.org:8000/kenji/phwittr/  Framework Fightまとめサイト ➔ http://labs.strk.jp/code-fight/wiki/ CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 24. 日本CodeIgniterユーザ会  http://codeigniter.jp/  CodeIgniter日本語言語パック/ 日本語ユーザガイド作成中  メンバー募集中 CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan
  • 25. 書籍のお知らせ  日本初のCodeIgniter解説本 『CodeIgniter徹底入門』  2008年6月9日、 翔泳社より発売されました  http://codeigniter.jp/tettei/ Amazon.co.jpより ご静聴 ありがとうございました CodeIgniter and its logo are property of EllisLab Inc CodeIgniter Users Group in Japan