<?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/"
	>

<channel>
	<title>jQueryTips by Tee++;</title>
	<atom:link href="http://www.jquerytips.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jquerytips.com</link>
	<description>Coding is fun.</description>
	<lastBuildDate>Thu, 04 Feb 2010 17:18:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Beauty Your CI Step 1 &#8211; Beauty My Model</title>
		<link>http://www.jquerytips.com/2010/02/04/beauty-your-ci-step-beauty-my-model/</link>
		<comments>http://www.jquerytips.com/2010/02/04/beauty-your-ci-step-beauty-my-model/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 15:14:08 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Codeigniter]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=515</guid>
		<description><![CDATA[เอาล่ะครับ ทิ้งช่วงให้รอมาพักนึง ต้องขอโทษด้วย พอดีเป็นคน ธุระ ทั้ง ราชทั้งหลวง เยอะจัด 555+
ตอนแรกที่จะนำเสนอเกี่ยวกับ Long Story ที่ตั้งชื่อตอนซะเก๋ชื่อ &#8220;Beauty Your CI&#8221; เป็นการสร้าง Model (M) ที่มีความสามารถมากกว่าเดิมอย่างเห็นได้ชัด &#8230;
เอ่อแล้วก่อนที่จะเริ่มอ่านบทความนี้ขอให้กลับไปอ่าน มาใช้ &#8220;Zend Framework ใน CI กันเถอะ&#8221; แล้วทำให้ได้ตามตัวอย่างซะก่อน เพราะถ้าทำไม่ได้ บทความนี้ และต่อๆไปก็จะไร้ความหมายไปในทันที เพราะผมใช้ Zend เยอะมากๆ &#8230;
จุดประสงค์หลักของ Beauty your CI ก็คือการสร้างโคด เอนกประสงค์ที่มีคุณสมบัติรองรับ เว็บแอพลิเคชั่น ทุกชนิด โดยออกแบบให้ง่าย และรีดประสิทธิภาพสูงสุด และที่สำคัญและท้าทายที่สุดก็คือ เราจะต้องไม่แตะต้อง โคดอะไรที่อยู่ใน system ทั้งสิ้น ไม่ว่าจะยังไงก็ตาม เพื่อใก้อณาคตเราสามารถอัพเดท Version ได้อย่างไม่เป็นปัญหา
ส่วนจุดประสงค์ของวันนี้ก็คือ การเพิ่มความสามารถให้กับ Model นั่นเอง [...]]]></description>
			<content:encoded><![CDATA[<p>เอาล่ะครับ ทิ้งช่วงให้รอมาพักนึง ต้องขอโทษด้วย พอดีเป็นคน ธุระ ทั้ง ราชทั้งหลวง เยอะจัด 555+</p>
<p>ตอนแรกที่จะนำเสนอเกี่ยวกับ Long Story ที่ตั้งชื่อตอนซะเก๋ชื่อ &#8220;Beauty Your CI&#8221; เป็นการสร้าง Model (M) ที่มีความสามารถมากกว่าเดิมอย่างเห็นได้ชัด &#8230;</p>
<p>เอ่อแล้วก่อนที่จะเริ่มอ่านบทความนี้ขอให้กลับไปอ่าน มาใช้ <a href="http://www.jquerytips.com/2009/01/01/codeigniter-using-zend-framework/">&#8220;Zend Framework ใน CI กันเถอะ&#8221;</a> แล้วทำให้ได้ตามตัวอย่างซะก่อน เพราะถ้าทำไม่ได้ บทความนี้ และต่อๆไปก็จะไร้ความหมายไปในทันที เพราะผมใช้ Zend เยอะมากๆ &#8230;<span id="more-515"></span></p>
<p>จุดประสงค์หลักของ <strong>Beauty your CI</strong> ก็คือการสร้างโคด เอนกประสงค์ที่มีคุณสมบัติรองรับ เว็บแอพลิเคชั่น ทุกชนิด โดยออกแบบให้ง่าย และรีดประสิทธิภาพสูงสุด และที่สำคัญและท้าทายที่สุดก็คือ เราจะต้องไม่แตะต้อง โคดอะไรที่อยู่ใน system ทั้งสิ้น ไม่ว่าจะยังไงก็ตาม เพื่อใก้อณาคตเราสามารถอัพเดท Version ได้อย่างไม่เป็นปัญหา</p>
<p>ส่วนจุดประสงค์ของวันนี้ก็คือ การเพิ่มความสามารถให้กับ Model นั่นเอง ถ้าเคยเคยไปเปิด model ตัวเดิมของมันดูก็จะเห็นได้ว่า มันไม่มีตัวช่วยอะไรทั้งนั้น เป็นเหมือน mask ตัวนึงเท่านั้นเอง วันนี้เราจะมาแก้ไขมันซะใหม่ โดยใช้</p>
<p>1. Zend DB<br />
2. Zend Cache </p>
<p>เพื่อให้เป็นตัวช่วยของ MY_Model ของเรา</p>
<p>ก่อนอื่นให้ไปสร้าง ไฟล์ที่<br />
/application/libraries/<strong>MY_Controller.php</strong> ขึ้นมา ใช่แล้วครับ พิพม์ไม่ผิด MY_Controller จริงๆ </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st0">&#8216;BASEPATH&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="st0">&#8216;No direct script access allowed&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#8216;Zend/Registry.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#8216;Zend/Locale.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#8216;Zend/Cache.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#8216;Zend/Date.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#8216;Zend/Session.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> MY_Controller <span class="kw2">extends</span> Controller <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; parent::<span class="me2">Controller</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>เท่านี้แหละครับ จุดประสงค์ของผมก็คือต้องการให้ MY_Controller.php เป็น Bootstrap แล้วก็เป็นตัว include Zend Lib ที่จะถูกใช้งานโดยรวมเข้ามา ในตอนนี้เราต้องการใช้ Zend Cache ใน MY_Model แต่ก็จะมีจุดอื่นๆ ที่ต้องใช้ Zend_Cache ตัวนี้ด้วยเช่น การ Translate การทำ ACL ดังนั้นเอามันไว้ที่นี่แหละ ดีที่สุด </p>
<p>กลับมาที่ MY_Model ของเรา เราจะเปลี่ยนรูปร่างมันเป็นแบบนี้ &#8230;..</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st0">&#8216;BASEPATH&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="st0">&#8216;No direct script access allowed&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#8216;Zend/Db.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&#8216;Zend/Db/Expr.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> MY_Model <span class="kw2">extends</span> Model <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$parent_name</span> = <span class="kw2">null</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$tbname</span> = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$_hasLoadConstructor</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="re0">$_conn</span> = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="re0">$_cache</span> = <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parent::_assign_libraries<span class="br0">&#40;</span> <span class="br0">&#40;</span><a href="http://www.php.net/method_exists"><span class="kw3">method_exists</span></a><span class="br0">&#40;</span><span class="re0">$this</span>, <span class="st0">&#8216;__get&#8217;</span><span class="br0">&#41;</span> OR <a href="http://www.php.net/method_exists"><span class="kw3">method_exists</span></a><span class="br0">&#40;</span><span class="re0">$this</span>, <span class="st0">&#8216;__set&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> ? <span class="kw2">FALSE</span> : <span class="kw2">TRUE</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">parent_name</span> = <a href="http://www.php.net/strtolower"><span class="kw3">strtolower</span></a><span class="br0">&#40;</span><a href="http://www.php.net/get_class"><span class="kw3">get_class</span></a><span class="br0">&#40;</span><span class="re0">$this</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$this</span>-&gt;_hasLoadConstructor<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span>parent::<span class="re0">$_cache</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$cacheFrontends</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;lifetime&#8217;</span> =&gt; &nbsp;<span class="nu0">3600</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;automatic_serialization&#8217;</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$cacheBackends</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;cache_dir&#8217;</span> =&gt; <span class="re0">$this</span>-&gt;<span class="me1">config</span>-&gt;<span class="me1">site_cache_upload_url</span><span class="br0">&#40;</span><span class="st0">&#8216;database&#8217;</span>, <span class="kw2">true</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;file_name_prefix&#8217;</span> =&gt; <span class="st0">&#8216;db&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;hashed_directory_umask&#8217;</span> =&gt; <span class="st0">&#8216;0777&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;cache_file_umask&#8217;</span> =&gt; <span class="st0">&#8216;644&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;hashed_directory_level&#8217;</span> =&gt; <span class="st0">&#8216;0&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8217;server&#8217;</span> =&gt; <span class="re0">$this</span>-&gt;<span class="me1">config</span>-&gt;<span class="me1">item</span><span class="br0">&#40;</span><span class="st0">&#8216;cache_server&#8217;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;compression&#8217;</span> =&gt; <span class="kw2">true</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::<span class="re0">$_cache</span> = Zend_Cache::<span class="me2">factory</span><span class="br0">&#40;</span><span class="st0">&#8216;Core&#8217;</span>, <span class="re0">$this</span>-&gt;<span class="me1">config</span>-&gt;<span class="me1">item</span><span class="br0">&#40;</span><span class="st0">&#8216;cache_method&#8217;</span><span class="br0">&#41;</span>, <span class="re0">$cacheFrontends</span>, <span class="re0">$cacheBackends</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;_hasLoadConstructor = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log_message<span class="br0">&#40;</span><span class="st0">&#8216;debug&#8217;</span>, <span class="st0">&quot;Model Class Initialized&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> connect<span class="br0">&#40;</span><span class="re0">$profile</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">require</span><span class="br0">&#40;</span>APPPATH.<span class="st0">&#8216;config/database.php&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_null"><span class="kw3">is_null</span></a><span class="br0">&#40;</span><span class="re0">$profile</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$profile</span> = <span class="re0">$active_group</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$dbConf</span> = <span class="re0">$db</span><span class="br0">&#91;</span><span class="re0">$profile</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$params</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;host&#8217;</span> =&gt; <span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;hostname&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;username&#8217;</span> =&gt; <span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;username&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;password&#8217;</span> =&gt; <span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;dbname&#8217;</span> =&gt; <span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;database&#8217;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$conn</span> = Zend_Db::<span class="me2">factory</span><span class="br0">&#40;</span><span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;dbdriver&#8217;</span><span class="br0">&#93;</span>, <span class="re0">$params</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;char_set&#8217;</span><span class="br0">&#93;</span> &amp;&amp; <span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;dbcollat&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$conn</span>-&gt;<span class="me1">Query</span><span class="br0">&#40;</span><span class="st0">&#8216;SET character_set_results=&#8217;</span>.<span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;char_set&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$conn</span>-&gt;<span class="me1">Query</span><span class="br0">&#40;</span><span class="st0">&#8216;SET collation_connection=&#8217;</span>.<span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;dbcollat&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$conn</span>-&gt;<span class="me1">Query</span><span class="br0">&#40;</span><span class="st0">&#8216;SET NAMES &#8216;</span>.<span class="re0">$dbConf</span><span class="br0">&#91;</span><span class="st0">&#8216;char_set&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::<span class="re0">$_conn</span> = <span class="re0">$conn</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> qoute<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">quoteIdentifier</span><span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> select<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> fetchObject<span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">fetchObject</span><span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> fetchAll<span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">fetchAll</span><span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> fetchRow<span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">fetchRow</span><span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> fetchOne<span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">fetchOne</span><span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> fetchCol<span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">fetchCol</span><span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> fetchPair<span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">fetchPair</span><span class="br0">&#40;</span><span class="re0">$sql</span>, <span class="re0">$attrs</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> insert<span class="br0">&#40;</span><span class="re0">$table</span>, <span class="re0">$data</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>self::<span class="re0">$_conn</span>-&gt;<span class="me1">insert</span><span class="br0">&#40;</span><span class="re0">$table</span>, <span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">lastInsertId</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> update<span class="br0">&#40;</span><span class="re0">$table</span>, <span class="re0">$data</span>, <span class="re0">$where</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">update</span><span class="br0">&#40;</span><span class="re0">$table</span>, <span class="re0">$data</span>, <span class="re0">$where</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> delete<span class="br0">&#40;</span><span class="re0">$table</span>, <span class="re0">$where</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">connect</span><span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_conn</span>-&gt;<span class="me1">delete</span><span class="br0">&#40;</span><span class="re0">$table</span>, <span class="re0">$where</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> expr<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">new</span> Zend_Db_Expr<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> cacheSave<span class="br0">&#40;</span><span class="re0">$key</span>, <span class="re0">$data</span>, <span class="re0">$specificLifetime</span>=<span class="kw2">false</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_cache</span>-&gt;<span class="me1">save</span><span class="br0">&#40;</span><span class="re0">$data</span>, <span class="br0">&#40;</span>string<span class="br0">&#41;</span><span class="re0">$key</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="re0">$specificLifetime</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> cacheLoad<span class="br0">&#40;</span><span class="re0">$key</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_cache</span>-&gt;<span class="me1">load</span><span class="br0">&#40;</span><span class="br0">&#40;</span>string<span class="br0">&#41;</span><span class="re0">$key</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> cacheRemove<span class="br0">&#40;</span><span class="re0">$key</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> self::<span class="re0">$_cache</span>-&gt;<span class="me1">remove</span><span class="br0">&#40;</span><span class="br0">&#40;</span>string<span class="br0">&#41;</span><span class="re0">$key</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>โดยในโคดชุดนี้มีสิ่งที่อาจจะทำให้โคดคุณ Error ได้ก็คือ<br />
1. $this->config->site_cache_upload_url(&#8217;database&#8217;, true)<br />
ส่วนนี้เป็นส่วนที่ผมใช้กำนหด path upload cache ครับ แต่ผมเขียนไว้รองรับเรื่องการย้าย File Server ด้วย ในกรณี ขอให้ Force เป็น path ที่จะเก็บ Cache ไปเองก่อนเป็นลักษณะของ Server Path นะครับ</p>
<p>2. &#8217;server&#8217; => $this->config->item(&#8217;cache_server&#8217;),<br />
ส่วนนี้เป็นส่วนที่ผมต้องการให้ Cache ถูกเก็บใน Memcache ใน config ก็คือ host:port นั่นเอง ตอนนี้ comment ทิ้ง ไปทั้ง line ก่อน</p>
<p>3. $this->config->item(&#8217;cache_method&#8217;)<br />
ตรงนี้เป็นส่วนการตั้งค่าครับว่าจะให้ Cache ทำงานด้วยอะไร File, SQLite, Memcached, APC ในตอนนี้ขอให้แก้เป็น File ไปก่อน </p>
<p>ทีนี้ไปดู Config ของผมกัน<br />
Path: /application/config/database.php</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$active_group</span> = <span class="st0">&quot;master&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$active_record</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;hostname&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;localhost&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;username&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;root&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;123&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;database&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;codeigniter&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;dbdriver&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;Mysqli&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;dbprefix&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;pconnect&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;db_debug&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;cache_on&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;cachedir&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;char_set&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;utf8&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;master&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;dbcollat&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;utf8_general_ci&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;hostname&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;localhost&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;username&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;root&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;123&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;database&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;codeigniter&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;dbdriver&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;Mysqli&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;dbprefix&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;pconnect&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;db_debug&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;cache_on&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;cachedir&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;char_set&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;utf8&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8217;slave&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;dbcollat&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;utf8_general_ci&quot;</span>;</div>
</li>
</ol>
</div>
<p>จะเห็นได้ว่าผมมี Config อยู่ 2 ตัวคือ master และ slave โดยเครื่อง master ผมจะให้ทำการ insert, update, delete<br />
ส่วน slave ผมจะให้ทำการ Read อย่างเดียว </p>
<p>โดยที่ slave จะเป็น Replicate DB ของ master (ถ้าใครมี db ตัวเดียว set ให้ทั้ง 2 ตัวเหมือนกันก็จบ)</p>
<p>จากตัวอย่างนี้เราจะใช้งานยังๆไงต่อ ?</p>
<p>สมมุติผมมี blogs เป็น controller ตัวนึง </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Blogs <span class="kw2">extends</span> MY_Controller<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; parent::__construct<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">function</span> index<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// เรียกเป็นตัวเล็กให้หมดเพราะเราแก้ที่ MY_Model แล้ว จาก &quot;$this-&gt;parent_name = strtolower(get_class($this));&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">model</span><span class="br0">&#40;</span><span class="st0">&#8216;model_blogs&#8217;</span>, <span class="st0">&#8216;blogs&#8217;</span><span class="br0">&#41;</span>ว</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$data</span> = <span class="re0">$this</span>-&gt;<span class="me1">blogs</span>-&gt;<span class="me1">fetchAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>ส่วน model ของ blogs ล่ะ ทำยังไง ?</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> model_blogs <span class="kw2">extends</span> MY_Model <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;parent::__constrct<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw2">function</span> fetchAll<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$select</span> = parent::<span class="me2">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$select</span>-&gt;<span class="me1">from</span><span class="br0">&#40;</span><span class="st0">&#8216;blogs&#8217;</span><span class="br0">&#41;</span>-&gt;<span class="me1">order</span><span class="br0">&#40;</span><span class="st0">&#8216;id DESC&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> parent::<span class="me2">fetchAll</span><span class="br0">&#40;</span><span class="re0">$select</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> fetch<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$row</span> = parent::<span class="me2">cacheLoad</span><span class="br0">&#40;</span><span class="st0">&#8216;blog&#8217;</span> . <span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$select</span> = parent::<span class="me2">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$select</span>-&gt;<span class="me1">from</span><span class="br0">&#40;</span><span class="st0">&#8216;blogs&#8217;</span><span class="br0">&#41;</span>-&gt;<span class="me1">where</span><span class="br0">&#40;</span><span class="st0">&#8216;id=?&#8217;</span>, <span class="re0">$id</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$row</span> = parent::<span class="me2">fetchRow</span><span class="br0">&#40;</span><span class="re0">$select</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent::<span class="me2">cacheSave</span><span class="br0">&#40;</span><span class="st0">&#8216;blog&#8217;</span> . <span class="re0">$id</span>, <span class="re0">$row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> update<span class="br0">&#40;</span><span class="re0">$data</span>, <span class="re0">$id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>parent::<span class="me2">update</span><span class="br0">&#40;</span><span class="st0">&#8216;blogs&#8217;</span>, <span class="re0">$data</span>, <span class="st0">&#8216;id=&#8217;</span> . <span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">cacheRemove</span><span class="br0">&#40;</span><span class="st0">&#8216;blogs&#8217;</span> . <span class="re0">$id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span>; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> delete<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>parent::<span class="me2">delete</span><span class="br0">&#40;</span><span class="st0">&#8216;blogs&#8217;</span>, <span class="st0">&#8216;id=&#8217;</span> . <span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">cacheRemove</span><span class="br0">&#40;</span><span class="st0">&#8216;blog&#8217;</span> . <span class="re0">$id</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;returm <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> insert<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> parent::<span class="me2">insert</span><span class="br0">&#40;</span><span class="st0">&#8216;blogs&#8217;</span>, <span class="re0">$data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>ให้สังเกตุ method ของ model นะครับ ในส่วนของ การ update delete fetch มีการทำงานของ cache อย่างสมบูณ์ ทำให้ cache ท่จะได้มี data สดอยู่เสมอ</p>
<p>เท่านี้ MY_Model ของเราก็มีตัวช่วยเพิ่มมากขึ้นแล้วครับ ทั้ง Zend_Db และ Zend_Cache ที่มักจะเอามาใช้อยู่ตลอดเวลาใน model โดยเราไม่ต้องเรียกโหลด </p>
<p>สำหรับบทความนี้ทำให้เราลืม<br />
1. CI DB<br />
2. CI Cache </p>
<p>เก็บขึ้นหิ้งไปเลยครับ CI DB อาจจะมีโอกาสใช้ในอีกบางเรื่องเดี๋ยวจะบอก &#8230;.</p>
<p>ส่วนเรื่องการใช้ fetch แลพ select ของ Zend ขอให้ไปอ่านที่<br />
<a href="http://framework.zend.com/manual/en/zend.db.select.html">http://framework.zend.com/manual/en/zend.db.select.html</a><br />
<a href="http://framework.zend.com/manual/en/zend.db.statement.html">http://framework.zend.com/manual/en/zend.db.statement.html</a></p>
<p>ส่วนเรื่อง Cache มันคงไม่มีมากกว่าที่ผมเขียนเท่าไหร่แล้วสำหรับ Cache DB ลองไล่โคดผมดูคิดว่าน่าจะเข้าใจพอ</p>
<p>จบแล้วครับสำหรับ บทที่ 1 Beauty My Model ยังไงทำกันให้ได้นะครับ จุดนี้คือ Core ถ้าทำไม่ได้ คงไปต่อไม่ได้ แต่ถ้าติดจริงๆ ส่งเมล์มาขอ Open Source ผมได้ แต่อาจจะงง หนักกว่าเก่า เพราะมันเป็น CI Ready To Code ที่โมจนเสร็จหมดทุกจุดแล้ว </p>
<p>Ps. โคดที่เขียนบางส่วนเพิ่งเขียนสดๆ มันใน บล๊อกนี่ล่ะ แน่นอนมันต้อง error บ้างอยู่แล้ว แต่คงไม่มาก ก็คนมันง่วงนี่หว่า -*-</p>
<p>สำหรับวันนี้ ราตรีสวัสดิ์</p>
<p>CREDIT: Idea มาจาก <a href="http://twitter.com/FordAntiTrust">@FordAntiTrust</a> ครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2010/02/04/beauty-your-ci-step-beauty-my-model/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>เฮ้ยจะกลับมา Update แล้ว 555+</title>
		<link>http://www.jquerytips.com/2010/01/28/i-am-back/</link>
		<comments>http://www.jquerytips.com/2010/01/28/i-am-back/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 18:42:18 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Codeigniter]]></category>
		<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=510</guid>
		<description><![CDATA[หายไปทำบ้าทำบอ อยู่ราวๆ ครึ่งปี จนตอนนี้เก็บสะสม ความรู้ใหม่ๆได้เพียบเลย จะค่อยๆ กลับทยอย อัพเดทให้อ่านกันอีกครั้งนะครับ โดยเรื่องที่จะอีัพเดทที่มีเตรียมไว้ในหัวตอนนี้ก็คือ
1. CodeIgniter Ready to Code
อันนี้เป็น CI Structure ที่ผมทำมาเอง ซึ่งตอนนี้ผม ทำเทสหลายๆ ด้าน รวมถึงความง่ายในการเขียน รับรองว่า สุดจี๊ด เลย ทั้งสวยงามน่าใช้ ทั้ง performance ดีเยี่ยม จนคุณลืม CI แบบปกติทิ้งไปได้เลย 
รองรับ
1. การแยก File Server
2. การทำ Replicate Database (Zend Db)
3. การ Caching (Zend Cache)
4. Timezone ของ App ปรับได้ (Zend Date and Zend Local)
5. Translate ทำผ่าน gettext [...]]]></description>
			<content:encoded><![CDATA[<p>หายไปทำบ้าทำบอ อยู่ราวๆ ครึ่งปี จนตอนนี้เก็บสะสม ความรู้ใหม่ๆได้เพียบเลย จะค่อยๆ กลับทยอย อัพเดทให้อ่านกันอีกครั้งนะครับ โดยเรื่องที่จะอีัพเดทที่มีเตรียมไว้ในหัวตอนนี้ก็คือ</p>
<p>1. CodeIgniter Ready to Code<br />
อันนี้เป็น CI Structure ที่ผมทำมาเอง ซึ่งตอนนี้ผม ทำเทสหลายๆ ด้าน รวมถึงความง่ายในการเขียน รับรองว่า สุดจี๊ด เลย ทั้งสวยงามน่าใช้ ทั้ง performance ดีเยี่ยม จนคุณลืม CI แบบปกติทิ้งไปได้เลย <span id="more-510"></span></p>
<p>รองรับ<br />
1. การแยก File Server<br />
2. การทำ Replicate Database (Zend Db)<br />
3. การ Caching (Zend Cache)<br />
4. Timezone ของ App ปรับได้ (Zend Date and Zend Local)<br />
5. Translate ทำผ่าน gettext แทน array (Zend Translate)<br />
6. เอาระบบ Mater page มาใช้แทน view เดิม<br />
7. จัดการเรื่อง ACL ได้สะดวก (Zend ACL)<br />
8. รองรับ user แบบ sub-domain<br />
9. ทำ Auto Resize ได้ทั้งแบบ Crop และแบบ ปกติ โดยไม่ต้องเขียน upload เอง<br />
10. ปรับ performance ในการ call function (Zend Registry)<br />
11. รองรับ API แบบ Rest Protocol (Zend Rest)</p>
<p>ที่สำคัญ ไม่มีการ hack core class ในลักษะณะที่ อัพเดทไม่ได้เด็ดขาด ลืมเรื่อง CI เก่าๆ ที่ผมเขียนมาได้เลย ตัวนี้ จี๊ด จริงๆ คนเขียนยังชอบ 555++</p>
<p>2. jQuery UI แบบ Advance<br />
อันนี้ผมไปลองทำ App ใหญ่ๆ พวก ที่ใช้ RIA เยอะๆ สรุปแล้ว jQuery UI ทำงานได้ดีที่สุด ผมจะเอาแสดงให้ดูทีละนิด ทีละหน่อยกัน</p>
<p>3. 960 Css Grid Framework<br />
ตัว Grid ที่ผมเอามาใช้แล้ว รู้สึกว่ามันสะดวก โครตๆ ยิ่งใช้ร่วมกับ jQuery UI แล้ว จับใจ &#8230;</p>
<p>4. Zend Framework<br />
ของรัก ตัวใหม่ที่รวบรวม Component ปราบเซียนไว้เพียบ </p>
<p>5. Facebook API<br />
เว็บซึ่งดังไปทั่วโลกใน ขณะนี้ แต่ Document API ในภาษาไทยไม่มีเลย ผมไปศึกษามาให้แทนหมดแล้วครับ ทั้ง<br />
FBJS<br />
XFBML<br />
FQL<br />
Facebook Client </p>
<p>งานนี้รับรองมีที่เดียวในไทย &#8230;.</p>
<p>*** ข้อที่ 2-4 นี่อยู่รวมใน ข้อ 1 หมดเลย ***</p>
<p>ยังไงรอติดตามกันนะครับ ทั้งหมดนี้บอกได้คำเดียวว่า &#8220;มหากาพย์&#8221; </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2010/01/28/i-am-back/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>เทคนิคการ Filter class เพื่อประหยัดการใช้งานโคด</title>
		<link>http://www.jquerytips.com/2009/10/29/filter-class/</link>
		<comments>http://www.jquerytips.com/2009/10/29/filter-class/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 16:30:09 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=506</guid>
		<description><![CDATA[จริงๆ ขี้เกียจจะอัพมากๆ ที่ไม่อัพเพราะว่า เร็วๆ นี้ jQueryTips.com กำลังจะย้ายบ้านอ่ะ สาเหตุหลักๆ ที่ผมไม่อัพเลย ในหลายเดือนที่ผ่านมา เพราะกำลัง จะย้ายบ้านนี่แหละ แล้วก็บ้านใหม่ไม่ใช่ WordPress, Drupal หรือ Free CMS อะไรพวกนี้แล้ว แต่เป็น app ที่เขียนเองครับ ทุกชิ้น ทุกขั้นตอนผลิตเองทั้งหมด แล้วก็ที่สำคัญไม่ได้ผลิตมาใช้ คนเดียว แต่เป็นลักษณะ Multi Users ซึ่งความสามารถไม่แพ้ cms พวกนี้แน่นอน บอกได้แค่นี้แหละ เดี๋ยวไม่ลุ้น 
แต่ที่วันนี้ต้องมาอัพเพราะเดี๋ยวกลัวตัวเองจะลืม ผมใช้ jQueryTips แห่งนี้เป็นเหมือน สมุดช่วยจำส่วนตัวน่ะ อิอิ
เคยรู้สึกรำคาญมั้ยครับ กับเวลาที่เราจะทำงานกับ element ก้อนเดียวแต่มันมีหลาย actions ซะเหลือเกิน เช่นกด class นี้วิ่งไปนี่ กดอีก class นึง วิ่งไปทำงานอีกแบบนึง เอาล่ะ สมมุติก่อน
สมุมุติผมมีก้อน element [...]]]></description>
			<content:encoded><![CDATA[<p>จริงๆ ขี้เกียจจะอัพมากๆ ที่ไม่อัพเพราะว่า เร็วๆ นี้ jQueryTips.com กำลังจะย้ายบ้านอ่ะ สาเหตุหลักๆ ที่ผมไม่อัพเลย ในหลายเดือนที่ผ่านมา เพราะกำลัง จะย้ายบ้านนี่แหละ แล้วก็บ้านใหม่ไม่ใช่ WordPress, Drupal หรือ Free CMS อะไรพวกนี้แล้ว แต่เป็น app ที่เขียนเองครับ ทุกชิ้น ทุกขั้นตอนผลิตเองทั้งหมด แล้วก็ที่สำคัญไม่ได้ผลิตมาใช้ คนเดียว แต่เป็นลักษณะ Multi Users ซึ่งความสามารถไม่แพ้ cms พวกนี้แน่นอน บอกได้แค่นี้แหละ เดี๋ยวไม่ลุ้น </p>
<p>แต่ที่วันนี้ต้องมาอัพเพราะเดี๋ยวกลัวตัวเองจะลืม ผมใช้ jQueryTips แห่งนี้เป็นเหมือน สมุดช่วยจำส่วนตัวน่ะ อิอิ</p>
<p>เคยรู้สึกรำคาญมั้ยครับ กับเวลาที่เราจะทำงานกับ element ก้อนเดียวแต่มันมีหลาย actions ซะเหลือเกิน เช่นกด class นี้วิ่งไปนี่ กดอีก class นึง วิ่งไปทำงานอีกแบบนึง เอาล่ะ สมมุติก่อน<span id="more-506"></span></p>
<p>สมุมุติผมมีก้อน element ก้อนนึง ซึ่งภายในก้อนนั้น มีทั้งปุ่ม zoom, delete, edit แต่มันอยู่นก้อนเดียวกันนั่นแหละ แถมไอ้ function พวกนี้มันยังทำงานจากที่อื่นได้อีกแหนะ ดังนั้น แทนที่ผมจะเขียนแยกออกเป็น 3 events ผมก็จะเขียนเหลือ แค่ event เดียวแบบนี้</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;.main-element&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>ev<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> $itm = $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> $target = $<span class="br0">&#40;</span>ev.<span class="me1">traget</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>$target.<span class="kw1">is</span><span class="br0">&#40;</span><span class="st0">&#8216;a.zoom&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> zoom<span class="br0">&#40;</span>$target<span class="br0">&#41;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>$target.<span class="kw1">is</span><span class="br0">&#40;</span><span class="st0">&#8216;a.delete&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">delete</span><span class="br0">&#40;</span>$item<span class="br0">&#41;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>$target.<span class="kw1">is</span><span class="br0">&#40;</span><span class="st0">&#8216;a.edit&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> edit<span class="br0">&#40;</span>$item<span class="br0">&#41;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>จากนั้นก็ไป implement function พวกนี้ตมสะดวก โคดสวยงามขึ้นเยอะเลย ใช่มั้ยล่ะ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/10/29/filter-class/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>jQuery กับคำสั่ง &#8220;data&#8221; เอาไว้ทำไรน้อ?</title>
		<link>http://www.jquerytips.com/2009/10/15/jquery-data/</link>
		<comments>http://www.jquerytips.com/2009/10/15/jquery-data/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 06:06:21 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=502</guid>
		<description><![CDATA[ เอาล่ะๆ มาแล้ว หลังจากได้รับ e-mail จำนวนนึง ไปบ่น ว่า &#8220;ทำไมไม่อัพเดทเลย&#8221; บางคนเขียนมาสอบถามอาการนึกว่าผมป่วยด้วยซ้ำ 555++ ก็เลย คิดว่าจะมาอัพเดท สักบทความนึง
 จริงๆ ช่วงนี้ก็ยังไม่ค่อยว่างนักหรอก แต่ กลัวคนจะคิดว่า หายไปไหน จะทิ้งเว็บนี้เหรอ ก็เลยคิดว่า มาอัพเดทสักหน่อย ดีกว่า
 สำหรับเรื่องที่จะมาบ่นวันนี้ เป็นคำสั่งนึงใน jQuery ครับ ซึ่งผมคิดว่ามันมีประโยชน์ดี คำสั่งนั้นคือ &#8220;data&#8221; นั่นเองครับ ปกติเวลาเราจะทำค่า hidden หรือฝากค่าไปกับตัวแปร javascript ที่เป็นลักษณะชั่วคราว เก็บไว้เปรัยบเทียบอ้างอิง ก็มักจะเขียนเช่น



$&#40;&#8216;#enter&#8217;&#41;.click&#40;function&#40;&#41; &#123;


&#160; &#160; &#160; &#160; $&#40;&#8216;input:hidden&#8217;&#41;.val&#40;&#8217;ssss&#8217;&#41;;


&#160;&#125;&#41;;



 หรือ



&#60;a href=&#34;javascript:store(&#8217;value&#8217;)&#34;&#62;Store my value&#60;/a&#62;



 แล้วเอาไป push ลง array หรือ new variable ใหม่มาเพื่อเก็บไว้
 [...]]]></description>
			<content:encoded><![CDATA[<p> เอาล่ะๆ มาแล้ว หลังจากได้รับ e-mail จำนวนนึง ไปบ่น ว่า &#8220;ทำไมไม่อัพเดทเลย&#8221; บางคนเขียนมาสอบถามอาการนึกว่าผมป่วยด้วยซ้ำ 555++ ก็เลย คิดว่าจะมาอัพเดท สักบทความนึง</p>
<p> จริงๆ ช่วงนี้ก็ยังไม่ค่อยว่างนักหรอก แต่ กลัวคนจะคิดว่า หายไปไหน จะทิ้งเว็บนี้เหรอ ก็เลยคิดว่า มาอัพเดทสักหน่อย ดีกว่า</p>
<p> สำหรับเรื่องที่จะมาบ่นวันนี้ เป็นคำสั่งนึงใน jQuery ครับ ซึ่งผมคิดว่ามันมีประโยชน์ดี คำสั่งนั้นคือ &#8220;data&#8221; นั่นเองครับ ปกติเวลาเราจะทำค่า hidden หรือฝากค่าไปกับตัวแปร javascript ที่เป็นลักษณะชั่วคราว เก็บไว้เปรัยบเทียบอ้างอิง ก็มักจะเขียนเช่น</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;#enter&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;input:hidden&#8217;</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="st0">&#8217;ssss&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p> หรือ</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;a href=&quot;javascript:store(&#8217;value&#8217;)&quot;&gt;Store my value&lt;/a&gt;</div>
</li>
</ol>
</div>
<p> แล้วเอาไป push ลง array หรือ new variable ใหม่มาเพื่อเก็บไว้<span id="more-502"></span></p>
<p> หรือบางคนอาาจจะเอาไปฝากไว้กับ id, class, rel อะไรก็ตามแต่เหอะ มันทำให้โคดดูเลอะเทอะมากเลยทีเดียว</p>
<p> แต่ถ้ามาลองใช้ data เนี่ย มันจะสะดวกกว่ามาก และเก็บค่าได้หลายแบบทั้ง string, object, array คือเรียกว่าเกือบจะเหมือน memcached เลย</p>
<p> เอาล่ะมาลองดูวิธีการทำงานของมันกัน ง่ายมาก!!!</p>
<p>อาทิเช่น ผมต้องการทิ้งค่าอะไรสักอย่างไว้ใน DOM ผมก็จะเขียนแค่ว่า</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;#somewhereclick&#8217;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> old_value = $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&#8216;count&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&#8216;before is &#8216;</span> + old_value<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&#8216;count&#8217;</span>, old_value + <span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; after<span class="br0">&#40;</span><span class="st0">&#8216;after is &#8216;</span> + $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&#8216;count&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>เท่านี้เองครับ ง่ายๆ สบายๆ</p>
<p>ลองไปดูตัวอย่างของเว็บนี้ดูครับ<br />
<a href="http://www.bennadel.com/blog/1404-jQuery-Data-Method-Associates-Data-With-DOM-Elements-SWEET-ASS-SWEET-.htm">http://www.bennadel.com/blog/1404-jQuery-Data-Method-Associates-Data-With-DOM-Elements-SWEET-ASS-SWEET-.htm</a></p>
<p>จะเห็นว่าเค้าเอา properties มาเก็บไว้ใน data ทั้งหมด โดยไม่จำเป็นต้องเอาไปเก็บไว้ในค่า hidden หรือ หรือฝังไว้กับ class, id, rel แต่อย่างใด</p>
<p>เอาล่ะครับ วันนี้ก็มาเขียนให้หายคิดถึงกันแค่นี้ก่อนละกัน เจอกันโอกานหน้าครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/10/15/jquery-data/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Codeigniter validate file before submitting</title>
		<link>http://www.jquerytips.com/2009/07/12/codeigniter-validate-file-befor-submitting/</link>
		<comments>http://www.jquerytips.com/2009/07/12/codeigniter-validate-file-befor-submitting/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 15:55:30 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Codeigniter]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=494</guid>
		<description><![CDATA[หายไปนานโครตๆ เลย ยังไม่ได้ตายไปกับหวัด 2009 นะครับ แต่ช่วงนี้มันมีนู่นมีนี่ตลอดเลย ตอนนี้ก็ยังไม่เสร็จ แต่กลัวจะโดนลืมไปซะก่อน เลยขอแวะมาอัพเดท กันสั่งบทความ วันนี้ขอเป็นเรื่อง CI แล้วกันนะครับ
ไม่รู้คนอื่นจะเคยเจอปัญหาแบบเดียวกับผมรึเปล่า คือว่า ผมอยากจะ validate file ก่อน แล้วค่อย submit ไม่ใช่ submit แล้วค่อยมานั่งตรวจทาน กัน แบบนี้มันไม่ประทับใจ ผมก็เลยลองหาวิธีที่คอื่นเค้าใช้แก้กัน ก็ได้มา 2-3 วิธี แต่ลองๆไปแล้ว มันก็ยังไม่ใช่ที่อยากได้อยู่ดี เลยเอาไอ้ที่หาๆ มา ยำๆ กันจนได้เป็นวิธีของตัวเองซึ่งผมคิดว่า Work More เลยเอามาให้ลองกันดูนี่แหละ
เป็นวิธี extends form_validation ของ CI ครับ มาเพิ่ม method ของตัวเองเข้าไป เรามาเริ่มที่ตรงนี้กันก่อนเลยละกัน
1. extends form_validation
Path: application/libraries/MY_Form_validation.php



&#60;?php &#160;if &#40; ! defined&#40;&#8216;BASEPATH&#8217;&#41;&#41; exit&#40;&#8216;No [...]]]></description>
			<content:encoded><![CDATA[<p>หายไปนานโครตๆ เลย ยังไม่ได้ตายไปกับหวัด 2009 นะครับ แต่ช่วงนี้มันมีนู่นมีนี่ตลอดเลย ตอนนี้ก็ยังไม่เสร็จ แต่กลัวจะโดนลืมไปซะก่อน เลยขอแวะมาอัพเดท กันสั่งบทความ วันนี้ขอเป็นเรื่อง CI แล้วกันนะครับ</p>
<p>ไม่รู้คนอื่นจะเคยเจอปัญหาแบบเดียวกับผมรึเปล่า คือว่า ผมอยากจะ validate file ก่อน แล้วค่อย submit ไม่ใช่ submit แล้วค่อยมานั่งตรวจทาน กัน แบบนี้มันไม่ประทับใจ ผมก็เลยลองหาวิธีที่คอื่นเค้าใช้แก้กัน ก็ได้มา 2-3 วิธี แต่ลองๆไปแล้ว มันก็ยังไม่ใช่ที่อยากได้อยู่ดี เลยเอาไอ้ที่หาๆ มา ยำๆ กันจนได้เป็นวิธีของตัวเองซึ่งผมคิดว่า Work More เลยเอามาให้ลองกันดูนี่แหละ</p>
<p>เป็นวิธี extends form_validation ของ CI ครับ มาเพิ่ม method ของตัวเองเข้าไป เรามาเริ่มที่ตรงนี้กันก่อนเลยละกัน<span id="more-494"></span></p>
<p><strong>1. extends form_validation</strong><br />
<em>Path: application/libraries/MY_Form_validation.php</em></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> ! <a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st0">&#8216;BASEPATH&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="st0">&#8216;No direct script access allowed&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> MY_Form_validation <span class="kw2">extends</span> CI_Form_validation <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> required_file<span class="br0">&#40;</span><span class="re0">$str</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_FILES</span><span class="br0">&#91;</span><span class="re0">$str</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$_FILES</span><span class="br0">&#91;</span><span class="re0">$str</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8217;size&#8217;</span><span class="br0">&#93;</span> == <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">FALSE</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> valid_file_types<span class="br0">&#40;</span><span class="re0">$str</span>, <span class="re0">$vals</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_FILES</span><span class="br0">&#91;</span><span class="re0">$str</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_FILES</span><span class="br0">&#91;</span><span class="re0">$str</span><span class="br0">&#93;</span><span class="br0">&#41;</span> AND <span class="re0">$_FILES</span><span class="br0">&#91;</span><span class="re0">$str</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8217;size&#8217;</span><span class="br0">&#93;</span> &gt; <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$allowed_types</span> = <a href="http://www.php.net/explode"><span class="kw3">explode</span></a><span class="br0">&#40;</span><span class="st0">&#8216;,&#8217;</span>, <span class="re0">$vals</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">require_once</span><span class="br0">&#40;</span>APPPATH.<span class="st0">&#8216;config/mimes&#8217;</span>.EXT<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$allowed_types</span> <span class="kw1">as</span> <span class="re0">$ext</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ext</span> = <a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><a href="http://www.php.net/strtolower"><span class="kw3">strtolower</span></a><span class="br0">&#40;</span><span class="re0">$ext</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mime</span> = <span class="re0">$mimes</span><span class="br0">&#91;</span><span class="re0">$ext</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_array"><span class="kw3">is_array</span></a><span class="br0">&#40;</span><span class="re0">$mime</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$mime</span> <span class="kw1">as</span> <span class="re0">$m</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$allows</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="re0">$m</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$allows</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="re0">$mime</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$file_info</span> = <a href="http://www.php.net/getimagesize"><span class="kw3">getimagesize</span></a><span class="br0">&#40;</span><span class="re0">$_FILES</span><span class="br0">&#91;</span><span class="re0">$str</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;tmp_name&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$file_mime</span> = <span class="re0">$file_info</span><span class="br0">&#91;</span><span class="st0">&#8216;mime&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/in_array"><span class="kw3">in_array</span></a><span class="br0">&#40;</span><span class="re0">$file_mime</span>, <span class="re0">$allows</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>ส่วนนี้ผมเพิ่ม method เข้าไป 2 ตัว คือ require_file, valid_file_types นะครับ (ขอไม่อธิบายการทำงานของโคด ลองแกะดูนะ นิดเดียวเอง)</p>
<p>2. ที่ language ผมจะเพิ่ม ส่วนของ method ใหม่ผมด้วย<br />
<em>Path: application/language/th/form_validation_lang.php</em></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#### Old Code ####</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* &#8212;&#8212;&#8212; Extended &#8212;&#8212;&#8212;-*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$lang</span><span class="br0">&#91;</span><span class="st0">&#8216;required_file&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;%s ไม่สามารถเว้นว่างได้&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$lang</span><span class="br0">&#91;</span><span class="st0">&#8216;valid_file_types&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;%s มีชนิดไม่ตรงกับที่ได้รับอนุญาติ&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>ตรงส่วนภาษานี่ของคนอื่นอาจจะอยู่ใน system/language/en/form_validation_lang.php ก็ได้นะครับ แต่พอดีผม copy มาให้มันอ่านที่ application หมดแล้ว</p>
<p><strong>3. ที่ views ส่วนของ form</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;form method=&quot;post&quot; action=&quot;/path/form/save&quot; multipart/form-data&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;div id=&quot;hidden_fields&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;input type=&quot;hidden&quot; name=&quot;file_checker&quot; value=&quot;file_upload&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;
</div>
</li>
<li class="li2">
<div class="de2">&lt;label&gt;&lt;input type=&quot;file&quot; name=&quot;file_upload&quot; /&gt;&lt;/label&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;lable&gt;&lt;input type=&quot;submit&quot; value=&quot;upload&quot; /&gt;&lt;/label&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/form&gt;</div>
</li>
</ol>
</div>
<p>สังเกตุดูดีๆ ผมจะมี hidden ไปตัวนึง โดย value ค่าชื่อของ input file นั่นเอง (เพราะว่า CI มันจะ validate แค่ $_POST)<br />
<strong><br />
4. ขั้นตอนการ validation</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> some_method<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">library</span><span class="br0">&#40;</span><span class="st0">&#8216;form_validation&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">form_validation</span>-&gt;<span class="me1">set_rules</span><span class="br0">&#40;</span><span class="st0">&#8216;file_checker&#8217;</span>, <span class="st0">&#8216;Form Name Here&#8217;</span>, <span class="st0">&#8216;required|required_file|valid_file_types[jpg,jpeg,gif,png]&#8216;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">form_validation</span>-&gt;<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="kw2">TRUE</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="co1">// do something for success case.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">else</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// do something for handler errors</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>สังเกตุอีกนิดนึงว่า ทำไม ต้องมีค่า required ให้กับ file_checker ด้วย ผมเอาไว้เผื่อในกรณีที่มีคนมือบอน เอา Firebug ไป Remove Element มันออกจะได้ ไม่ต้องผ่านกันไปเลย อิอิ</p>
<p>เท่านี้ก็จบแล้วครับ งาน validate ก่อน upload ของเรา ง่ายใช่มั้ยล่ะ </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/07/12/codeigniter-validate-file-befor-submitting/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>พัก อัพเดทบล๊อกชั่วคราว</title>
		<link>http://www.jquerytips.com/2009/06/14/jquerytips-sleeping-time/</link>
		<comments>http://www.jquerytips.com/2009/06/14/jquerytips-sleeping-time/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 16:04:36 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=486</guid>
		<description><![CDATA[อย่าเพิ่งตกใจไปครับ ยังไม่ได้หายไปไหน แต่ว่ากำลังไป &#8220;ตามฝัน&#8221; ตัวเอง อิอิ ว่าไปนั่น คือว่าช่วงนี้ผมยุ่งๆ หลายเรื่องเลย ทั้งเรื่อง&#8230;. (ไม่อยากบอก แต่เพื่อนๆ บางคน คงรู้ -*-) แล้วก็เรื่องงาน ตัวเอง ที่ใช้เวลา มานานมากก็ไม่ขยับเสียที ตอนนี้เริ่มรู้สึกว่าอยากทำจริงๆ จังๆขึ้นมาแล้ว ก็จะขอเอาเวลา ส่วนใหญ่ไป ทุ่มให้กับตรงนั้น
คือว่า &#8230;
ผมกำลังจะไปทำงาน ศิลปะ ครับ แต่ว่า เป็นศิลปะ ของ web application ซึ่ง ตอนนี้งานก็เริ่มเดินไปเรื่อยๆ แล้ว พอเอาเวลาไปทำงานตรงนั้น เลยกลัวว่า พอไม่ได้มาอัพเดทบล๊อกเลย เพื่อนๆ จะคิดว่าผมหายไปไหน ก็บอกตรงนี้เลยครับ ว่ายังไม่ได้หายไปไหน บล๊อกก็จะพยายาม อัพ แต่คงไม่ถี่ เหมือนเดิมแล้วล่ะ จะเอาเฉพาะ อะไรที่ &#8220;เด็ด&#8221; จริงๆ มาอัพ 
ยังไงก็อย่าเพิ่งทิ้งกันไปไหนนะครับ ^^
Mr.Tee Plus Plus
(I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>อย่าเพิ่งตกใจไปครับ ยังไม่ได้หายไปไหน แต่ว่ากำลังไป &#8220;ตามฝัน&#8221; ตัวเอง อิอิ ว่าไปนั่น คือว่าช่วงนี้ผมยุ่งๆ หลายเรื่องเลย ทั้งเรื่อง&#8230;. (ไม่อยากบอก แต่เพื่อนๆ บางคน คงรู้ -*-) แล้วก็เรื่องงาน ตัวเอง ที่ใช้เวลา มานานมากก็ไม่ขยับเสียที ตอนนี้เริ่มรู้สึกว่าอยากทำจริงๆ จังๆขึ้นมาแล้ว ก็จะขอเอาเวลา ส่วนใหญ่ไป ทุ่มให้กับตรงนั้น</p>
<p>คือว่า &#8230;</p>
<p>ผมกำลังจะไปทำงาน ศิลปะ ครับ แต่ว่า เป็นศิลปะ ของ web application ซึ่ง ตอนนี้งานก็เริ่มเดินไปเรื่อยๆ แล้ว พอเอาเวลาไปทำงานตรงนั้น เลยกลัวว่า พอไม่ได้มาอัพเดทบล๊อกเลย เพื่อนๆ จะคิดว่าผมหายไปไหน ก็บอกตรงนี้เลยครับ ว่ายังไม่ได้หายไปไหน บล๊อกก็จะพยายาม อัพ แต่คงไม่ถี่ เหมือนเดิมแล้วล่ะ จะเอาเฉพาะ อะไรที่ &#8220;เด็ด&#8221; จริงๆ มาอัพ </p>
<p>ยังไงก็อย่าเพิ่งทิ้งกันไปไหนนะครับ ^^</p>
<p><strong>Mr.Tee Plus Plus</strong><br />
<em>(I&#8217;m Coding like playing the piano.)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/06/14/jquerytips-sleeping-time/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>jQuery เด็ดๆ</title>
		<link>http://www.jquerytips.com/2009/06/03/jquery-links/</link>
		<comments>http://www.jquerytips.com/2009/06/03/jquery-links/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 16:19:30 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=483</guid>
		<description><![CDATA[jQuery เป็น JS Framework ซึ่งมีวิธีการเขียนค่อนข้าง่าย และมี syntax ที่ไม่ซับซ้อน รวมไปถึง selectors ที่เตรียมมา เรียกได้ว่า &#8220;สมบูรณ์&#8221; เลยทีเดียว ทั้งยังมีการ update ที่ต่อเนื่อง และการเอาใจใส่ จากทีมพัฒนา
ด้วยเหตุนี้เราจึงเห็นได้ว่า plugin ของ jQuery มีมากกว่า plugin ของ JS Framework ตัวอื่นๆ อย่างเทียบไม่ติด และ คนเขียน blog กับมันก็มีไม่น้อย 
และหลังจากผมนั่งเก็บ tags เกี่ยวกับ jQuery มานาน จนตอนนี้มีถึง 83 tags เแล้ว ก็เลยอยากจะเอามา share ให้เพื่อนๆ ลองอ่านกันดูบ้าง 
ลองดูนะครับ น่าจะพอมีประโยชน์บ้างแหละ
jQuery tags by Tee++;
]]></description>
			<content:encoded><![CDATA[<p>jQuery เป็น JS Framework ซึ่งมีวิธีการเขียนค่อนข้าง่าย และมี syntax ที่ไม่ซับซ้อน รวมไปถึง selectors ที่เตรียมมา เรียกได้ว่า &#8220;สมบูรณ์&#8221; เลยทีเดียว ทั้งยังมีการ update ที่ต่อเนื่อง และการเอาใจใส่ จากทีมพัฒนา</p>
<p>ด้วยเหตุนี้เราจึงเห็นได้ว่า plugin ของ jQuery มีมากกว่า plugin ของ JS Framework ตัวอื่นๆ อย่างเทียบไม่ติด และ คนเขียน blog กับมันก็มีไม่น้อย </p>
<p>และหลังจากผมนั่งเก็บ tags เกี่ยวกับ jQuery มานาน จนตอนนี้มีถึง 83 tags เแล้ว ก็เลยอยากจะเอามา share ให้เพื่อนๆ ลองอ่านกันดูบ้าง <span id="more-483"></span></p>
<p>ลองดูนะครับ น่าจะพอมีประโยชน์บ้างแหละ<br />
<a href="http://delicious.com/tenshin99/jquery">jQuery tags by Tee++;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/06/03/jquery-links/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Hasing algorithm</title>
		<link>http://www.jquerytips.com/2009/06/03/hasing-algorithm/</link>
		<comments>http://www.jquerytips.com/2009/06/03/hasing-algorithm/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 16:09:12 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=481</guid>
		<description><![CDATA[วันนี้ขอพูดเรื่อง performance อีกสักที สำหรับคนที่เคยจับ application ที่ใหญ่ๆ หน่อย ที่มีจำนวน file upload มหาศาล หรือ เอาง่ายๆ แค่หลัก 2-3 หมื่นขึ้นไป ก็จะเห็นได้ว่า หลังจากนั้น application จะทำงาน ค่อยๆ ช้าลงๆๆๆ จนในที่สุด ก็ทะลุ node ที่เป็น limit ของ UNIX ไป (จำไม่ได้ 5 หรือ 6 หมื่นนี่ล่ะ)
วิธีแก้ที่ดีที่สุดก็คือการ ซอย folder ออกเป็น ย่อยๆ เพื่อไม่ให้ไฟล์ ไปรวมกันอยู่ที่เดียว เช่น



parent &#8211;


&#160; &#160; &#160; &#160; &#160; &#160; &#124;- child1


&#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>วันนี้ขอพูดเรื่อง performance อีกสักที สำหรับคนที่เคยจับ application ที่ใหญ่ๆ หน่อย ที่มีจำนวน file upload มหาศาล หรือ เอาง่ายๆ แค่หลัก 2-3 หมื่นขึ้นไป ก็จะเห็นได้ว่า หลังจากนั้น application จะทำงาน ค่อยๆ ช้าลงๆๆๆ จนในที่สุด ก็ทะลุ node ที่เป็น limit ของ UNIX ไป (จำไม่ได้ 5 หรือ 6 หมื่นนี่ล่ะ)</p>
<p>วิธีแก้ที่ดีที่สุดก็คือการ ซอย folder ออกเป็น ย่อยๆ เพื่อไม่ให้ไฟล์ ไปรวมกันอยู่ที่เดียว เช่น</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">parent &#8211;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |- child1</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |- child2</div>
</li>
</ol>
</div>
<p>แบบนี้ไฟล์ก็จะไม่รวมอยู่ที่เดียวกัน แต่ จะมีปัญหาตามมาว่า แล้วเราจะ บริหารจัดการยังไง T_T</p>
<p>ตรงนี้แหละที่ ต้องมี hashing algorithm แบบต่างๆ ขึ้นมา ผมจะลอง ไล่ไปดูทีละแบบละกัน<span id="more-481"></span></p>
<p><strong>แบบที่นึง hash ตัวเลข</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> int_hash<span class="br0">&#40;</span><span class="re0">$no</span>, <span class="re0">$max</span>=<span class="nu0">5000</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$no</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&#8216;Value must be numeric&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$p0</span> = <a href="http://www.php.net/ceil"><span class="kw3">ceil</span></a><span class="br0">&#40;</span><span class="re0">$no</span> / <span class="br0">&#40;</span><span class="re0">$max</span> * <span class="re0">$max</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$p1</span> = <a href="http://www.php.net/ceil"><span class="kw3">ceil</span></a><span class="br0">&#40;</span><span class="re0">$no</span> % <span class="re0">$max</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$p0</span>.<span class="st0">&#8216;/&#8217;</span>.<a href="http://www.php.net/sprintf"><span class="kw3">sprintf</span></a><span class="br0">&#40;</span><span class="st0">&#8216;%0&#8242;</span>.<a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$max</span><span class="br0">&#41;</span>.<span class="st0">&#8216;d&#8217;</span>, <span class="re0">$p1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>แบบนี้จะเป็นการ hash 2 level ง่ายๆ แต่ว่า ได้ผลดีทีเดียว โดยที่ ชั้นแรกจะ hash ได้สูงสุดถึง 25 ล้าน ก่อนที่จะสร้าง folder ใหม่ นั่นก็คือ ค่าตั้งแต่ </p>
<p>1 &#8211; 25000000 จะถูกเก็บเข้า Folder 1 ถ้ามากกว่า จะถูกสร้าง Folder 2 ขึ้นมา ส่วนในชั้นที่ 2 จะถูกสร้าง folder มาสูงสุดตามที่เรากำหนดค่า max ลงไป โดยในที่นี้ก็จะมี 0001 &#8211; 5000</p>
<p>จากนั้น data ที่ลงท้ายด้วย 1 ก็จะจัดเก็บเข้า folder 1 และ เป็นอย่างนี้เรื่อยไป </p>
<p>วิธีนี้เหมาะกับการ hash ค่าอะไรก็ตามที่เป็นตัวเลข เช่น auto increment หารทำงานจะค่อนข้างดีทีเดียว เพราะ data จะค่อยๆ หยอดไปทีละ 1 และมีขนาดพอๆ กันเกือบทุก folder แต่ว่า มัน hash ได้เฉพาะ ตัวเลข ลองมาดูวิธีต่อมากัน</p>
<p><strong>แบบที่ 2 hash โดยใช้ crc32</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> crc32_hash<span class="br0">&#40;</span><span class="re0">$key</span>, <span class="re0">$max</span>=<span class="nu0">5000</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><a href="http://www.php.net/crc32"><span class="kw3">crc32</span></a><span class="br0">&#40;</span><span class="re0">$key</span><span class="br0">&#41;</span> &amp; 0&#215;7fffffff<span class="br0">&#41;</span> % <span class="re0">$max</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>วิธี hash แบบนี้สาารถนำไป hash string ได้ด้วย โดยอาศัย ความสามารถของ CRC32 ซึ่งเป็น algorithm hash ในรูปแบบ 32-bit checksum โดยค่าที่เหมือนกัน จะได้ค่าเดียวกันเสมอ จากนั้น เอามาเข้า สมการเพื่อให้ได้ folder ไม่เกินตามที่เรากำหนด เราก็จะได้ สูตรง่ายๆ มาแล้ว อันนี้เอาไว้ hash แบบชั้นเดียวง่ายๆ แต่ใครอยากไป เพิ่ม level ก็เขียนต่อเอาครับ </p>
<p>แล้วก็วิธีสุดท้ายที่ผมจะแนะนำ โดยอันนี้ผมแกะออกมาก จาก Zend Cache ในส่วนของการ hash level </p>
<p><strong>โดยคราวนี้เราจะใช้ algorithm adler32 </strong></p>
<p>หลักการก็โครตจะแสนง่าย แต่ว่า ปะสิทธิภาพค่อนข้างจะดี </p>
<p>สมมุติผมมี string คำว่า &#8221; I wanna be a star. &#8221;</p>
<p>พอทำการ hash</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">hash<span class="br0">&#40;</span><span class="st0">&#8216;adler32&#8242;</span>, <span class="st0">&#8216;I wanna be a star.&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// ค่าที่ได้คือ ef050538</span></div>
</li>
</ol>
</div>
<p>จากนั้นผมก็มาคำนวน level โดยถ้า 1 level ผมก็จะทำการ ตัด string ที่ตำแหน่งแรกออกมาสร้าง dir ย่อย ก็จะได้ผลลัพธ์ ออกมาดังนี้</p>
<p>path: e/ef050538.hash</p>
<p>ถ้า 2 level ล่ะ </p>
<p>path: e/ef/ef050538.hash</p>
<p>และก็เป็นแบบนี้ไล่ๆ ไป ตามแต่ ที่เรากำหนด level</p>
<p>สำหรับวิธีนี้ node structure เราก็จะออกมาในรูปแบบ &#8220;สามเหลี่ยม&#8221; โดยยิ่งมี level มาก มันก็จะยิ่งซอยเยอะมาก แต่ว่า ถ้าเยอะมากไป มันก็เท่ากับว่า เราไม่ได้ hash อะไรเลย ดังนั้น สำหรับ application ระดับ กลาง &#8211; ใหญ่ ผมขอแนะนำที่ 2 level ก็พอครับ </p>
<p>สุดท้าย ผมเอา algorithm แบบที่ 3 มาเขียน ในรูปแบบ class เรียบร้อยแล้ว จะเอาไปใช้เลยก็ได้นะครับ โดยตัวอย่างที่ผมเอาไปใส่ไว้ ด้านล่างไฟล์ เป็นการทำ hash เพื่อ save text ธรรมดา ผมว่าเอาไป ประยุกต์ใช้งานกับระบบ cache หรือ file upload จะเห็นผลมากกว่า </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Hashin library</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @Author Tee++;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* @Published 03/06/2009</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Hashing <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$parent_dir</span> = <span class="st0">&#8216;temp&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$prefix</span> = <span class="st0">&quot;prefix_&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$level</span> = <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$algorithm</span> = <span class="st0">&#8216;adler32&#8242;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$make_dir</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// file tailer</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$show_file</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$extension</span> = <span class="st0">&#8216;hash&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> do_hash<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$hashing</span> = <span class="re0">$this</span>-&gt;<span class="me1">hash_algorithm</span><span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$path</span> = <span class="re0">$this</span>-&gt;<span class="me1">parent_dir</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$hash_dirs</span> = <span class="re0">$this</span>-&gt;_path<span class="br0">&#40;</span><span class="re0">$hashing</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$path</span> .= <span class="st0">&#8216;/&#8217;</span>.<span class="re0">$hash_dirs</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">make_dir</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;_makePathRecursive<span class="br0">&#40;</span><span class="re0">$path</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">show_file</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$path</span> .= <span class="st0">&#8216;/&#8217;</span>.<span class="re0">$hashing</span>.<span class="st0">&#8216;.&#8217;</span>.<span class="re0">$this</span>-&gt;<span class="me1">extension</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$path</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> hash_algorithm<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> hash<span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">algorithm</span>, <span class="re0">$string</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> _path<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">level</span> &lt;= <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$directories</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span>=<span class="nu0">1</span>; <span class="re0">$i</span>&lt;=<span class="re0">$this</span>-&gt;<span class="me1">level</span>; <span class="re0">$i</span>++<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array_push"><span class="kw3">array_push</span></a><span class="br0">&#40;</span><span class="re0">$directories</span>, <span class="re0">$this</span>-&gt;<span class="me1">prefix</span>.<a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$string</span>, <span class="nu0">0</span>, <span class="re0">$i</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/implode"><span class="kw3">implode</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/&#8217;</span>, <span class="re0">$directories</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> _makePathRecursive<span class="br0">&#40;</span><span class="re0">$dir</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/is_dir"><span class="kw3">is_dir</span></a><span class="br0">&#40;</span><span class="re0">$dir</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mkdir"><span class="kw3">mkdir</span></a><span class="br0">&#40;</span><span class="re0">$dir</span>, <span class="nu0">0777</span>, <span class="kw2">TRUE</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">##### Example Usage #####</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">$string = &quot;IWannaBeARockStar&quot;;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">$hashing = new Hashing;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">$path = $hashing-&gt;do_hash($string);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">file_put_contents($path, $string);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/06/03/hasing-algorithm/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>วิธีการเช็คว่าทำการโหลดเสร็จรึยัง</title>
		<link>http://www.jquerytips.com/2009/05/29/tell-mw-when-it-loaded/</link>
		<comments>http://www.jquerytips.com/2009/05/29/tell-mw-when-it-loaded/#comments</comments>
		<pubDate>Fri, 29 May 2009 03:57:47 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=475</guid>
		<description><![CDATA[ครั้งก่อนหน้านี้ผมเคยแนะนำวิธีการเช็ค iframe ว่าโหลดเสร็จรึยัง ไปทีนึง แต่ว่า วันนี้ผม จะแนะนำ อีกแบบก็คือ การเช็คหลังจากที่เราเพิ่ง แก้ไข attribute บางอย่างลงไป
ใช้งานกับ Iframe



$&#40;&#8216;#myIframe&#8217;&#41;.attr&#40;&#8217;src&#8217;, &#8217;somecontent.html&#8217;&#41;.load&#40;function&#40;&#41; &#123;


&#160; &#160; alert&#40;&#8216;Iframe Loaded&#8217;&#41;;


&#125;&#41;;




ใช้งานกับ Image



$&#40;&#8216;#myImage&#8217;&#41;.attr&#40;&#8217;src&#8217;, &#8216;image.jpg&#8217;&#41;.load&#40;function&#40;&#41; &#123;


&#160; &#160; alert&#40;&#8216;Image Loaded&#8217;&#41;;


&#125;&#41;;



จบละ สั้นมะ
]]></description>
			<content:encoded><![CDATA[<p>ครั้งก่อนหน้านี้ผมเคยแนะนำวิธีการเช็ค <a href="http://www.jquerytips.com/2008/10/19/check-load-status-using-jquery/">iframe ว่าโหลดเสร็จรึยัง</a> ไปทีนึง แต่ว่า วันนี้ผม จะแนะนำ อีกแบบก็คือ การเช็คหลังจากที่เราเพิ่ง แก้ไข attribute บางอย่างลงไป</p>
<p><strong>ใช้งานกับ Iframe</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;#myIframe&#8217;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8217;src&#8217;</span>, <span class="st0">&#8217;somecontent.html&#8217;</span><span class="br0">&#41;</span>.<span class="me1">load</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&#8216;Iframe Loaded&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p><span id="more-475"></span></p>
<p><strong>ใช้งานกับ Image</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;#myImage&#8217;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8217;src&#8217;</span>, <span class="st0">&#8216;image.jpg&#8217;</span><span class="br0">&#41;</span>.<span class="me1">load</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&#8216;Image Loaded&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>จบละ สั้นมะ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/05/29/tell-mw-when-it-loaded/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[แนวคิด] การทำ Multi languages ใน DB</title>
		<link>http://www.jquerytips.com/2009/05/28/multi-languages-db/</link>
		<comments>http://www.jquerytips.com/2009/05/28/multi-languages-db/#comments</comments>
		<pubDate>Wed, 27 May 2009 18:41:47 +0000</pubDate>
		<dc:creator>Tee++;</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jquerytips.com/?p=473</guid>
		<description><![CDATA[อันนี้ออกตัวไว้ก่อนเลย ว่าเป็นแนวคิด ทีผมคิดเองทำเอง อาจจะไม่ได้มาตรฐานนักแต่สำหรับผม it work!
เรื่องการออกแบบ multi languages คิดว่าคงจะพอมีความรู้ความเข้าใจกันอยู่บ้าง ก็ แค่ทำไฟล์ แยก ออกไป
Dir: english
Dir: thai
จากนั้นข้างใน โฟลเดอร์ก็บรรจุ ไปด้วย perfix_lang.php โดยมีตัวแปร เหมือนกันทุกประการ และก็ เอาไป echo ออกก็เท่านั้นเอง 
แต่ ถ้าเปลี่ยนมาเป็น content จาก db ล่ะ ซึ่งมัน fix field ไว้ จะไปเพิ่มเป็น title_thai, title_english มันก็ดูน่าเกลียด พิลึก เราจะแก้ปัญหาไงดี &#8230;
ผมมี idea มาเสนอครับ คือเราก็เก็บแบบนี้ สมมุติ ข้อมูลด้านล่างนี่ ออกมาจาก db ละกันนะ 



&#60;?php



$string = &#60;&#60;&#60;LANG



[lang=th]40 ส.ว.เปิดเวทีชำแหละโครงการเช่ารถเมล์ 4,000 คัน [...]]]></description>
			<content:encoded><![CDATA[<p>อันนี้ออกตัวไว้ก่อนเลย ว่าเป็นแนวคิด ทีผมคิดเองทำเอง อาจจะไม่ได้มาตรฐานนักแต่สำหรับผม it work!</p>
<p>เรื่องการออกแบบ multi languages คิดว่าคงจะพอมีความรู้ความเข้าใจกันอยู่บ้าง ก็ แค่ทำไฟล์ แยก ออกไป</p>
<p>Dir: english<br />
Dir: thai</p>
<p>จากนั้นข้างใน โฟลเดอร์ก็บรรจุ ไปด้วย perfix_lang.php โดยมีตัวแปร เหมือนกันทุกประการ และก็ เอาไป echo ออกก็เท่านั้นเอง </p>
<p>แต่ ถ้าเปลี่ยนมาเป็น content จาก db ล่ะ ซึ่งมัน fix field ไว้ จะไปเพิ่มเป็น title_thai, title_english มันก็ดูน่าเกลียด พิลึก เราจะแก้ปัญหาไงดี &#8230;<span id="more-473"></span></p>
<p>ผมมี idea มาเสนอครับ คือเราก็เก็บแบบนี้ สมมุติ ข้อมูลด้านล่างนี่ ออกมาจาก db ละกันนะ </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;?php
</div>
</li>
<li class="li1">
<div class="de1">$string = &lt;&lt;&lt;LANG
</div>
</li>
<li class="li1">
<div class="de1">[lang=th]40 ส.ว.เปิดเวทีชำแหละโครงการเช่ารถเมล์ 4,000 คัน โดยที่ประชุมมีมติเป็นเอกฉันท์ บวกกับเสียงส.ว.ส่วนใหญ่ไม่เห็นด้วย แนะรัฐบาลไม่ควรปล่อยให้โครงการนี้ผ่านความเห็นชอบ พิสูจน์ความจริงใจของรัฐบาล ได้กลิ่นทะแม่งเสนอโครงการหวังสะสมเสบียงรับมือเลือกตั้ง[/lang]
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">[lang=en]• Death toll from Cyclone Aila climbs to 168 in India, Bangladesh
</div>
</li>
<li class="li1">
<div class="de1">• Suicide car bomber kills 30, wounds at least 250 in Pakistan
</div>
</li>
<li class="li1">
<div class="de1">• Underground nuclear test shows North Korean threat is growing
</div>
</li>
<li class="li1">
<div class="de1">• Smoke from tire fire forces evacuation of small East Texas town
</div>
</li>
<li class="li1">
<div class="de1">• $7,000 fine proposed for Wal-Mart worker&#8217;s stampede death
</div>
</li>
<li class="li2">
<div class="de2">• Study: Late perimenopause stage may affect memory
</div>
</li>
<li class="li1">
<div class="de1">• Peter Zezel, who played 15 seasons in the NHL, dies at 44
</div>
</li>
<li class="li1">
<div class="de1">• NBA · NHL · MLB · NFL · French Open · Soccer · NASCAR[/lang]
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">[lang=jp]
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; * いつも殴り合うんだけど、すぐ仲直りするっておかしいですか？
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; ケンカになると擦り傷、青タンができるほどの殴り合い。でもケンカした後はすぐ仲直り。これっておかしいですか？
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; * ケンカの後ずっと黙ってしまう夫にどう対処したらいい？
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; ひたすらダンマリをし続ける夫に対して対処法が知りたい妻。回答には、同じタイプの男性からダンマリの理由とアドバイス。
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; * 仕事に支障なく家出はできる？
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; 実家は距離的に無理。仕事もしていて荷物を考えると面倒になって……妙案はありますか？　という質問に厳しいアドバイスが。
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">[/lang]
</div>
</li>
<li class="li1">
<div class="de1">LANG;
</div>
</li>
<li class="li1">
<div class="de1">?&gt;</div>
</li>
</ol>
</div>
<p>จากนั้นเวลาเราจะแยกมันออกก็ใช้ ความสามารถของ regular มาจัดการ </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> string_lang<span class="br0">&#40;</span><span class="re0">$string</span>, <span class="re0">$lang</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st0">&#8216;~<span class="es0">\[</span>lang='</span>.<span class="re0">$lang</span>.<span class="st0">'<span class="es0">\]</span>(.*?)<span class="es0">\[</span><span class="es0">\/</span>lang<span class="es0">\]</span>~is&#8217;</span>, <span class="re0">$string</span>, <span class="re0">$matches</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/nl2br"><span class="kw3">nl2br</span></a><span class="br0">&#40;</span><span class="re0">$matches</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> string_lang<span class="br0">&#40;</span><span class="re0">$string</span>, <span class="st0">&#8216;th&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;&lt;hr /&gt;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> string_lang<span class="br0">&#40;</span><span class="re0">$string</span>, <span class="st0">&#8216;en&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;&lt;hr /&gt;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> string_lang<span class="br0">&#40;</span><span class="re0">$string</span>, <span class="st0">&#8216;jp&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;&lt;hr /&gt;&quot;</span>;</div>
</li>
</ol>
</div>
<p>เท่านี้ เราก็สามารถจัดการได้แล้ว ง่ายนิดเดียวเอง </p>
<p>ที่สำคัญ regular อย่าลืม modifier s  ด้วยละกัน</p>
<blockquote><p>s (PCRE_DOTALL)<br />
If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl&#8217;s /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier. </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.jquerytips.com/2009/05/28/multi-languages-db/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
