<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>hampom TODAY</title>
	<atom:link href="http://hampom.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://hampom.wordpress.com</link>
	<description>「TODAY」ってタイトルが付くブログが作りたいな、と思った10分後に作ったブログ。</description>
	<lastBuildDate>Thu, 26 Jan 2012 11:51:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='hampom.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/43f9928bdaf281e3f6973ada0c11a365?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>hampom TODAY</title>
		<link>http://hampom.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://hampom.wordpress.com/osd.xml" title="hampom TODAY" />
	<atom:link rel='hub' href='http://hampom.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Kohana で pjax をしてみたよ！</title>
		<link>http://hampom.wordpress.com/2012/01/06/kohana-%e3%81%a7-pjax-%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%82%88%ef%bc%81/</link>
		<comments>http://hampom.wordpress.com/2012/01/06/kohana-%e3%81%a7-pjax-%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%82%88%ef%bc%81/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 09:13:16 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=266</guid>
		<description><![CDATA[先日作成した簡単なページのページネーション部を pjax で動作するようにしてみました！ pjax については google で検索するといっぱいでてくるので、そちらを参照してください(´・ω・`) Kohana PHP で実現するために、まずはモジュールを探してみました！ Kohana には http://kohana-modules.com/ というサイトがあり、現時点(2012/1/6)で 605 ものモジュールが登録されています。早速探してみると…あったあった、ありました！ (※ 他にも Facebook だったり Twitter だったり google map だったり、いろいろと便利なモジュールが用意されていますよ！ ) Kopjax &#8211; Pjax jQuery ajax module for Kohana 3.1(.2) https://github.com/cambiata/kopjax セットアップ モジュールをダウンロードし modules/ ディレクトリに解凍。 ディレクトリ名称を kopjax にしました。 モジュールを追加したら bootstrap.php に追記しましょう。 一番下に追加しました。 pagination モジュールのリンクを変える 前回の記事のままでは、ページ指定が query_string 設定となり ?page_id= となっていました。 これを [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=266&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>先日作成した簡単なページのページネーション部を pjax で動作するようにしてみました！<br />
pjax については google で検索するといっぱいでてくるので、そちらを参照してください(´・ω・`)</p>
<p>Kohana PHP で実現するために、まずはモジュールを探してみました！<br />
Kohana には <a href="http://kohana-modules.com/">http://kohana-modules.com/</a> というサイトがあり、現時点(2012/1/6)で 605 ものモジュールが登録されています。早速探してみると…あったあった、ありました！<br />
(※ 他にも Facebook だったり Twitter だったり google map だったり、いろいろと便利なモジュールが用意されていますよ！ )</p>
<p><strong>Kopjax &#8211; Pjax jQuery ajax module for Kohana 3.1(.2)</strong><br />
<a href="https://github.com/cambiata/kopjax">https://github.com/cambiata/kopjax</a></p>
<h3>セットアップ</h3>
<p>モジュールをダウンロードし modules/ ディレクトリに解凍。 ディレクトリ名称を kopjax にしました。</p>
<p>モジュールを追加したら bootstrap.php に追記しましょう。<br />
<pre class="brush: php; highlight: [14];">
/**
 * Enable modules. Modules are referenced by a relative or absolute path.
 */
Kohana::modules(array(
	// 'auth'       =&gt; MODPATH.'auth',       // Basic authentication
	// 'cache'      =&gt; MODPATH.'cache',      // Caching with multiple backends
	// 'codebench'  =&gt; MODPATH.'codebench',  // Benchmarking tool
	'database'   =&gt; MODPATH.'database',   // Database access
	// 'image'      =&gt; MODPATH.'image',      // Image manipulation
	'orm'        =&gt; MODPATH.'orm',        // Object Relationship Mapping
	// 'unittest'   =&gt; MODPATH.'unittest',   // Unit testing
	// 'userguide'  =&gt; MODPATH.'userguide',  // User guide and API documentation
	'pagination' =&gt; MODPATH.'pagination',
	'kopjax'       =&gt; MODPATH.'kopjax',
	));
</pre><br />
一番下に追加しました。</p>
<h3>pagination モジュールのリンクを変える</h3>
<p><a href="http://hampom.wordpress.com/2012/01/05/kohana-%e3%81%9d%e3%81%ae2-%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%8d%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/" title="Kohana データベースへの登録とページネーション 〜 ページネーション 〜">前回</a>の記事のままでは、ページ指定が query_string 設定となり ?page_id= となっていました。 これを route 設定に変更します。</p>
<h4>Route::set() を追加</h4>
<p>ルーティングを追加して、ページの指定をURLに含ませる形式を設定します。<br />
application/bootstrap.php に追記します。</p>
<p><pre class="brush: php;">
Route::set('top', '(&lt;page_id&gt;)', array('page' =&gt; '[0-9]+'))
        -&gt;defaults(array(
                'controller' =&gt; 'top',
                'action'     =&gt; 'index',
                'page_id'       =&gt; null,
        ));
</pre><br />
Controller_Top の、 action_index() でページを切り替えます。 URL にすると http://www.example.com/1 などと数値がページ送りid(page_id) になります。</p>
<h4>pagination の設定を変更</h4>
<p><pre class="brush: php; highlight: [5];">
                $pagination = Pagination::factory(array(
                        'item_per_page' =&gt; 10,
                        'total_items'   =&gt; $all_address-&gt;count_all(),
                        'current_page'  =&gt; array(
                                'source'=&gt; 'route',
                                'key'   =&gt; 'page_id'),
                        'auto_hide'     =&gt; false,
                        'first_page_in_url' =&gt; false,
                ));
</pre><br />
current_page の source の部分を query_string から route に変更しました。</p>
<h3>リンクを pjax 対応にする</h3>
<p>モジュールには pjaxdemo というコントローラやビューファイルが用意されており、これを参考に書き換えます。</p>
<h4>コントローラ</h4>
<p>最初に Controller_Top を変更します。<br />
ajax(pjax)出力か通常の出力かを判定しビューを切り替えて出力する様です。 CakePHP には beforeFilter() や afterFilter() のほか、 beforeRender() などありますが、 KohanaPHP には before() および after() の2種類のコールバックがあります。 このコールバックを利用し、複数のアクションに対して処理を行うようにします。<br />
<pre class="brush: php;">
        public function after()
        {               
                if (!$this-&gt;request-&gt;is_ajax()) {
                        $this-&gt;view = View::factory('pjax/template');
                } else {
                        $this-&gt;view = View::factory('pjax/content');
                }       
                $this-&gt;view-&gt;set('content', $this-&gt;content);
                $this-&gt;response-&gt;body($this-&gt;view);
        }       
</pre><br />
ajax の場合には pjax/template を。通常のアクセスの場合は pjax/content を読み込む形になるようです。</p>
<h4>ビュー</h4>
<p>コントローラで指定した pjax/template および pjax/content を用意します。<br />
もちろん、ひな形となるファイルはモジュール kopjax の中に views/pjax/ 以下にそれぞれファイルがありますので、この2つのファイルを application/views/ の下に pjax ディレクトリを作成してコピーします。<br />
※ そのままでも良いのですが、サンプル用のリンクなどがある為。</p>
<p>template.php<br />
<pre class="brush: php; highlight: [13];">
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;address&lt;/title&gt;
&lt;/head&gt;
&lt;?php $mediabase = Route::url('media'); ?&gt;

&lt;script src=&quot;//ajax.googleapis.com/ajax/libs/jquery/1/jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo $mediabase ?&gt;/pjax/js/jquery.pjax.js&quot;&gt;&lt;/script&gt;

  &lt;script type=&quot;text/javascript&quot;&gt;
    $(function(){
      // pjax
      $('a').pjax('#content')
    })
  &lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;content&quot;&gt;
	&lt;?php echo View::factory('pjax/content')-&gt;set('content', $content) ?&gt;
&lt;/div&gt;
&lt;?php echo date('Y-m-d H:i:s'); ?&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre></p>
<p>サンプルにあったデモ用のリンクを削除し、pjax化するリンクの対象をアンカータグすべてに変更しました。</p>
<p>content.php<br />
<pre class="brush: php;">
&lt;?php echo $content; ?&gt;
&lt;hr /&gt;
&lt;?php echo (Request::current()-&gt;is_ajax()) ? 'Content part loaded using Ajax' : 'Whole page loaded using standard Page refresh'?&gt;
</pre></p>
<p>3行目で、ajax で表示されているか、通常読み込みされたかどうかが表示されるようになっています。</p>
<h3>おわり</h3>
<p>あとは、データを10件以上登録しページ送りをしてみてください。<br />
<code>Content part loaded using Ajax </code><br />
と表示され、その下の時刻もページを切り替えても書き換わらず、同じ時間が表示されています。そして、2ページ目などが表示されている状態で、再読み込みをすると、2ページ目のまま、最下部の表示が以下のように変わるはずです。<br />
<code>Whole page loaded using standard Page refresh </code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/266/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=266&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2012/01/06/kohana-%e3%81%a7-pjax-%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%82%88%ef%bc%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>
	</item>
		<item>
		<title>Kohana データベースへの登録とページネーション 〜 ページネーション 〜</title>
		<link>http://hampom.wordpress.com/2012/01/05/kohana-%e3%81%9d%e3%81%ae2-%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%8d%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/</link>
		<comments>http://hampom.wordpress.com/2012/01/05/kohana-%e3%81%9d%e3%81%ae2-%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%8d%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 09:07:20 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=258</guid>
		<description><![CDATA[データベース登録できたので、次はページネーションを。 同梱モジュールには含まれていない様子だったので、さっさとググッて見つけてきました。 kloopko / kohana-pagination [ https://github.com/kloopko/kohana-pagination ] ページからダウンロードしてきて、展開したら modules/ 以下にコピーします。 次に bootstrap.php に追加。 pagination というディレクトリでコピーしたので MODPATH.&#8217;pagination&#8217; となっています。 追記するのはコントローラーとビューの２つ。 コントローラーに追記 $_POST の if 文の前に追加します。 特に絞り込むような条件もないので、全件の件数を 4行目で pagination に設定し、１ページ１０件ずつ(item_per_page) に設定します。 10件ずつ区切って表示するため、 limit() および offset() にそれぞれ、 item_per_page と offset を指定し取得範囲を変動させます。 結果を、先ほどの view に set() でビューに渡せば完了です。 ビューに追記 create.php に最後に上記を追記。 1行目の render() によって、ページ送りが表示されます。 また、このままではページ送りが First や Last、Next といった英語表記になっています。 しかし [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=258&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>データベース登録できたので、次はページネーションを。</p>
<p>同梱モジュールには含まれていない様子だったので、さっさとググッて見つけてきました。</p>
<p>kloopko / kohana-pagination [ <a href="https://github.com/kloopko/kohana-pagination">https://github.com/kloopko/kohana-pagination</a> ]</p>
<p>ページからダウンロードしてきて、展開したら modules/ 以下にコピーします。<br />
次に bootstrap.php に追加。</p>
<p><pre class="brush: php;">
/**
 * Enable modules. Modules are referenced by a relative or absolute path.
 */
Kohana::modules(array(
        // 'auth'       =&gt; MODPATH.'auth',       // Basic authentication
        // 'cache'      =&gt; MODPATH.'cache',      // Caching with multiple backends
        // 'codebench'  =&gt; MODPATH.'codebench',  // Benchmarking tool
        'database'   =&gt; MODPATH.'database',   // Database access
        // 'image'      =&gt; MODPATH.'image',      // Image manipulation
        'orm'        =&gt; MODPATH.'orm',        // Object Relationship Mapping
        // 'unittest'   =&gt; MODPATH.'unittest',   // Unit testing
        // 'userguide'  =&gt; MODPATH.'userguide',  // User guide and API documentation
        'pagination' =&gt; MODPATH.'pagination',
        ));
</pre></p>
<p>pagination というディレクトリでコピーしたので MODPATH.&#8217;pagination&#8217; となっています。</p>
<p>追記するのはコントローラーとビューの２つ。</p>
<h3>コントローラーに追記</h3>
<p>$_POST の if 文の前に追加します。</p>
<p><pre class="brush: php;">
                $all_address = ORM::factory('address');
                $pagination = Pagination::factory(array(
                        'item_per_page' =&gt; 10,
                        'total_items'   =&gt; $all_address-&gt;count_all(),
                ));

                $addresses = $all_address-&gt;limit($pagination-&gt;items_per_page)
                                         -&gt;offset($pagination-&gt;offset)
                                         -&gt;find_all();

                $view = View::factory('address/create')
                        -&gt;set('pagination', $pagination)
                        -&gt;set('addresses', $addresses)
                        -&gt;bind('errors', $errors);
</pre></p>
<p>特に絞り込むような条件もないので、全件の件数を 4行目で pagination に設定し、１ページ１０件ずつ(item_per_page) に設定します。<br />
10件ずつ区切って表示するため、 limit() および offset() にそれぞれ、 item_per_page と offset を指定し取得範囲を変動させます。</p>
<p>結果を、先ほどの view に set() でビューに渡せば完了です。</p>
<h3>ビューに追記</h3>
<p><pre class="brush: php;">
&lt;?php
  echo $pagination-&gt;render();
?&gt;
&lt;?php echo $pagination-&gt;total_items; ?&gt;件登録があります
&lt;table&gt;
&lt;? foreach ($addresses as $address): ?&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;?php echo $address-&gt;firstname; ?&gt;&lt;/td&gt;
    &lt;td&gt;&lt;?php echo $address-&gt;lastname; ?&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;?php endforeach; ?&gt;
&lt;/table&gt;
</pre></p>
<p>create.php に最後に上記を追記。<br />
1行目の render() によって、ページ送りが表示されます。</p>
<p>また、このままではページ送りが First や Last、Next といった英語表記になっています。<br />
しかし i18n による国際化の仕組みによって日本語にすることができます。</p>
<p>application/i18n/ に配下に <strong>ja.php</strong> ファイルを作成。<br />
以下のように記述します。</p>
<p><pre class="brush: php;">
&lt;?php defined('SYSPATH') or die('No direct script access.');
return array(
    'First' =&gt; '最初へ',
    'Previous' =&gt; '前へ',
    'Next' =&gt; '次へ',
    'Last' =&gt; '最後へ',
);
</pre></p>
<p>これによって、日本語表示になります。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/258/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=258&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2012/01/05/kohana-%e3%81%9d%e3%81%ae2-%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%8d%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>
	</item>
		<item>
		<title>Kohana データベースへの登録とページネーション 〜 登録 〜</title>
		<link>http://hampom.wordpress.com/2012/01/05/kohana-%e3%81%9d%e3%81%ae2-%e7%99%bb%e9%8c%b2/</link>
		<comments>http://hampom.wordpress.com/2012/01/05/kohana-%e3%81%9d%e3%81%ae2-%e7%99%bb%e9%8c%b2/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 07:22:43 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=233</guid>
		<description><![CDATA[先日のセットアップから引き続き。 今度は、データベースにデータを登録し、ページネーションで表示してみました。 まずは、データベースを新規に作成しテーブルを作ります。 addresses …。 という名前ですが、とりあえず名前だけ。 次に、 application/bootstrap.php を編集し、 ORM および database のモジュールを使えるように、コメントアウトされている各行を外します。 最後に application/config/ 配下に database.php ファイルを作成し以下のような記述を追加します。 準備完了。 モデルを作る addresses のモデルを作ります。 application/classes/model の配下に address.php ファイルを作ります。テーブル名は複数形ですが、モデル名は単数形となります。 class 名は、 Model_ から始まります。 ひとつだけ function がありますが、 バリデーションルールです。 この例では、 firstname および lastname に対して not_empty ルールを設定しています。これにより、空での登録はできなくなります。 後ほど設定するエラー表示の指定により、このままでも英語によるエラーが表示されますが、ついでに解りやすく日本語にしておきましょう。 メッセージは application/messages 配下に設置します。 models ディレクトリを作成し、 作成したディレクトリ内に address.php ファイルを以下の通り作ります。 これで、バリデーションによって表示されるエラーメッセージを変更することができます。 コントローラーを作る Kohana PHP では、セットアップ直後 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=233&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>先日のセットアップから引き続き。<br />
今度は、データベースにデータを登録し、ページネーションで表示してみました。</p>
<p>まずは、データベースを新規に作成しテーブルを作ります。</p>
<p><pre class="brush: sql;">
CREATE TABLE `addresses` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `firstname` varchar(10) NOT NULL DEFAULT '',
    `lastname` varchar(20) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</pre></p>
<p>addresses …。 という名前ですが、とりあえず名前だけ。</p>
<p>次に、 application/bootstrap.php を編集し、 ORM および database のモジュールを使えるように、コメントアウトされている各行を外します。</p>
<p><pre class="brush: php;">
/**
* Enable modules. Modules are referenced by a relative or absolute path.
*/
Kohana::modules(array(
    // 'auth'       =&gt; MODPATH.'auth',       // Basic authentication
    // 'cache'      =&gt; MODPATH.'cache',      // Caching with multiple backends
    // 'codebench'  =&gt; MODPATH.'codebench',  // Benchmarking tool
    'database'   =&gt; MODPATH.'database',   // Database access
    // 'image'      =&gt; MODPATH.'image',      // Image manipulation
    'orm'        =&gt; MODPATH.'orm',        // Object Relationship Mapping
    // 'unittest'   =&gt; MODPATH.'unittest',   // Unit testing
    // 'userguide'  =&gt; MODPATH.'userguide',  // User guide and API documentation
));
</pre></p>
<p>最後に application/config/ 配下に database.php ファイルを作成し以下のような記述を追加します。</p>
<p><pre class="brush: php;">
&lt;?php
return array(
    'default' =&gt; array(
        'type' =&gt; 'mysql',
            'connection' =&gt; array(
            'hostname'   =&gt; 'localhost',
            'username'   =&gt; 'データベースユーザー名',
            'password'   =&gt; 'データベースパスワード',
            'persistent' =&gt; false,
            'database'   =&gt; 'データベース名'
        ),
        'table_prefix' =&gt; '',
        'charset'      =&gt; 'utf8',
        'profiling'    =&gt; true
    )
);
</pre></p>
<p>準備完了。</p>
<h3>モデルを作る</h3>
<p>addresses のモデルを作ります。 application/classes/model の配下に <strong>address.php</strong> ファイルを作ります。テーブル名は複数形ですが、モデル名は単数形となります。</p>
<p><pre class="brush: php;">
&lt;?php defined('SYSPATH') or die('No direct access allowed.');
class Model_Address extends ORM
{
        public function rules()
        {
                return array(
                        'firstname' =&gt; array(
                                array('not_empty'),
                        ),
                        'lastname' =&gt; array(
                                array('not_empty'),
                        ),
                );
        }
}
</pre></p>
<p>class 名は、 Model_ から始まります。 ひとつだけ function がありますが、 バリデーションルールです。<br />
この例では、 firstname および lastname に対して not_empty ルールを設定しています。これにより、空での登録はできなくなります。</p>
<p>後ほど設定するエラー表示の指定により、このままでも英語によるエラーが表示されますが、ついでに解りやすく日本語にしておきましょう。<br />
メッセージは application/messages 配下に設置します。 models ディレクトリを作成し、 作成したディレクトリ内に address.php ファイルを以下の通り作ります。</p>
<p><pre class="brush: php;">
&lt;?php
return array(
        'firstname' =&gt; array(
                'not_empty' =&gt; '必ず入力してください',
        ),
        'lastname' =&gt; array(
                'not_empty' =&gt; '必ず入力してください',
        ),
);
</pre></p>
<p>これで、バリデーションによって表示されるエラーメッセージを変更することができます。</p>
<h3>コントローラーを作る</h3>
<p>Kohana PHP では、セットアップ直後 welcome.php が default コントローラーとして / にアクセスされた際に表示されるよう設定されています。<br />
まずはこの設定を変更します。<br />
application/bootstrap.php を開き、 Route::set() を変更します。</p>
<p><pre class="brush: php;">
/**
 * Set the routes. Each route must have a minimum of a name, a URI and a set of
 * defaults for the URI.
 */
Route::set('default', '(&lt;controller&gt;(/&lt;action&gt;(/&lt;id&gt;)))')
        -&gt;defaults(array(
                'controller' =&gt; 'top',
                'action'     =&gt; 'index',
        ));
</pre></p>
<p>controller に指定した top.php(Controller_Top) の action に指定した index(action_index()) がデフォルトと変更できました。</p>
<p>ではファイルを作ります。</p>
<p><pre class="brush: php;">
&lt;?php defined('SYSPATH') or die('No direct script access.');

class Controller_Top extends Controller {

        public function action_index()
        {
                $view = View::factory('address/create')
                        -&gt;bind('errors', $errors);

                if ($_POST) {
                        $address = ORM::factory('address')-&gt;values($_POST);
                        try {  
                                $address-&gt;save();
                        } catch(ORM_Validation_Exception $e) {
                                $errors = $e-&gt;errors('models');
                        }
                }

                $this-&gt;response-&gt;body($view);
        }

}
</pre></p>
<p>7行目で、表示するビューを指定しています。 address/create と指定することで application/views/address/create.php を指定することになります。 8行には bind() が記載されています。 bind() は、ビューに対し値を渡してあげるメソッドですが、参照渡しによって行われます。</p>
<p>10行目からは、フォームから投稿された場合の処理になります。 address モデルに対し送信されたデータをセットし、保存を試みます。<br />
バリデーションによりエラーとなった場合は、 $errors にエラー内容が代入されます。</p>
<h3>ビューを作る</h3>
<p><pre class="brush: php;">
&lt;?php echo Form::open('/'); ?&gt;

&lt;div&gt;
&lt;?php
  echo Form::label('firstname', '姓');
  echo Form::input('firstname');
  echo Arr::get($errors, 'firstname');
?&gt;
&lt;/div&gt;

&lt;div&gt;
&lt;?php
  echo Form::label('lastname', '名');
  echo Form::input('lastname');
  echo Arr::get($errors, 'lastname');
?&gt;
&lt;/div&gt;

&lt;?php echo Form::submit('submit', '登録'); ?&gt;
&lt;?php echo Form::close(); ?&gt;
</pre></p>
<p>このビューによって、何も記入せずに「登録」ボタンをクリックすると以下の通り、エラーが表示されます。</p>
<p><img src="http://hampom.files.wordpress.com/2012/01/kohana-pt2-db-01.png?w=700" alt="" title="kohana-pt2-db-01"   class="aligncenter size-full wp-image-254" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/233/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/233/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=233&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2012/01/05/kohana-%e3%81%9d%e3%81%ae2-%e7%99%bb%e9%8c%b2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2012/01/kohana-pt2-db-01.png" medium="image">
			<media:title type="html">kohana-pt2-db-01</media:title>
		</media:content>
	</item>
		<item>
		<title>Kohana PHP 3.2 セットアップ</title>
		<link>http://hampom.wordpress.com/2012/01/04/kohana-php-3-2-%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97/</link>
		<comments>http://hampom.wordpress.com/2012/01/04/kohana-php-3-2-%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 07:14:16 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=218</guid>
		<description><![CDATA[ブログの更新をすごく長い間サボってしまっていました。 久しぶりの更新は、 Kohana PHP framework 3.2 を使ったプログラムの作成を。 本当に久しぶりすぎたので、とりあえずセットアップから開始したいと思います。 環境 Ubuntu 11.10 nginx 1.0.5 php 5.3.13 MySQL 入れるの忘れてた。 入れると 5.1.58。 セットアップ それぞれをインストールし、今回は nginx + php-fpm で構築しました。 cat /etc/nginx/sites-available/default nginx と php-fpm を起動して、ブラウザで http://localhost/ にアクセスしてみます。 環境テストが動作し、 こちらの画面では、キャッシュディレクトリとログディレクトリに書き込めないというエラーが表示されています。それぞれ、書き込みできるようパーミッションを変更。 再度リロードすると… 先ほどまで、赤く警告が表示されていましたが全てがグリーンに変わりました。 メッセージに従って www ディレクトリ配下にある install.php をリネーム(使わないので削除でもいいよ！)すると、インストール完了です！ リロードすると左上に「hello, world!」と表示されるシンプルな画面になります。 &#160;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=218&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>ブログの更新をすごく長い間サボってしまっていました。<br />
久しぶりの更新は、 Kohana PHP framework 3.2 を使ったプログラムの作成を。</p>
<p>本当に久しぶりすぎたので、とりあえずセットアップから開始したいと思います。</p>
<h3>環境</h3>
<ul>
<li>Ubuntu 11.10</li>
<li>nginx 1.0.5</li>
<li>php 5.3.13</li>
</ul>
<p>MySQL 入れるの忘れてた。 入れると 5.1.58。</p>
<h3>セットアップ</h3>
<p>それぞれをインストールし、今回は nginx + php-fpm で構築しました。</p>
<p><strong>cat /etc/nginx/sites-available/default</strong></p>
<p><pre class="brush: plain;">
server {
    listen 80;
    server_name localhost;
    root /home/yasuhiro/www;

    index index.php;

    location / {
        try_files $uri $uri/ @kohana;
    }

    location @kohana {
        rewrite ^ /index.php/$uri last;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}
</pre></p>
<p>nginx と php-fpm を起動して、ブラウザで http://localhost/ にアクセスしてみます。</p>
<p><a href="http://hampom.files.wordpress.com/2012/01/kohana-install-01.png"><img class="aligncenter size-large wp-image-219" title="kohana-Install-01" src="http://hampom.files.wordpress.com/2012/01/kohana-install-01.png?w=252&#038;h=400" alt="" width="252" height="400" /></a></p>
<p>環境テストが動作し、 こちらの画面では、<strong>キャッシュディレクトリとログディレクトリに書き込めない</strong>というエラーが表示されています。それぞれ、書き込みできるようパーミッションを変更。</p>
<p>再度リロードすると…</p>
<p><a href="http://hampom.files.wordpress.com/2012/01/kohana-install-02.png"><img class="aligncenter size-large wp-image-221" title="kohana-Install-02" src="http://hampom.files.wordpress.com/2012/01/kohana-install-02.png?w=389&#038;h=400" alt="" width="389" height="400" /></a></p>
<p>先ほどまで、赤く警告が表示されていましたが全てがグリーンに変わりました。</p>
<p>メッセージに従って www ディレクトリ配下にある install.php をリネーム(使わないので削除でもいいよ！)すると、インストール完了です！</p>
<p>リロードすると左上に「hello, world!」と表示されるシンプルな画面になります。</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/218/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=218&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2012/01/04/kohana-php-3-2-%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2012/01/kohana-install-01.png?w=252" medium="image">
			<media:title type="html">kohana-Install-01</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2012/01/kohana-install-02.png?w=389" medium="image">
			<media:title type="html">kohana-Install-02</media:title>
		</media:content>
	</item>
		<item>
		<title>2010 in review</title>
		<link>http://hampom.wordpress.com/2011/01/02/2010-in-review/</link>
		<comments>http://hampom.wordpress.com/2011/01/02/2010-in-review/#comments</comments>
		<pubDate>Sun, 02 Jan 2011 14:57:39 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=215</guid>
		<description><![CDATA[The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here&#8217;s a high level summary of its overall blog health: The Blog-Health-o-Meter™ reads This blog is doing awesome!. Crunchy numbers A Boeing 747-400 passenger jet can hold 416 passengers. This blog was viewed about 13,000 times in 2010. That&#8217;s about [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=215&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[
<p>The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here&#8217;s a high level summary of its overall blog health:</p>
<p align="center"><img style="border:1px solid #ddd;background:#f5f5f5;padding:20px;" src="http://s0.wp.com/i/annual-recap/meter-healthy2.gif" width="250" height="183" alt="Healthy blog!"/></p>
<p align="center">The <em>Blog-Health-o-Meter™</em> reads This blog is doing awesome!.</p>
<h2>Crunchy numbers</h2>
<p>			<a href="http://hampom.files.wordpress.com/2010/01/css-folder.png"><img src="http://hampom.files.wordpress.com/2010/01/css-folder.png?w=288" alt="Featured image" style="max-height:230px;float:right;border:1px solid #ddd;background:#fff;margin:0 0 1em 1em;padding:6px;" /></a></p>
<p>A Boeing 747-400 passenger jet can hold 416 passengers.  This blog was viewed about <strong>13,000</strong> times in 2010.  That&#8217;s about 31 full 747s.</p>
</p>
<p>In 2010, there were <strong>9</strong> new posts, growing the total archive of this blog to 18 posts. There were <strong>11</strong> pictures uploaded, taking up a total of 2mb. That&#8217;s about a picture per month.</p>
<p>The busiest day of the year was December 8th with <strong>107</strong> views. The most popular post that day was <a style="color:#08c;" href="http://hampom.wordpress.com/2010/03/03/google-maps-apiv3-%e3%81%a7%e4%bd%8f%e6%89%80%e3%81%8b%e3%82%89%e5%9c%b0%e5%9b%b3%e3%81%ab%e3%83%9e%e3%83%bc%e3%82%ab%e3%83%bc%e3%82%92%e7%bd%ae%e3%81%8f%ef%bc%81/">Google Maps API(v3) で住所から地図にマーカーを置く！</a>.</p>
<p></p>
<h2>Where did they come from?</h2>
<p>The top referring sites in 2010 were <strong>hampom.humming-code.com</strong>, <strong>twitter.com</strong>, <strong>s.luna.tv</strong>, <strong>thedesignium.com</strong>, and <strong>webcache.googleusercontent.com</strong>.</p>
<p>Some visitors came searching, mostly for <strong>jquery sortable</strong>, <strong>google maps api v3 マーカー</strong>, <strong>jquery ドラッグ ドロップ 並び替え</strong>, <strong>google map api v3</strong>, and <strong>codeigniter 認証</strong>.</p>
<div style="clear:both;"></div>
<h2>Attractions in 2010</h2>
<p>These are the posts and pages that got the most views in 2010.</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">1</div>
<p>					<a style="margin-right:10px;" href="http://hampom.wordpress.com/2010/03/03/google-maps-apiv3-%e3%81%a7%e4%bd%8f%e6%89%80%e3%81%8b%e3%82%89%e5%9c%b0%e5%9b%b3%e3%81%ab%e3%83%9e%e3%83%bc%e3%82%ab%e3%83%bc%e3%82%92%e7%bd%ae%e3%81%8f%ef%bc%81/">Google Maps API(v3) で住所から地図にマーカーを置く！</a> <span style="color:#999;font-size:8pt;">March 2010</span><br />1 comment											</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">2</div>
<p>					<a style="margin-right:10px;" href="http://hampom.wordpress.com/2010/01/27/jquery-ui-%e3%81%ae-sortable-%e3%81%a7%e3%82%89%e3%81%8f%e3%82%89%e3%81%8f%e4%b8%a6%e3%81%b3%e6%9b%bf%e3%81%88/">jQuery UI の sortable でらくらく並び替え</a> <span style="color:#999;font-size:8pt;">January 2010</span>											</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">3</div>
<p>					<a style="margin-right:10px;" href="http://hampom.wordpress.com/2009/10/31/%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%82%88%e3%83%bc-%e3%83%a9%e3%83%b3%e3%83%80%e3%83%a0%e3%83%90%e3%83%8a%e3%83%bc%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b-jquery-%e3%83%97%e3%83%a9/">作ってみたよー!! ランダムバナーを表示する jQuery プラグイン</a> <span style="color:#999;font-size:8pt;">October 2009</span>											</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">4</div>
<p>					<a style="margin-right:10px;" href="http://hampom.wordpress.com/2010/03/05/codeigniter-%e3%81%a7%e8%b6%85%e7%b0%a1%e6%98%93%e7%9a%84%e3%81%aa%e3%83%a2%e3%83%90%e3%82%a4%e3%83%ab%e3%83%9a%e3%83%bc%e3%82%b8%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%99%e3%82%8b/">Codeigniter で超簡易的なモバイルページ出力をする</a> <span style="color:#999;font-size:8pt;">March 2010</span><br />1 comment											</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">5</div>
<p>					<a style="margin-right:10px;" href="http://hampom.wordpress.com/2010/04/06/ezauth-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%8d%e8%a8%bc1-7-2%e3%81%a7%e5%8b%95%e4%bd%9c%e3%81%95%e3%81%9b%e3%81%be%e3%81%99%ef%bc%81-codeigniter/">EzAuth でユーザー認証(1.7.2で動作させます！) #Codeigniter</a> <span style="color:#999;font-size:8pt;">April 2010</span><br />1 comment											</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=215&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2011/01/02/2010-in-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>

		<media:content url="http://s0.wp.com/i/annual-recap/meter-healthy2.gif" medium="image">
			<media:title type="html">Healthy blog!</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/01/css-folder.png?w=288" medium="image">
			<media:title type="html">Featured image</media:title>
		</media:content>
	</item>
		<item>
		<title>EzAuth でユーザー認証の仕組み #Codeigniter</title>
		<link>http://hampom.wordpress.com/2010/04/06/ezauth-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%8d%e8%a8%bc%e3%81%ae%e4%bb%95%e7%b5%84%e3%81%bf-codeigniter/</link>
		<comments>http://hampom.wordpress.com/2010/04/06/ezauth-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%8d%e8%a8%bc%e3%81%ae%e4%bb%95%e7%b5%84%e3%81%bf-codeigniter/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 02:46:47 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=202</guid>
		<description><![CDATA[なんだかイメージですが何重もの構造になっているような気がして頭がおかしくなって死ぬ。という印象があって、後で見たときに絶対「どんな仕組みになっているのかさっぱりわからねぇ」と思う自信100%なので書き残しておく。 EzAuth の認証(というより、ロール)設定は以下の組み合わせによって行われています。 1. ユーザーに直接記録される情報。 テーブル「ez_access_keys」に記録されています。user_id は、ez_users の id と紐付けられており、program と access がアクセスが許可されるエリアになります。 2. プログラムに設定される情報。 各コントローラーのインスタンスに protected_pages というクラス変数により設定されます。配列になっており、それぞれ左辺の値はクラスメソッドを指し、右辺の値はアクセスが許可されるエリア情報です。 ez_access_keys の program に設定されている値は、コード上では $this-&#62;ezauth-&#62;program に該当し、ez_access_keys の access に設定されている値は、コード上では protected_pages の右辺に該当する、という事です。 program は「家」 access が「鍵」だとすると、proteced_pages のそれぞれ左辺の値は「部屋」 家(default)に対する鍵(user)で開ける事ができる部屋は、 client部屋と changepw部屋。admin部屋を開ける為には admin という鍵が必要になります。 その鍵を持たせるかどうかを、データベースで設定させる訳です。 一方で、ユーザー「admin」はすべての部屋を開けることのできるオールマイティキーを持っているので、client部屋およびchangepw部屋については自由に出入りができる仕組みです。 なお、protected_pages で指定されていない部屋については単純に「鍵がかかっていない」という認識になりますので、認証不要のページは宣言も不要です。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=202&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>なんだかイメージですが何重もの構造になっているような気がして頭がおかしくなって死ぬ。という印象があって、後で見たときに絶対「どんな仕組みになっているのかさっぱりわからねぇ」と思う自信100%なので書き残しておく。</p>
<p>EzAuth の認証(というより、ロール)設定は以下の組み合わせによって行われています。</p>
<h3>1. ユーザーに直接記録される情報。</h3>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-203" title="EzAuth-ez_access_keys_table" src="http://hampom.files.wordpress.com/2010/04/ezauth-ez_access_keys_table.png?w=700" alt=""   /></p>
<p>テーブル「ez_access_keys」に記録されています。user_id は、ez_users の id と紐付けられており、program と access がアクセスが許可されるエリアになります。</p>
<h3>2. プログラムに設定される情報。</h3>
<p><img class="aligncenter size-full wp-image-206" title="EzAuth-Controller" src="http://hampom.files.wordpress.com/2010/04/ezauth-controller.png?w=700" alt=""   /></p>
<p>各コントローラーのインスタンスに protected_pages というクラス変数により設定されます。配列になっており、それぞれ左辺の値はクラスメソッドを指し、右辺の値はアクセスが許可されるエリア情報です。</p>
<p>ez_access_keys の program に設定されている値は、コード上では $this-&gt;ezauth-&gt;program に該当し、ez_access_keys の access に設定されている値は、コード上では protected_pages の右辺に該当する、という事です。</p>
<blockquote><p><strong>program は「家」 access が「鍵」だとすると、proteced_pages のそれぞれ左辺の値は「部屋」</strong></p>
<p><strong>家(default)に対する鍵(user)で開ける事ができる部屋は、 client部屋と changepw部屋。admin部屋を開ける為には admin という鍵が必要になります。</strong></p>
<p><strong>その鍵を持たせるかどうかを、データベースで設定させる訳です。<br />
</strong></p></blockquote>
<p>一方で、ユーザー「admin」はすべての部屋を開けることのできるオールマイティキーを持っているので、client部屋およびchangepw部屋については自由に出入りができる仕組みです。</p>
<p>なお、protected_pages で指定されていない部屋については単純に「鍵がかかっていない」という認識になりますので、認証不要のページは宣言も不要です。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/202/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=202&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2010/04/06/ezauth-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%8d%e8%a8%bc%e3%81%ae%e4%bb%95%e7%b5%84%e3%81%bf-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/04/ezauth-ez_access_keys_table.png" medium="image">
			<media:title type="html">EzAuth-ez_access_keys_table</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/04/ezauth-controller.png" medium="image">
			<media:title type="html">EzAuth-Controller</media:title>
		</media:content>
	</item>
		<item>
		<title>EzAuth でユーザー認証(1.7.2で動作させます！) #Codeigniter</title>
		<link>http://hampom.wordpress.com/2010/04/06/ezauth-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%8d%e8%a8%bc1-7-2%e3%81%a7%e5%8b%95%e4%bd%9c%e3%81%95%e3%81%9b%e3%81%be%e3%81%99%ef%bc%81-codeigniter/</link>
		<comments>http://hampom.wordpress.com/2010/04/06/ezauth-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%8d%e8%a8%bc1-7-2%e3%81%a7%e5%8b%95%e4%bd%9c%e3%81%95%e3%81%9b%e3%81%be%e3%81%99%ef%bc%81-codeigniter/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 01:12:06 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=192</guid>
		<description><![CDATA[Codeigniter では、カートライブラリは標準で添付されているのにも関わらず認証ライブラリが標準では添付されていない！という個人的にはちょっと悩ましい状況になっています。 公式の Wiki にはサードパーティ製のライブラリが数多く登録されており、認証ライブラリもそのうちの一つで現時点でも数だけなら20以上の登録があります。(※ Category:Libraries -&#62; Authentication ) 悩ましいなぁ、悩ましいなぁ。と_つぶやいて_いたところ、 @Hampom @terakuma CodeIgniterの認証系だれかヒトバシラーで試して欲しいですと言ってみる … http://bizwidgets.biz/user_guide/ezauth.htm http://twitter.com/mataga/status/11474016500 と @matagaさんにリプライをいただいたので、ニート歴1ヶ月で大変お時間に余裕がありそうな私。試してみる事にしました！(お仕事探してますよ！えぇ！) 早速、EzAuth を配布サイト(http://bizwidgets.biz/ezauth/)よりダウンロードしてみました。 アーカイブを展開すると Codeigniter 本体そのものも含まれてしまっている様です。EzAuth としてどこまで改変してあるのか不安＆面倒なので、ちょっと立ち止まってもしまいましたが、解体して、さらに古いバージョンの Codeigniter ベースであった為、現在は非推奨となっている Validation クラスが使われている部分を Form_validation に置き換えるなどの改変も加えています。 前置きが長くなりましたが、EzAuth として Codeigniter に組み込むファイルをアーカイブしました。以下のURLよりダウンロードしてください。 http://hampom.humming-code.com/Codeigniter-EzAuth/EzAuth.tar.gz 2010年4月7日更新: libraries/MY_Session.php のインスタンス記述に誤りがありましたので修正しました。 アーカイブの中に格納されているファイルは以下の通りです。 css や images などは、サンプルページで使用しているものですので公開ディレクトリにコピーしてください。 EzAuth として必要不可欠なファイルは libraries ディレクトリの２ファイル及び、models ディレクトリの１ファイルとなります。 libraries にはコアクラスを継承したファイルがあり、MY_Controller.php ファイルは EzAuth で必要な _remap() が設定されていますので、MY_Controller [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=192&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Codeigniter では、カートライブラリは標準で添付されているのにも関わらず認証ライブラリが標準では添付されていない！という個人的にはちょっと悩ましい状況になっています。</p>
<p>公式の Wiki にはサードパーティ製のライブラリが数多く登録されており、認証ライブラリもそのうちの一つで現時点でも数だけなら20以上の登録があります。(※ <a href="http://codeigniter.com/wiki/Category:Libraries::Authentication/">Category:Libraries -&gt; Authentication</a> )</p>
<p>悩ましいなぁ、悩ましいなぁ。と_つぶやいて_いたところ、</p>
<blockquote><p>@<a rel="nofollow" href="http://twitter.com/Hampom">Hampom</a> @<a rel="nofollow" href="http://twitter.com/terakuma">terakuma</a> CodeIgniterの認証系だれかヒトバシラーで試して欲しいですと言ってみる  …  <a rel="nofollow" href="http://bizwidgets.biz/user_guide/ezauth.htm" target="_blank">http://bizwidgets.biz/user_guide/ezauth.htm</a></p>
<p><a href="http://twitter.com/mataga/status/11474016500">http://twitter.com/mataga/status/11474016500</a></p></blockquote>
<p>と <a href="http://twitter.com/mataga">@mataga</a>さんにリプライをいただいたので、<span style="text-decoration:line-through;">ニート歴1ヶ月で大変お時間に余裕がありそうな</span>私。試してみる事にしました！(お仕事探してますよ！えぇ！)</p>
<p>早速、EzAuth を配布サイト(<a href="http://bizwidgets.biz/ezauth/">http://bizwidgets.biz/ezauth/</a>)よりダウンロードしてみました。</p>
<p>アーカイブを展開すると Codeigniter 本体そのものも含まれてしまっている様です。EzAuth としてどこまで改変してあるのか不安＆面倒なので、ちょっと立ち止まってもしまいましたが、解体して、さらに古いバージョンの Codeigniter ベースであった為、現在は非推奨となっている Validation クラスが使われている部分を Form_validation に置き換えるなどの改変も加えています。</p>
<p>前置きが長くなりましたが、EzAuth として Codeigniter に組み込むファイルをアーカイブしました。以下のURLよりダウンロードしてください。</p>
<p style="text-align:center;"><strong><a href="http://hampom.humming-code.com/Codeigniter-EzAuth/EzAuth.tar.gz">http://hampom.humming-code.com/Codeigniter-EzAuth/EzAuth.tar.gz</a></strong></p>
<p>2010年4月7日更新:<br />
libraries/MY_Session.php のインスタンス記述に誤りがありましたので修正しました。</p>
<p>アーカイブの中に格納されているファイルは以下の通りです。</p>
<p><a href="http://hampom.files.wordpress.com/2010/04/ezauth-directory-tree.png"><img class="aligncenter size-large wp-image-194" title="EzAuth-directory-tree" src="http://hampom.files.wordpress.com/2010/04/ezauth-directory-tree.png?w=300&#038;h=400" alt="" width="300" height="400" /></a></p>
<p>css や images などは、サンプルページで使用しているものですので公開ディレクトリにコピーしてください。</p>
<p>EzAuth として必要不可欠なファイルは libraries ディレクトリの２ファイル及び、models ディレクトリの１ファイルとなります。</p>
<p>libraries にはコアクラスを継承したファイルがあり、MY_Controller.php ファイルは EzAuth で必要な _remap() が設定されていますので、MY_Controller を用いてコントローラーを作成する事で、個別に _remap() を記述しなくとも済むようにしました。 MY_Session.php については、認証後セッションにオブジェクトを入れる仕組みになっているんですが、Codeigniter のバグにより、うまく出し入れができません。本家のフォーラムでも話題になっていたので、そちらのフォーラムにあったスクリプトをそのまま入れています。(<a href="http://codeigniter.com/forums/viewthread/95690/P0/">CI 1.7 Session Bug within object storage</a>)</p>
<p>models にある ezauth_model.php にて認証をすべて担っています。</p>
<p>サンプル通り動かすためには、これらのファイルをすべて Codeigniter に上書きでコピーし、autoload設定をします。</p>
<p><strong>config/autoload.php</strong></p>
<p><pre class="brush: php; first-line: 42;">

$autoload['libraries'] = array('database', 'session');

</pre></p>
<p><pre class="brush: php; first-line: 54;">

$autoload['helper'] = array('url', 'cookie');

</pre></p>
<p>さらに session をデータベースで動作させるよう config/config.php を変更します。</p>
<p>config/config.php</p>
<p><pre class="brush: php; first-line: 220;">

$config['encryption_key'] = &quot;適当にアルファベット＆数値で埋めましょう&quot;;

</pre></p>
<p><pre class="brush: php; first-line: 237;">

$config['sess_use_database']	= TRUE;

</pre></p>
<p>データベースの作成と、config/database.php の設定も忘れずに！テーブルは３つ。さらにセッション用に＋１つ。以下のクエリを実行すれば作成されます。</p>
<p><pre class="brush: sql;">

CREATE TABLE ci_sessions (
  session_id varchar(40) NOT NULL DEFAULT '0',
  ip_address varchar(16) NOT NULL DEFAULT '0',
  user_agent varchar(50) NOT NULL,
  last_activity int(10) unsigned NOT NULL DEFAULT '0',
  user_data text NOT NULL,
  PRIMARY KEY (session_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE ez_access_keys (
  id int(11) NOT NULL AUTO_INCREMENT,
  user_id int(11) DEFAULT NULL,
  program varchar(255) DEFAULT NULL,
  access varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

INSERT INTO ez_access_keys (id, user_id, program, access) VALUES
(1, 1, 'default', 'user'),
(2, 2, 'default', 'admin');

CREATE TABLE ez_auth (
  user_id int(11) NOT NULL,
  `password` varchar(255) DEFAULT NULL,
  reset_code varchar(255) DEFAULT NULL,
  cookie_hash varchar(255) DEFAULT NULL,
  activation_code varchar(255) DEFAULT NULL,
  PRIMARY KEY (user_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO ez_auth (user_id, `password`, reset_code, cookie_hash, activation_code) VALUES
(1, 'f7d13da0a68b723f5b4e5a58d0e3c6e9', '', '45d192365165b2c5e9ed3adeada2acce', '16470a4b35ed04a8a139deab0c52e9a1'),
(2, '1fd8528f5c64c09f96f16b5bb7dc2a3a', NULL, '45bd7b865824d63f4ee930cc903c1a72', 'fde180e7739caa7722f0fd7cdde25c79');

CREATE TABLE ez_users (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(50) DEFAULT NULL,
  email varchar(255) DEFAULT NULL,
  register_date datetime DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

INSERT INTO ez_users (id, username, email, register_date) VALUES
(1, 'client', 'hoge@hoge.com', '2010-04-03 00:00:00'),
(2, 'admin', 'hoge@hoge.com', '2010-04-03 00:00:00');

</pre></p>
<p>設置は以上です！</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/192/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=192&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2010/04/06/ezauth-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%8d%e8%a8%bc1-7-2%e3%81%a7%e5%8b%95%e4%bd%9c%e3%81%95%e3%81%9b%e3%81%be%e3%81%99%ef%bc%81-codeigniter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/04/ezauth-directory-tree.png?w=300" medium="image">
			<media:title type="html">EzAuth-directory-tree</media:title>
		</media:content>
	</item>
		<item>
		<title>Kohana で作る twitter ツール「つどったー」作る編</title>
		<link>http://hampom.wordpress.com/2010/03/16/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d%e4%bd%9c%e3%82%8b%e7%b7%a8/</link>
		<comments>http://hampom.wordpress.com/2010/03/16/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d%e4%bd%9c%e3%82%8b%e7%b7%a8/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 03:28:34 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=183</guid>
		<description><![CDATA[前回でサイトの準備が整いました！ 今回は具体的にプログラムを作っていきます。追加したのは controller 2ファイル。model 1ファイル。view 3ファイルです。 では、/controllers/welcome.php から！ 1. welcome.php welcome.php はデフォルトコントローラーになっており、http://tsudotter.com/ にアクセスすると welcome.php の index が対応します。 wellcome.php には、この他にログアウト( logout ) および、twitter で指定した callback URL( completed ) の3つが存在しています。 index では、$this-&#62;twitter-&#62;check_login() によりログイン状態をチェックされログインされていない場合は、twitter ログイン用URLを取得し view の not_logged_in.php を表示します。一方、ログインされていた場合は Twitter API によりログインユーザーのリスト一覧を取得。さらに、Tsudotter_Model を用いて登録済みのリストを取得しています(ビューにて、登録済みのリストには×を表示したいからです！) では、ビューはどのようになっているのでしょうか！ 2. /views/not_logged_in.php /views/logged_in.php /views/template.php not_logged_in.php このファイルで必要なのは html::anchor() だけですね。welcome.php コントローラーファイルの 41行目で取得した $url をここでは出力しています。 logged_in.php ああ…。 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=183&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://hampom.wordpress.com/2010/03/16/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d%e6%ba%96%e5%82%99%e7%b7%a8/">前回</a>でサイトの準備が整いました！</p>
<p>今回は具体的にプログラムを作っていきます。追加したのは controller 2ファイル。model 1ファイル。view 3ファイルです。</p>
<p>では、/controllers/welcome.php から！</p>
<p><strong>1. welcome.php</strong><br />
<pre class="brush: php;">
&lt;?
class welcome_Controller extends Controller {
    
    public $IN_PRODUCTION = False;
    
    public function __construct()
    {
        parent::__construct();
        
        $this-&gt;twitter = new Twitter;
        $this-&gt;twitter-&gt;check_login();
        $this-&gt;page = new View('template');
    }
    
    public function index()
    {
        if($this-&gt;twitter-&gt;check_login())
        {
            $url = &quot;http://api.twitter.com/1/{$this-&gt;twitter-&gt;user-&gt;username}/lists.json&quot;;
            $list = json_decode($this-&gt;twitter-&gt;oAuthRequest($url));
            
            $this-&gt;tsudotter = new Tsudotter_Model;
            $regist_list = $this-&gt;tsudotter-&gt;get($this-&gt;twitter-&gt;user-&gt;username);

            if(!is_null($regist_list))
            {
              foreach($regist_list as $row)
                $new_regist_list[] = &quot;/{$this-&gt;twitter-&gt;user-&gt;username}/$row&quot;;
            }
            else
            {
              $new_regist_list = null;
            }

            $message = $this-&gt;twitter-&gt;sess-&gt;get('user_message');
            $this-&gt;page-&gt;content = new View('logged_in',array('twitter'=&gt;$this-&gt;twitter,'limits'=&gt;$limits,'lists'=&gt;$list,'regist_list'=&gt;$new_regist_list,'message'=&gt;$message));
        }
        else
        {
            $this-&gt;twitter-&gt;getRequestTokens();
            $url = $this-&gt;twitter-&gt;getAuthorizeUrl();
            $this-&gt;page-&gt;content = new View('not_logged_in',array('url'=&gt;$url));
        }
        
        $this-&gt;page-&gt;render(True);
    }

  
    public function completed()
    {
        if($this-&gt;twitter-&gt;check_login() == False)
        {
            $this-&gt;twitter-&gt;sessionRequestTokens();
            $this-&gt;twitter-&gt;tradeRequestForAccess();
            if($this-&gt;twitter-&gt;storeTokens())
            {
                url::redirect('');
            }
            else
            {
                echo &quot;help - a wierd error occured somewhere. Check your installation again&quot;;
            }
            
        }
        else
        {
            url::redirect('');
        }
    }
    
    public function logout()
    {
        if($this-&gt;twitter-&gt;check_login() != False)
        {
            $this-&gt;twitter-&gt;revokeSession(True);
        }
        url::redirect('');
    }
       
}
</pre></p>
<p>welcome.php はデフォルトコントローラーになっており、http://tsudotter.com/ にアクセスすると welcome.php の index が対応します。 wellcome.php には、この他にログアウト( logout ) および、twitter で指定した callback URL( completed ) の3つが存在しています。</p>
<p>index では、$this-&gt;twitter-&gt;check_login() によりログイン状態をチェックされログインされていない場合は、twitter ログイン用URLを取得し view の not_logged_in.php を表示します。一方、ログインされていた場合は Twitter API によりログインユーザーのリスト一覧を取得。さらに、Tsudotter_Model を用いて登録済みのリストを取得しています(ビューにて、登録済みのリストには×を表示したいからです！)</p>
<p>では、ビューはどのようになっているのでしょうか！</p>
<p><strong>2. /views/not_logged_in.php /views/logged_in.php /views/template.php</strong></p>
<p>not_logged_in.php<br />
<pre class="brush: xml;">
&lt;p style=&quot;padding: 3px;&quot;&gt;
  「つどったー」は Twitter で作成したリストへの登録をオープンにする為のサイトです。まずは、以下のリンクからログインし「リストに集う」許可をください!!&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;padding: 3px; text-align: center;&quot;&gt;
  &lt;?=html::anchor($url, html::image('Sign-in-with-Twitter-darker.png'));?&gt;
&lt;/p&gt;
</pre></p>
<p>このファイルで必要なのは html::anchor() だけですね。welcome.php コントローラーファイルの 41行目で取得した $url をここでは出力しています。</p>
<p>logged_in.php<br />
<pre class="brush: xml;">
&lt;p style=&quot;padding: 3px;&quot;&gt;
  &lt;?=$twitter-&gt;user-&gt;username;?&gt; さん、お手伝いできることはありますか？
&lt;/p&gt;
&lt;? if($message !== false): ?&gt;
&lt;p style=&quot;padding: 3px; font-weight: bold; color: #cc0000;&quot;&gt;
  &lt;?=$message; ?&gt;
&lt;/p&gt;
&lt;? endif; ?&gt;
&lt;p style=&quot;padding: 3px; text-align: right;&quot;&gt;
&lt;?=html::anchor('logout','[ ログアウト ]');?&gt;
&lt;/p&gt;
&lt;? if (count($lists-&gt;lists) &gt; 0): ?&gt;
&lt;p style=&quot;padding: 3px;&quot;&gt;
  &lt;?=$twitter-&gt;user-&gt;username;?&gt; さんの管理されているリストが&lt;?=count($lists-&gt;lists);?&gt;件見つかりました。&lt;br /&gt;
  登録をオープンにするリストを選択ください。
&lt;/p&gt;

&lt;?
  print form::open('list/open');
?&gt;
&lt;table style=&quot;margin: 5px auto 5px auto; width: 490px; border: 1px #E3E3E3 solid; border-collapse: collapse; border-spacing: 0;&quot;&gt;
  &lt;tr&gt;
    &lt;th style=&quot;padding: 5px; border: #E3E3E3 solid; border-width: 0 0 1px 1px; background: #F5F5F5; font-weight: bold; line-height: 120%; text-align: center;&quot;&gt;&amp;nbsp;&lt;/th&gt;
    &lt;th style=&quot;padding: 5px; border: #E3E3E3 solid; border-width: 0 0 1px 1px; background: #F5F5F5; font-weight: bold; line-height: 120%; text-align: center;&quot;&gt;リスト名&lt;/th&gt;
    &lt;th style=&quot;padding: 5px; border: #E3E3E3 solid; border-width: 0 0 1px 1px; background: #F5F5F5; font-weight: bold; line-height: 120%; text-align: center;&quot;&gt;リンク&lt;/th&gt;
  &lt;/tr&gt;
  &lt;? foreach($lists-&gt;lists as $value): ?&gt;
  &lt;tr&gt;
    &lt;td style=&quot;padding: 5px; border: 1px #E3E3E3 solid; border-width: 0 0 1px 1px; background: #FFFFFF; text-align: center;&quot;&gt;
    &lt;? if(is_array($regist_list) &amp;&amp; in_array($value-&gt;uri, $regist_list)): ?&gt;
      &lt;span style=&quot;color: #cc0000;&quot;&gt;×&lt;/span&gt;
    &lt;? else: ?&gt;
      &lt;? print form::radio('chk_list', $value-&gt;uri); ?&gt;
    &lt;? endif; ?&gt;
    &lt;/td&gt;
    &lt;td style=&quot;padding: 5px; border: 1px #E3E3E3 solid; border-width: 0 0 1px 1px; background: #FFFFFF;&quot;&gt;&lt;?=$value-&gt;name;?&gt;&lt;/td&gt;
    &lt;td style=&quot;padding: 5px; border: 1px #E3E3E3 solid; border-width: 0 0 1px 1px; background: #FFFFFF;&quot;&gt;&lt;a href=&quot;http://twitter.com&lt;?=$value-&gt;uri;?&gt;&quot;&gt;&lt;?=$value-&gt;full_name;?&gt;&lt;/a&gt;)&lt;/td&gt;
  &lt;/tr&gt;
  &lt;? endforeach; ?&gt;
&lt;/table&gt;
&lt;?
  print form::submit('submit', '登録');
?&gt;
&lt;?
</pre></p>
<p>ああ…。 css は外部ファイルにまとめるべきでした…。<br />
ページ上部側から、ログアウト、リスト、入力画面と並んでいます。</p>
<p>実際に出力されると以下のようになります。</p>
<p><a href="http://hampom.files.wordpress.com/2010/03/logged_in.png"><img src="http://hampom.files.wordpress.com/2010/03/logged_in.png?w=499&#038;h=341" alt="" title="logged_in" width="499" height="341" class="aligncenter size-large wp-image-186" /></a></p>
<p>さて、もうひとつの template.php はどんな役割を果たしているのでしょうか。<br />
実はコンテンツ部分を除いたヘッダーやフッターなど、統一部分が記述されています。</p>
<p><a href="http://hampom.files.wordpress.com/2010/03/template.png"><img src="http://hampom.files.wordpress.com/2010/03/template.png?w=500&#038;h=357" alt="" title="template" width="500" height="357" class="aligncenter size-large wp-image-188" /></a></p>
<p>つどったーでは、ヘッダーとフッターのほかに右部のコンテンツについても template.php に含めています。</p>
<p>自身のリストを公開するフォームと、他のユーザーのリストに登録するフォームはどちらも /controllers/list.php で処理を行います。</p>
<p><strong>3. list.php</strong><br />
<pre class="brush: php;">
&lt;?
class List_Controller extends Controller {
    
    public function __construct()
    {
        parent::__construct();
        
        $this-&gt;twitter = new Twitter;
        $this-&gt;twitter-&gt;check_login();
        $this-&gt;tsudotter = new Tsudotter_Model;
        $this-&gt;twitter_user = new Twitter_user_Model;
    }
    
    public function open()
    {
      if($this-&gt;twitter-&gt;check_login() != False)
      {
        list($dummy, $nickname, $list_name) = explode(&quot;/&quot;, $this-&gt;input-&gt;post('chk_list'));

        if($this-&gt;twitter-&gt;user-&gt;username == $nickname)
        {
          $inArray = array(
            'nickname' =&gt; $nickname,
            'list_name'=&gt; $list_name
          );

          $this-&gt;tsudotter-&gt;insert_list($inArray);
        }
      }

      url::redirect('');
    }
 
    public function add()
    {
      if($this-&gt;twitter-&gt;check_login() != False)
      {
        $screen_name = $this-&gt;input-&gt;post('screen_name');
        $list_name = $this-&gt;input-&gt;post('list_name');

        $user_list = $this-&gt;tsudotter-&gt;get($screen_name);

        if(in_array($list_name, $user_list))
        {
          $user = $this-&gt;twitter_user-&gt;get_key($screen_name);

          if(is_object($user))
          {
            $this-&gt;list_owner = new Twitter;

            $this-&gt;list_owner-&gt;user = new Twitter_user_Model;
            $this-&gt;list_owner-&gt;user-&gt;set_keys($user-&gt;access_key, $user-&gt;secret_key);

            $url = &quot;http://api.twitter.com/1/{$screen_name}/{$list_name}/members.json&quot;;
            $args = array(
              &quot;id&quot; =&gt; $this-&gt;twitter-&gt;user-&gt;username
              );
            
            $this-&gt;list_owner-&gt;oAuthRequest($url, $args, &quot;POST&quot;);

            $this-&gt;twitter-&gt;sess-&gt;set_flash('user_message', '登録を行いました！');
          }
          else
          {
            $this-&gt;twitter-&gt;sess-&gt;set_flash('user_message', '希望されたリストは登録許可がありません。残念！');
          }

        }
        else
        {
          $this-&gt;twitter-&gt;sess-&gt;set_flash('user_message', '希望されたリストは登録許可がありません。残念！');
        }
        
      }

      url::redirect('');

    }
}
</pre></p>
<p>リストの公開は open。リストへの登録は add で。KTwitter ではログインをするとユーザーの access key および secret key がデータベースに保存されますので、それらの情報を用いて登録希望のユーザー名(screen name)を、Twitter リストAPI により登録します。</p>
<p>最後にモデルですが、KTwitter に含まれる twitter_user.php はそのまま利用し tsudotter_model として1つだけ追加しています。</p>
<p><strong>4.tsudotter.php</strong><br />
<pre class="brush: php;">
&lt;?php
class Tsudotter_model extends Model {

    public function __construct()
    {
        parent::__construct();
    }
    
    public function insert_list($data)
    {
      $this-&gt;db-&gt;insert('tsudotter', $data);
    }
    
    public function get($nickname)
    {
      $this-&gt;db-&gt;where('nickname', $nickname);
      $r = $this-&gt;db-&gt;get('tsudotter');

      if($r-&gt;count() &gt; 0)
      {
        foreach($r as $row)
          $all_array[] = $row-&gt;list_name;

        return $all_array;
      }
      else
      {
        return null;
      }

    }
}
</pre></p>
<p>公開するリスト情報を登録する insert_list() と、登録されているリスト情報を取得する get() の2つだけのファイルです。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=183&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2010/03/16/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d%e4%bd%9c%e3%82%8b%e7%b7%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/03/logged_in.png?w=499" medium="image">
			<media:title type="html">logged_in</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/03/template.png?w=500" medium="image">
			<media:title type="html">template</media:title>
		</media:content>
	</item>
		<item>
		<title>Kohana で作る twitter ツール「つどったー」準備編</title>
		<link>http://hampom.wordpress.com/2010/03/16/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d%e6%ba%96%e5%82%99%e7%b7%a8/</link>
		<comments>http://hampom.wordpress.com/2010/03/16/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d%e6%ba%96%e5%82%99%e7%b7%a8/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 01:28:36 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=164</guid>
		<description><![CDATA[先日の予告通り、Kohana で作った twitter ツール「つどったー」の中身をご紹介しちゃいます。 まずは材料。 1. KohanaPHP (http://www.kohanaphp.com/) 2. KTwitter (http://www.errant.me.uk/ktwitter) それぞれをダウンロードし展開します。 展開したKTwitter のディレクトリを Kohana のディレクトリと統合しました。 ここでは、展開したディレクトリ名を kt に変換し application に存在していて kt に存在していない cahe や helpers、hooks、logs を作りました。 そして、application から kt にディレクトリ指定を変更する必要がありますので tsudotter 直下にある index.php の以下のラインを編集します。 $kohana_application を kt に変更します。 データベースを用意します。 次に、KTwitter で指示されている通りのテーブルを作成します。 さらに、つどったーでは自由に登録できるリストをユーザーに登録してもらいますので、リスト情報を保存するテーブルもあわせて作成します。 /kt/config/ に database.php を作成し、データベースと接続するための設定を保存します。 Twitter に application の登録をしましょう！ twitter にログインし「Applications Using Twitter」にアクセスします。「Register [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=164&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>先日の予告通り、Kohana で作った twitter ツール「つどったー」の中身をご紹介しちゃいます。</p>
<h2>まずは材料。</h2>
<p>1. KohanaPHP (<a href="http://www.kohanaphp.com/">http://www.kohanaphp.com/</a>)</p>
<p><a href="http://hampom.files.wordpress.com/2010/03/kohanaphp.png"><img class="aligncenter size-large wp-image-165" title="kohanaphp" src="http://hampom.files.wordpress.com/2010/03/kohanaphp.png?w=500&#038;h=305" alt="" width="500" height="305" /></a></p>
<p>2. KTwitter (<a href="http://www.errant.me.uk/ktwitter">http://www.errant.me.uk/ktwitter</a>)</p>
<p><a href="http://hampom.files.wordpress.com/2010/03/ktwitter.png"><img class="aligncenter size-large wp-image-166" title="ktwitter" src="http://hampom.files.wordpress.com/2010/03/ktwitter.png?w=500&#038;h=359" alt="" width="500" height="359" /></a></p>
<p>それぞれをダウンロードし展開します。</p>
<p><img class="size-full wp-image-167 alignnone" style="float:left;" title="d-tree" src="http://hampom.files.wordpress.com/2010/03/d-tree.png?w=700" alt=""   />展開したKTwitter のディレクトリを Kohana のディレクトリと統合しました。</p>
<p>ここでは、展開したディレクトリ名を kt に変換し application に存在していて kt に存在していない cahe や helpers、hooks、logs を作りました。</p>
<p><br style="clear:left;" /><br />
そして、application から kt にディレクトリ指定を変更する必要がありますので tsudotter 直下にある index.php の以下のラインを編集します。</p>
<p><pre class="brush: xml; first-line: 19; highlight: [25];">
/**
 * Website application directory. This directory should contain your application
 * configuration, controllers, models, views, and other resources.
 *
 * This path can be absolute or relative to this file.
 */
$kohana_application = 'kt';
</pre></p>
<p>$kohana_application を kt に変更します。</p>
<h2>データベースを用意します。</h2>
<p>次に、KTwitter で指示されている通りのテーブルを作成します。</p>
<p><pre class="brush: sql;">
CREATE TABLE  `twitter_users` (
  `user` VARCHAR( 50 ) NOT NULL ,
  `access_key` TEXT NOT NULL ,
  `secret_key` TEXT NOT NULL ,
  PRIMARY KEY (  `user` )
);
</pre></p>
<p>さらに、つどったーでは自由に登録できるリストをユーザーに登録してもらいますので、リスト情報を保存するテーブルもあわせて作成します。</p>
<p><pre class="brush: sql;">
CREATE TABLE `tsudotter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nickname` varchar(100) NOT NULL,
  `list_name` varchar(200) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `nickname` (`nickname`,`list_name`)
);
</pre></p>
<p>/kt/config/ に database.php を作成し、データベースと接続するための設定を保存します。</p>
<p><pre class="brush: php;">
&lt;?php

$config['default'] = array
(
	'benchmark'     =&gt; TRUE,
	'persistent'    =&gt; FALSE,
	'connection'    =&gt; array
	(
		'type'     =&gt; 'mysql',
		'user'     =&gt; 'ユーザー名',
		'pass'     =&gt; 'パスワード',
		'host'     =&gt; 'localhost',
		'port'     =&gt; FALSE,
		'socket'   =&gt; FALSE,
		'database' =&gt; 'データベース名'
	),
	'character_set' =&gt; 'utf8',
	'table_prefix'  =&gt; '',
	'object'        =&gt; TRUE,
	'cache'         =&gt; FALSE,
	'escape'        =&gt; TRUE
);
</pre></p>
<h2>Twitter に application の登録をしましょう！</h2>
<p>twitter にログインし「<a href="http://twitter.com/oauth_clients">Applications Using Twitter</a>」にアクセスします。「Register a new application」をクリックしアイコンやアプリケーション名などを登録します。</p>
<p>つどったー では以下の通り登録を行いました！</p>
<ul>
<ol>
Application Name: list tsudotter</ol>
<ol>
Application Website: http://tsudotter.com/</ol>
<ol>
Application Type: Browser </ol>
<ol>
Callback URL: http://tsudotter.com/welcome/completed</ol>
<ol>
</ol>
<ol>
Default Access type: Read &amp; Write</ol>
<ol>
Use Twitter for login: チェックを入れる！</ol>
</ul>
<p>登録が完了すると、Consumer key および Consumer secret が得られます。これらの情報を /kt/config/twitter.php に設定します。</p>
<p><pre class="brush: php; first-line: 10;">
// To get consumer key/secret you need to visit http://www.twitter.com/oauth_clients and create an app
// Consumer key from twitter
$config['consumer_key'] = '';
// Consumer Secret from twitter
$config['consumer_secret'] = '';
</pre></p>
<p>これで準備が完了です！<br />
少し長くなりましたので、続きは後ほど！</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/164/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=164&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2010/03/16/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d%e6%ba%96%e5%82%99%e7%b7%a8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/03/kohanaphp.png?w=500" medium="image">
			<media:title type="html">kohanaphp</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/03/ktwitter.png?w=500" medium="image">
			<media:title type="html">ktwitter</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/03/d-tree.png" medium="image">
			<media:title type="html">d-tree</media:title>
		</media:content>
	</item>
		<item>
		<title>Kohana で作る twitter ツール「つどったー」</title>
		<link>http://hampom.wordpress.com/2010/03/15/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d/</link>
		<comments>http://hampom.wordpress.com/2010/03/15/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 12:02:18 +0000</pubDate>
		<dc:creator>hampom</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://hampom.wordpress.com/?p=158</guid>
		<description><![CDATA[以前に「twitter で tsudoる – つどったー 作ったよ！」という事で土曜日の昼になんとなく作った twitter ツールでしたが、その後、やれ LIST機能が本家に付くわ、OAuth なんてものが出現してくるわで、長い間放置していた「つどったー」に手を入れることにしました！ そして、今回は「Kohana」をフレームワークに選び、Kohana に対応した Twitter ライブラリ「Kohana Twitter Library (with Oauth support)」を使ってみました！ この「つどったー」は、あなたが管理しているリストをサイトを通じて自由に登録してもらうことができるようにする事ができます。 ログインすると、twitter の認証後画面が切り替わり、あなたが管理しているリストが表示されます。リストを選択し「登録」ボタンをクリックすると「つどったー」にリスト情報が登録され、他のユーザーからの登録が可能になります。 「Kohana Twitter Library (with Oauth support)」のサンプルをちょこちょこっと書き換えただけで、作られておりますので、そのうちソースコードを恥を忍んで晒します！ サイトはこちら！ → つどったー<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=158&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>以前に「<a href="http://hampom.wordpress.com/2009/06/26/twitter-%E3%81%A7-tsudo%E3%82%8B-%E3%81%A4%E3%81%A9%E3%81%A3%E3%81%9F%E3%83%BC-%E4%BD%9C%E3%81%A3%E3%81%9F%E3%82%88%EF%BC%81/">twitter で tsudoる – つどったー 作ったよ！</a>」という事で土曜日の昼になんとなく作った twitter ツールでしたが、その後、やれ LIST機能が本家に付くわ、OAuth なんてものが出現してくるわで、長い間放置していた「つどったー」に手を入れることにしました！</p>
<p>そして、今回は「<a href="http://www.kohanaphp.com/">Kohana</a>」をフレームワークに選び、Kohana に対応した Twitter ライブラリ「<a href="http://www.errant.me.uk/ktwitter">Kohana Twitter Library (with Oauth support)</a>」を使ってみました！</p>
<p style="text-align:center;"><a href="http://hampom.files.wordpress.com/2010/03/tsudotter-ss.png"><img class="size-large wp-image-159  aligncenter" title="tsudotter-ss" src="http://hampom.files.wordpress.com/2010/03/tsudotter-ss.png?w=500&#038;h=250" alt="" width="500" height="250" /></a></p>
<p>この「つどったー」は、あなたが管理しているリストをサイトを通じて自由に登録してもらうことができるようにする事ができます。</p>
<p>ログインすると、twitter の認証後画面が切り替わり、あなたが管理しているリストが表示されます。リストを選択し「登録」ボタンをクリックすると「つどったー」にリスト情報が登録され、他のユーザーからの登録が可能になります。</p>
<p>「<a href="http://www.errant.me.uk/ktwitter">Kohana Twitter Library (with Oauth support)</a>」のサンプルをちょこちょこっと書き換えただけで、作られておりますので、そのうちソースコードを恥を忍んで晒します！</p>
<p>サイトはこちら！<br />
→ <a href="http://tsudotter.com/">つどったー</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hampom.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hampom.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hampom.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hampom.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hampom.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hampom.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hampom.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hampom.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hampom.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hampom.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hampom.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hampom.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hampom.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hampom.wordpress.com/158/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hampom.wordpress.com&amp;blog=7839877&amp;post=158&amp;subd=hampom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hampom.wordpress.com/2010/03/15/kohana-%e3%81%a7%e4%bd%9c%e3%82%8b-twitter-%e3%83%84%e3%83%bc%e3%83%ab%e3%80%8c%e3%81%a4%e3%81%a9%e3%81%a3%e3%81%9f%e3%83%bc%e3%80%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a06f0bd3765304396bcf4227cd8a387?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hampom</media:title>
		</media:content>

		<media:content url="http://hampom.files.wordpress.com/2010/03/tsudotter-ss.png?w=500" medium="image">
			<media:title type="html">tsudotter-ss</media:title>
		</media:content>
	</item>
	</channel>
</rss>
