<?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>Temporality &#187; zend framework</title>
	<atom:link href="http://www.sylin.net/blog/tag/zend-framework/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sylin.net/blog</link>
	<description>my causerie</description>
	<lastBuildDate>Sat, 05 Mar 2011 18:32:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>JS PDF and Zend_Tag_Cloud</title>
		<link>http://www.sylin.net/blog/2009/05/10/159</link>
		<comments>http://www.sylin.net/blog/2009/05/10/159#comments</comments>
		<pubDate>Sun, 10 May 2009 08:56:41 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[jdpdf]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=159</guid>
		<description><![CDATA[這篇打算一次介紹幾個在 Web Development 上蠻有用的功能 jspdf 一個用 java script 產生 PDF 的 Open Source Library，目前最新版是 20090504 ，支援的瀏覽器以Safari 為主，甚至是 iPhone 上的 Safari，不過也支援 Firefox 以及 Opera ，至於 IE 還在努力中。看 Demo 大概就知道怎麼用了。 稍微看了一下 library 原始檔，看來是 Open Specfication 的幫助，所以把檔案格式填一填就可以產生 PDF 了，所以能夠用 js 在 client 端產生文件，可能是個用得到的 library。 Zend_Tag_Cloud Screencast 之前介紹 Zend Framework 1.8 Release 時提到了 Zend_Tag_Cloud 這個 new feature，同時 Zend_Tag 的作者也提供了使用 [...]]]></description>
			<content:encoded><![CDATA[<p>這篇打算一次介紹幾個在 Web Development 上蠻有用的功能</p>
<h3><a href="http://code.google.com/p/jspdf/">jspdf</a></h3>
<p>一個用 java script 產生 PDF 的 Open Source Library，目前最新版是 20090504 ，支援的瀏覽器以Safari 為主，甚至是 iPhone 上的 Safari，不過也支援 Firefox 以及 Opera ，至於 IE 還在努力中。看 <a href="http://jspdf.googlecode.com/svn/trunk/examples/basic.htm">Demo</a> 大概就知道怎麼用了。<br />
<span id="more-159"></span><br />
稍微看了一下 library 原始檔，看來是 Open Specfication 的幫助，所以把檔案格式填一填就可以產生 PDF 了，所以能夠用 js 在 client 端產生文件，可能是個用得到的 library。</p>
<h3>Zend_Tag_Cloud Screencast</h3>
<p>之前介紹 Zend Framework 1.8 Release 時提到了 Zend_Tag_Cloud 這個 new feature，同時 Zend_Tag 的作者也提供了使用 <a href="http://www.dasprids.de/blog/2009/04/24/zend-tag-cloud-screencast">Zend_Tag_Cloud 的教學影片</a>來示範如何使用這項功能。<br />
嗯，看起來不是很難的功能，說穿了 Tag Cloud 也就是許多清單項目(用 li 或 span 達成) 配合 CSS 做不同大小及排列的變化。</p>
<h3><a href="http://code.google.com/p/sexy-combo/">sexy-combo</a></h3>
<p>這是另一個在 google code 上的 project，屬於 jQuery 的 plugin，可以把原本的 select box 變的比較好用，並結合 auto-complete 的功能，支援 IE6/IE7/Firefox/Opera<br />
還不錯，可是替代性沒那個高。</p>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/05/10/159">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/05/10/159#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/05/10/159&title=JS PDF and Zend_Tag_Cloud">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/jdpdf" rel="tag">jdpdf</a>, <a href="http://www.sylin.net/blog/tag/jquery" rel="tag">jquery</a>, <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/05/10/159/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autoload in ZF 1.8</title>
		<link>http://www.sylin.net/blog/2009/05/03/158</link>
		<comments>http://www.sylin.net/blog/2009/05/03/158#comments</comments>
		<pubDate>Sun, 03 May 2009 06:01:21 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=158</guid>
		<description><![CDATA[最近 Zend Framework 推出了 1.8 Release, 除了許多新功能以外，原有的功能也做了一些改變。對原有的project來說，如果沒用到新功能的部份，那放著不管是沒關係的，可是舊功能的改變卻可能影響到原本程式的行為，所以反而要更注意。 Zend_Loader_Autoloader 的功用(目的) 提供真正的namespace autoloader (之前是不區分namespace的) 提供註冊任意個數的callback 函式作為 autoload function, 其中是以 stack 的方式運作。這是為了克服 PHP 5標準的 spl_autoload 只允許一個 callback function 的問題。 允許最佳化的 namespace 比對方式，提高解析類別的速度。 原本的 autoload 是這樣用的 (最簡單的情況) require_once&#40;'Zend/Loader.php'&#41;; Zend_Loader::registerAutoload&#40;&#41;; 在 ZF 1.8 要改成 require_once&#40;'Zend/Loader/Autoloader.php'&#41;; $autoloader = Zend_Loader_Autoloader::getInstance&#40;&#41;; $autoloader-&#62;setFallbackAutoloader&#40;true&#41;; 這適用於函式庫中沒有自己加的 namepsace，所以會使用預設的 Zend_ 跟 ZendX_，這也是 Zend Framework 中 class 所使用的 prefix [...]]]></description>
			<content:encoded><![CDATA[<p>最近 Zend Framework 推出了 <a href="http://www.sylin.net/blog/2009/05/03/157">1.8 Release</a>, 除了許多新功能以外，原有的功能也做了一些改變。對原有的project來說，如果沒用到新功能的部份，那放著不管是沒關係的，可是舊功能的改變卻可能影響到原本程式的行為，所以反而要更注意。</p>
<p>Zend_Loader_Autoloader 的功用(目的)</p>
<ul>
<li>提供真正的namespace autoloader (之前是不區分namespace的)</li>
<li>提供註冊任意個數的callback 函式作為 autoload function, 其中是以 stack 的方式運作。這是為了克服 PHP 5標準的 spl_autoload 只允許一個 callback function 的問題。</li>
<li>允許最佳化的 namespace 比對方式，提高解析類別的速度。</li>
</ul>
<p><span id="more-158"></span><br />
原本的 autoload 是這樣用的 (最簡單的情況)</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend/Loader.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">registerAutoload</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>在 ZF 1.8 要改成</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend/Loader/Autoloader.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$autoloader</span> <span style="color: #339933;">=</span> Zend_Loader_Autoloader<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$autoloader</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFallbackAutoloader</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>這適用於函式庫中沒有自己加的 namepsace，所以會使用預設的 Zend_ 跟 ZendX_，這也是 Zend Framework 中 class 所使用的 prefix ，這首先讓 Zend Framework 內的 class 能夠自動被載入。而 setFallbackAutoloader(true) 則是讓寫在 include_path 中，又沒有的 namespace 的 class 能被載入，這通常會是在 models/ 之中的檔案。</p>
<p>不過這邊有一點相當奇怪，假設我沒有 model，不需要 setFallbackAutoloader(true)，那麼就應該不需要執行 getInstance()而一樣可以使用 Zend_ 跟 ZendX_ 的類別，但實際上如果我只有 require_once(&#8216;Zend/Loader/Autoloader.php&#8217;) 的話，我之後還是不能使用 Zend_* 的類別，這部份還不清楚是 Zend_Loader_Autoloader 的 bug 還是 spl_autoload 的問題。</p>
<p>新版的改進其實還有 Zend_Tool 跟 Zend_Application 可以用，這部份之後再來研究，先把 Autoload 這部份 Apply 到現有的程式上。</p>
<p>參考資料</p>
<ul>
<li><a href="http://akrabat.com/2009/04/30/zend_loaders-autoloader_deprecated-in-zend-framework-18/">Zend_Loader&#8217;s autoloader deprecated in Zend Framework 1.8</a></li>
<li><a href="http://framework.zend.com/manual/en/zend.loader.autoloader.html">ZF Manual &#8211; Zend Loader Autoloader</a></li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/05/03/158">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/05/03/158#comments">2 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/05/03/158&title=Autoload in ZF 1.8">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/05/03/158/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.8 Released</title>
		<link>http://www.sylin.net/blog/2009/05/03/157</link>
		<comments>http://www.sylin.net/blog/2009/05/03/157#comments</comments>
		<pubDate>Sun, 03 May 2009 05:56:53 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=157</guid>
		<description><![CDATA[Zend Framework 在 4/30 已經推出最新的 1.8 Release 了，這次也提供了許多有用的更新，在開發上也變得更方便了，不過我怎麼覺得有種邪惡的感覺&#8230;. Zend_Tool: 包含 Zend_Tool_Framework 跟 Zend_Tool_Project。 Zend_Tool_Framework 是 ZF 之中用來發展工具的小型 framework，透過這小型的framework 可以設計一些開發所需的小功能，例如用來建立 project 的 scaffolds (鷹架、骨架)、藉由樣板產生一些基本常用的程式碼、建立搜尋的索引資料等。 Tool_Project 則是藉由 Tool_Framework 發展出來，專門用來建立 Web MVC Project，常用的功能包括建立project、目錄結構、增加controller/action以及view 等等，都是由 Zend_Tool_Project所提供。 Zend_Tool 的功能可以說是 ZF 要發展類似 RoR/rake, CakePHP/bake 等工具的基礎，也就是所謂的 meta-programming，用程式來寫(產生)程式。 Zend_Application: 這提供了開發 Web App 所需的 Bootstrap 功能，原本開發者需要自訂 bootstrap 的流程，用來設定環境變數、組態設定等等，現在可以使用 Zend_Application 來完成。 Zend_Loader_Autoloader: 取代原有的Zend_Loader::registerAutoload() Zend_Navigation: 網頁的 [...]]]></description>
			<content:encoded><![CDATA[<p>Zend Framework 在 4/30 已經推出最新的 1.8 Release 了，這次也提供了許多有用的更新，在開發上也變得更方便了，不過我怎麼覺得有種邪惡的感覺&#8230;.</p>
<p><span id="more-157"></span></p>
<ul style="font-size:1.1em;">
<li>Zend_Tool: 包含 Zend_Tool_Framework 跟 Zend_Tool_Project。
<ol>
<li>Zend_Tool_Framework 是 ZF 之中用來發展工具的小型 framework，透過這小型的framework 可以設計一些開發所需的小功能，例如用來建立 project 的 scaffolds (鷹架、骨架)、藉由樣板產生一些基本常用的程式碼、建立搜尋的索引資料等。</li>
<li>Tool_Project 則是藉由 Tool_Framework 發展出來，專門用來建立 Web MVC Project，常用的功能包括建立project、目錄結構、增加controller/action以及view 等等，都是由 Zend_Tool_Project所提供。</li>
</ol>
<p>Zend_Tool 的功能可以說是 ZF 要發展類似 RoR/rake, CakePHP/bake 等工具的基礎，也就是所謂的 meta-programming，用程式來寫(產生)程式。</li>
<li>Zend_Application: 這提供了開發 Web App 所需的 Bootstrap 功能，原本開發者需要自訂 bootstrap 的流程，用來設定環境變數、組態設定等等，現在可以使用 Zend_Application 來完成。</li>
<li><a href="http://framework.zend.com/manual/en/zend.loader.autoloader.html">Zend_Loader_Autoloader</a>: 取代原有的Zend_Loader::registerAutoload()</li>
<li><a href="http://framework.zend.com/manual/en/zend.navigation.html">Zend_Navigation</a>: 網頁的 navigation menu</li>
<li>Zend_CodeGenerator</li>
<li>Zend_Reflection</li>
<li>Zend Server backend for Zend_Cache</li>
<li>Zend_Service_Amazon_Ec2/Zend_Service_Amazon_S3: For Cloud Computing </li>
<li>Dojo 1.3 整合</li>
<li>Zend_Filter_Encrypt/Zend_Filter_Decrypt, 可以把資料藉由 Filter 的方式做加解密。</li>
<li>Zend_Filter_LocalizedToNormalized/_NormalizedToLocalized: 對資料形式做正規化處理，可以處理數字以及日期時間的格式轉換</li>
<li>Zend_File_Transfer:支援上傳進度，可以使用Zend_File_Transfer_Adapter_Http::getProgress() 配合 Zend_ProgressBar</li>
<li>Translation-aware routes</li>
<li>Route chaining capabilities</li>
<li>Zend_Json:在 <a href="http://framework.zend.com/manual/en/zend.json.advanced.html">Zend_Json_Expr</a>支援 expression ，之前好像只支援資料型態(number/string/array/object)</li>
<li>Zend_Http_Client_Adapter_Curl</li>
<li>SOAP input and output header support</li>
<li>Support for keyword field search using query strings</li>
<li>Support for searching across multiple indexes in Zend_Search_Lucene </li>
<li>Significant improvements for Zend_Search_Lucene search result match highlighting capabilities</li>
<li>Zend_Pdf: 支援頁面的縮放、位移、旋轉等<a href="http://framework.zend.com/manual/en/zend.pdf.drawing.html#zend.pdf.drawing.linear-transformations">線性轉換</a>。</li>
<li><a href="http://framework.zend.com/manual/en/zend.tag.cloud.html">Zend_Tag_Cloud</a>, 內建支援 Tag Cloud</li>
<li>Locale support in Zend_Validate_Int and Zend_Validate_Float</li>
<li>Phonecode support in Zend_Locale</li>
<li>Zend_Validate_Db_RecordExists and _RecordNotExists</li>
<li>Zend_Validate_Iban, 支援 IBAN (International Bank Account Number)驗證，我不清楚不是美國人用不用得到 XD</li>
<li>Zend_Validate_File_WordCount</li>
</ul>
<h3>相關連結</h3>
<ul>
<li><a href="http://devzone.zend.com/article/4524-Zend-Framework-1.8.0-Released">Zend Framework 1.8 Released</a></li>
<li><a href="http://twpug.net/modules/news/article.php?storyid=244">中文介紹(1.8 Preview)</a></li>
<li><a href="http://akrabat.com/2009/05/01/zend-framework-tutorial-for-zf-18/">Zend Framework (in 1.8) Tutorial </a></li>
<li><a href="http://www.jaceju.net/blog/?p=536">[PHP-ZF] Zend Framework 1.8 初探</a></li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/05/03/157">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/05/03/157#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/05/03/157&title=Zend Framework 1.8 Released">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/05/03/157/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.7 Release</title>
		<link>http://www.sylin.net/blog/2008/11/18/124</link>
		<comments>http://www.sylin.net/blog/2008/11/18/124#comments</comments>
		<pubDate>Tue, 18 Nov 2008 07:20:27 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=124</guid>
		<description><![CDATA[還蠻準時的.. 把看得懂得部份再整理一次 Zend_Amf AMF0 和 AMF3 支援 Dojo Toolkit 1.2.1 Zend_Service_Twitter, 支援 Twitter Service ZendX_JQuery, 支援 JQuery (as extras library) Metadata API in Zend_Cache (不過我還沒在用 Zend_Cache) Zend_Gdata 支援 Google Book Search, 並支援到 GData v2 提升 Zend_Loader, Zend_Controller, server components 的效能 同上, 手冊並增加新的章節 &#8211; Zend Framework Performance Guide Zend_ProgressBar: 進度元件1 Zend_Config_Writer: 可以用來生 Config file 了.. Zend_Db_Table_Select [...]]]></description>
			<content:encoded><![CDATA[<p>還蠻準時的..<br />
把看得懂得部份再整理一次</p>
<ul>
<li>Zend_Amf AMF0 和 AMF3 支援</li>
<li>Dojo Toolkit 1.2.1</li>
<li>Zend_Service_Twitter, 支援 Twitter Service</li>
<li>ZendX_JQuery, 支援 JQuery (as extras library)</li>
<li>Metadata API in Zend_Cache (不過我還沒在用 Zend_Cache)</li>
<li>Zend_Gdata 支援 Google Book Search, 並支援到 GData v2</li>
<li>提升 Zend_Loader, Zend_Controller, server components 的效能</li>
<li>同上, 手冊並增加新的章節 &#8211; <a href="http://framework.zend.com/manual/en/performance.html">Zend Framework Performance Guide</a></li>
<li>Zend_ProgressBar: 進度元件<sup><a href="http://www.sylin.net/blog/2008/11/18/124#footnote_0_124" id="identifier_0_124" class="footnote-link footnote-identifier-link" title="進度列的顯示要另外處理，主要是提供百分比計算, 及更新的架構">1</a></sup> </li>
<li>Zend_Config_Writer: 可以用來生 Config file 了..</li>
<li>Zend_Db_Table_Select support for Zend_Paginator, 應該是我<a href="http://www.sylin.net/blog/2008/09/14/104">之前</a>想要的那個功能吧</li>
</ul>
<h3>相關資料</h3>
<ul>
<li>完整的 <a href="http://devzone.zend.com/article/4045-Zend-Framework-1.7.0-is-now-available">Release Announce</a></li>
<li>簡單一點的<a href="http://www.zendframeworkinaction.com/2008/11/17/zend-framework-17-has-been-released/">Zend Framework 1.7 has been released!</a></li>
<li><a href="http://www.sylin.net/blog/2008/11/02/118">Zend Framework 1.7 PR</a></li>
</ul>
<ol class="footnotes"><li id="footnote_0_124" class="footnote">進度列的顯示要另外處理，主要是提供百分比計算, 及更新的架構</li></ol><hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2008. |
<a href="http://www.sylin.net/blog/2008/11/18/124">Permalink</a> |
<a href="http://www.sylin.net/blog/2008/11/18/124#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2008/11/18/124&title=Zend Framework 1.7 Release">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2008/11/18/124/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.7</title>
		<link>http://www.sylin.net/blog/2008/11/02/118</link>
		<comments>http://www.sylin.net/blog/2008/11/02/118#comments</comments>
		<pubDate>Sat, 01 Nov 2008 18:31:32 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=118</guid>
		<description><![CDATA[Zend Framework 預計 11/16 會釋出 1.7 Release, 目前則是 1.7 Preview Release. 幾個新的功能及改進: New Zend_AMF component: 提供 Flash 的 RPC 功能, 參考AMFPHP-搭起Flash與PHP的美麗橋樑 Dojo Toolkit 1.2.0 New ZendX_JQuery component: 內建提供 jQuery library(framework) Support for dijit editor Metadata API in Zend_Cache Google book search API Performance enhancements: 效能調校 Application-wide locale with other i18n enhancements: 增強的多國語系功能 File upload form [...]]]></description>
			<content:encoded><![CDATA[<p>Zend Framework 預計 11/16 會釋出 1.7 Release, 目前則是 1.7 Preview Release.<br />
幾個新的功能及改進:
<ul>
<li>New Zend_AMF component: 提供 Flash 的 RPC 功能, 參考<a href="http://blog.eddie.com.tw/2008/10/12/amfphp-tutorial">AMFPHP-搭起Flash與PHP的美麗橋樑</a> </li>
<li>Dojo Toolkit 1.2.0 </li>
<li>New ZendX_JQuery component: 內建提供 jQuery library(framework) </li>
<li>Support for dijit editor </li>
<li>Metadata API in Zend_Cache </li>
<li>Google book search API </li>
<li>Performance enhancements: 效能調校 </li>
<li>Application-wide locale with other i18n enhancements: 增強的多國語系功能 </li>
<li>File upload form element enhancements </li>
</ul>
<h3>參考來源:</h3>
<ul>
<li><a href="http://www.zendframeworkinaction.com/2008/10/31/zf-17-timetables/">ZF 1.7 timetable</a> </li>
<li><a href="http://devzone.zend.com/article/3962-Zend-Framework-1.7-Preview-Release-now-available">Zend Framework 1.7 Preview Release now available</a></li>
<li><a href="http://blog.eddie.com.tw/2008/10/12/amfphp-tutorial">AMFPHP-搭起Flash與PHP的美麗橋樑</a></li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2008. |
<a href="http://www.sylin.net/blog/2008/11/02/118">Permalink</a> |
<a href="http://www.sylin.net/blog/2008/11/02/118#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2008/11/02/118&title=Zend Framework 1.7">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2008/11/02/118/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend_Paginator</title>
		<link>http://www.sylin.net/blog/2008/09/14/104</link>
		<comments>http://www.sylin.net/blog/2008/09/14/104#comments</comments>
		<pubDate>Sun, 14 Sep 2008 07:32:31 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[computer]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=104</guid>
		<description><![CDATA[Zend_Paginator 是 Zend Framework 1.6 的新功能之一 是用來提供作資料分頁的 Component，雖然分頁是個簡單的小功能，可是有時候自己寫又嫌麻煩，所以拿現成的元件來套用也蠻方便的。 Controller 要使用 Zend_Paginator 前，要知道 Zend_Paginator 支援下列四種方式: Array &#8211; 將資料集合以 Array 的形式傳入。 DbSelect &#8211; 將資料庫查詢所需的 Select Query 以 Zend_Db_Select 或字串的形式傳入，會根據 Query 向 DB 抓取對應所需的資料。 Iterator &#8211; 傳 Iteraotr ，沒仔細看，不過使用上應該跟 Array 差不多。 Null &#8211; 不處理資料，只用來處理分頁控制的部份。 以 Array Adapter 為例，在 Controller 裡可以用 $paginator = new Zend_Paginator&#40;new Zend_Paginator_Adapter_Array&#40;$array&#41;&#41;; 或是透過 factory pattern [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 是 <a href="http://framework.zend.com/">Zend Framework</a> 1.6 的新功能之一</p>
<p>是用來提供作資料分頁的 Component，雖然分頁是個簡單的小功能，可是有時候自己寫又嫌麻煩，所以拿現成的元件來套用也蠻方便的。</p>
<h3>Controller</h3>
<p>要使用 <a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 前，要知道 <a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 支援下列四種方式:</p>
<ol>
<li>Array &#8211; 將資料集合以 Array 的形式傳入。</li>
<li>DbSelect &#8211; 將資料庫查詢所需的 Select Query 以 Zend_Db_Select 或字串的形式傳入，會根據 Query 向 DB 抓取對應所需的資料。</li>
<li>Iterator &#8211; 傳 Iteraotr ，沒仔細看，不過使用上應該跟 Array 差不多。</li>
<li>Null &#8211; 不處理資料，只用來處理分頁控制的部份。</li>
</ol>
<p><span id="more-104"></span></p>
<p>以 Array Adapter 為例，在 Controller 裡可以用</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Paginator<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Zend_Paginator_Adapter_Array<span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>或是透過 factory pattern</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow"><span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>接著設定頁數及每頁項目數量</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span>
<span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Default is 10</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$paginator</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<h2>View</h2>
<p>而顯示的部份則交由 view script 來處理。這 View 的處理可分為兩個部份，一個是資料項目的顯示，另一個是分頁功能表的顯示。</p>
<p>資料項目的部份，由於 <a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 實做 SPL 的 <a href="http://www.php.net/%7Ehelly/php/ext/spl/interfaceIteratorAggregate.html" target="_top">IteratorAggregate</a> 介面，所以可以使用 foreach() 很方便地來詢訪資料項目。</p>
<p>分頁功能表(用來選擇上一頁、下一頁、或跳頁的控制像) 則透過 paginationControl() 這個 View Helper 來處理</p>
<p>以下為<a href="http://framework.zend.com/manual/en/zend.paginator.usage.html#zend.paginator.rendering">範例的程式碼</a></p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Example<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
      <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?=</span> <span style="color: #000088;">$item</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginationControl</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Sliding'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_pagination_control.phtml'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
</div></pre><!--END_DEVFMTCODE--></p>
<p><a href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a> 預設提供四種 Scrolling (捲頁) Style: All、Elastic、Jumping和Sliding。Elastic 和 Sliding分別是 Google 和 Yahoo，不過除了 Elastic 會列出比較多頁數以外，我感覺好像沒什麼差別，下面這是 Sliding Style 的例子:</p>
<p><img class="aligncenter" title="Zend_Paginator Sliding Scrolling Style" src="http://framework.zend.com/manual/en/figures/zend.paginator.usage.rendering.control.png" alt="" width="337" height="36" /></p>
<p>All 則是會把所有頁數全部列出來，可以用在使用 select box 選擇頁數的時候。</p>
<p>Manual 裡除了範例程式外，還提供了幾個常用的分頁控制項的的例子，其中有提到 <a href="http://developer.yahoo.com">YDN</a> 的一些資源，是有關一些 UI 或 Web UI 常見的 pattern，還蠻不錯的，可以<a href="http://developer.yahoo.com/ypatterns/">參考看看</a></p>
<h2>Advance</h2>
<p>再來討論一些我遇到的問題跟解決方法</p>
<p>第一個是 Zend_Db_Table 和 Zend_Paginator 的配合，目前雖然有 DbSelect Adapter 可以用，不過傳回來的東西會是 Array，但是因為我把一些邏輯寫在 Zend_Db_Table_Row 裡面，所以希望資料項目能是 Zend_Db_Table_Rowset 或 Zend_Db_Table_Row，所以有人寫了<a href="http://www.noginn.com/2008/08/25/zend_paginator-and-zend_db_table/">Paginator_Adapter_DbTable</a> ，改寫 getItem() 的部份，透過 Zend_Db_Table 去作 fetchAll()，不過這個 Adapter 目前還沒有被官方正式採納，所以我就改成使用 Null Adapter 並且自己管理 Data Item。</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #000088;">$select</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$select</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">limitPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$selectCount</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$selectCount</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">from</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;t&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">&quot;table&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;cnt&quot;</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'COUNT(*)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$cnt</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchRow</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$selectCount</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cnt</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span>
          <span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
</div></pre><!--END_DEVFMTCODE--></p>
<p>再來另外一個問題是有關 Zend_Db_Table 的 Relationship Operation，前面我自己寫兩次 Query 分別去取得資料跟總數已經是個爛方法了，可是如果我要用的資料是透過 findManyToManyRowset() 得到的，那就有問題了，似乎不能使用 from() 去設定 COUNT(*)。</p>
<p>在 <a href="http://www.google.com">Google</a> 上查查看，找到<a href="http://framework.zend.com/issues/browse/ZF-3727;jsessionid=2A7FA62545E84B06F226AFAD5E076F3D?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel">這個作法</a>，發現在呼叫完 findManyToManyRowset() 之後，$select 會被改寫成包含 (inner) join 的 SQL Query，所以我可以拿著這個 $select 去請 Zend_Paginator 幫我處理總資料數目。裡面提到會發生 Exception 的問題似乎已經解決了，所以直接用就可以了</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #000088;">$bugsTable</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Bugs<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$bugsRowset</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$bugsTable</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span>1234<span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$select</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$bugsTable</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$select</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">limitPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$productsRowset</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$bug1234</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">findManyToManyRowset</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Products'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'BugsProducts'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span>
          <span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>另外原來自己查詢 COUNT(*)使用 Null Apdapter 的作法也可以同樣換掉</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="PHP"><div class="devcodeoverflow">
<span style="color: #000088;">$select</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$select</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">limitPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$table</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> Zend_Paginator<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span>
         <span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$numPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></pre><!--END_DEVFMTCODE--></p>
<p>這樣的作法在 Controller 中看起來會滿簡潔的，不過我不確定在校能上會不會有問題，例如說是多做了一次 Query、或是每次都查詢所有的資料。</p>
<h3>參考資料</h3>
<ul>
<li><a href="http://www.noginn.com/2008/08/25/zend_paginator-and-zend_db_table/">Zend_Paginator and Zend_Db_Table</a></li>
<li><a href="http://framework.zend.com/issues/browse/ZF-3727;jsessionid=2A7FA62545E84B06F226AFAD5E076F3D?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel">Clear limitoffset and limitcount parts in Dbselect adapter when getting the total items count</a></li>
<li><a href="http://www.ajaxray.com/blog/2008/08/24/join-problems-with-zend_paginator-and-zend_db_select-objects/">Join Problems with Zend_Paginator and Zend_Db_Select objects</a></li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2008. |
<a href="http://www.sylin.net/blog/2008/09/14/104">Permalink</a> |
<a href="http://www.sylin.net/blog/2008/09/14/104#comments">2 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2008/09/14/104&title=Zend_Paginator">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2008/09/14/104/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend_Layout 的用途及 Web MVC 的介紹</title>
		<link>http://www.sylin.net/blog/2008/04/01/74</link>
		<comments>http://www.sylin.net/blog/2008/04/01/74#comments</comments>
		<pubDate>Tue, 01 Apr 2008 04:06:32 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/2008/04/01/74</guid>
		<description><![CDATA[這邊1 有份 Web Seminar 的投影片，介紹了 Zend_Layout 設計所要解決的問題以及 Zend_Layout and Zend_View 的使用方法。 Zend_Layout 是 Two-Step-View Pattern 的實作 Zend_Layout 以 Decorator Pattern 實做(擴充 Zend_View) Zend_Layout 可以幫助 DRY up code2 Best Practice 良好的程式架構 當變更架構及需求，較方便修改 提供 Partial(), PartialLoop(), PlaceHolder(), Action() 等 Helper 其中有蠻多東西還看不是很懂 查了一些資料，感覺是逐漸往 RoR 的特色去靠近，畢竟 RoR 也是使用大量 Desgin Pattern 做出來的產品，不過效能跟維護性上的平衡就需要自行拿捏 http://lightyror.thegiive.net/2006/12/cssdryer-dry-up-your-css.html 另外還有這篇「如何學習 Zend Framework」裡面提到了 OO、Design Patter、MVC架構的介紹，特別的是提到了這篇「透視 WebMVC」，正是我之前想對 MVC [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://devzone.zend.com/article/3311-Zend_Layout-and-Zend-_View-Enhancements-Webinar" target="_blank">這邊</a><sup><a href="http://www.sylin.net/blog/2008/04/01/74#footnote_0_74" id="identifier_0_74" class="footnote-link footnote-identifier-link" title="Zend_Layout and Zend _View Enhancements Webinar">1</a></sup> 有份 Web Seminar 的投影片，介紹了  Zend_Layout 設計所要解決的問題以及 Zend_Layout and Zend_View 的使用方法。</p>
<ul>
<li>Zend_Layout 是 Two-Step-View Pattern 的實作</li>
<li>Zend_Layout 以 Decorator  Pattern 實做(擴充 Zend_View)</li>
<li>Zend_Layout 可以幫助
<ul>
<li>DRY up code<sup><a href="http://www.sylin.net/blog/2008/04/01/74#footnote_1_74" id="identifier_1_74" class="footnote-link footnote-identifier-link" title="我本來以為DRY up是榨乾的意思，查了一下應該是指 Don&amp;#8217;t Repeat Yourself Principle，整句的意思是提升程式碼以 DRY 優化的程度，可參考 DRY Up Your CSS，當然這邊的 Code 不只是指 CSS ">2</a></sup></li>
<li>Best Practice</li>
<li>良好的程式架構</li>
<li>當變更架構及需求，較方便修改</li>
</ul>
</li>
<li>提供 Partial(), PartialLoop(), PlaceHolder(), Action() 等 Helper</li>
</ul>
<p>其中有蠻多東西還看不是很懂</p>
<p><span id="more-74"></span></p>
<p>查了一些資料，感覺是逐漸往 RoR 的特色去靠近，畢竟 RoR 也是使用大量 Desgin Pattern 做出來的產品，不過效能跟維護性上的平衡就需要自行拿捏</p>
<p>http://lightyror.thegiive.net/2006/12/cssdryer-dry-up-your-css.html</p>
<p>另外還有這篇「<a href="http://blog.roodo.com/jaceju/archives/5781987.html" target="_blank">如何學習 Zend Framework</a>」裡面提到了 OO、Design Patter、MVC架構的介紹，特別的是提到了這篇「<a href="http://www.jaceju.net/resources/webmvc/" target="_blank">透視 WebMVC</a>」，正是我之前想對 MVC 架構作更多瞭解時要找的，因為 Website用的方式和原本的 MVC Pattern 的確有些差異，「透視 WebMVC」這篇從無到有介紹了一次以 MVC 設計 的思考模式，而且程式碼上非常相似 Zend Framework，所以在對應上非常簡單。</p>
<ol class="footnotes"><li id="footnote_0_74" class="footnote"><a href="http://devzone.zend.com/article/3311-Zend_Layout-and-Zend-_View-Enhancements-Webinar" target="_blank">Zend_Layout and Zend _View Enhancements Webinar</a></li><li id="footnote_1_74" class="footnote">我本來以為DRY up是榨乾的意思，查了一下應該是指 Don&#8217;t Repeat Yourself Principle，整句的意思是提升程式碼以 DRY 優化的程度，可參考 <a href="http://lightyror.thegiive.net/2006/12/cssdryer-dry-up-your-css.html">DRY Up Your CSS</a>，當然這邊的 Code 不只是指 CSS </li></ol><hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2008. |
<a href="http://www.sylin.net/blog/2008/04/01/74">Permalink</a> |
<a href="http://www.sylin.net/blog/2008/04/01/74#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2008/04/01/74&title=Zend_Layout 的用途及 Web MVC 的介紹">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/mvc" rel="tag">mvc</a>, <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2008/04/01/74/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.5 Release</title>
		<link>http://www.sylin.net/blog/2008/03/18/73</link>
		<comments>http://www.sylin.net/blog/2008/03/18/73#comments</comments>
		<pubDate>Mon, 17 Mar 2008 17:06:39 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/2008/03/18/73</guid>
		<description><![CDATA[在 Zend Framework 1.5 released 提到 ZF 1.5 正式 Release 的消息 在 1.5 發表的同時，官方網頁也更新了，雖然今天我有去查 manual，可是我不是從首頁連的，所以也沒發現 Zend Framework in Action 的作者也一併更新了 Tutorial: Getting Started with Zend Framework 1.5 ，我看了一下，分辨的出來的差別大概是使用了 Zend Layout 和 Zend Form 的部分，經過這陣子的觀察，這兩個都是蠻不錯的作法，對於處理 View 的部分有不錯的幫助，至於要延伸到 Control 的話，就要在多加強自己功力，看能否有良好的搭配。 從官方網頁進去還可以看到 Zend Technologies Releases Zend Framework 1.5 這裡提到的 1.5 的新特色，這可以和 Zend Framework 1.5 Preview Release 作比對。 最後這還有官方提供的 [...]]]></description>
			<content:encoded><![CDATA[<p>在 <a href="http://www.zendframeworkinaction.com/2008/03/17/zend-framework-15-released/" title="Permanent Link: Zend Framework 1.5 released" rel="bookmark">Zend Framework 1.5 released</a> 提到 ZF 1.5 正式 Release 的消息</p>
<p>在 1.5 發表的同時，<a href="http://framework.zend.com/">官方網頁</a>也更新了，雖然今天我有去查 manual，可是我不是從首頁連的，所以也沒發現</p>
<p><a href="http://www.zendframeworkinaction.com/" title="Zend Framework in Action">Zend Framework in Action</a> 的作者也一併更新了 Tutorial: <a href="http://akrabat.com/zend-framework-tutorial/">Getting Started with Zend Framework 1.5</a> ，我看了一下，分辨的出來的差別大概是使用了 Zend Layout 和 Zend Form 的部分，經過這陣子的觀察，這兩個都是蠻不錯的作法，對於處理 View 的部分有不錯的幫助，至於要延伸到 Control 的話，就要在多加強自己功力，看能否有良好的搭配。</p>
<p>從官方網頁進去還可以看到 <a href="http://devzone.zend.com/article/3270-Zend-Technologies-Releases-Zend-Framework-1.5" target="_blank">Zend Technologies Releases Zend Framework 1.5</a> 這裡提到的 1.5 的新特色，這可以和<br />
<a href="http://www.sylin.net/blog/2008/02/24/70" rel="bookmark" title="Permanent Link to Zend Framework 1.5 Preview Release">Zend Framework 1.5 Preview Release</a> 作比對。</p>
<p>最後這還有官方提供的 <a href="http://www.sylin.net/wiki/display/ZFDEV/Official+ZF+QuickStart">Official ZF QuickStart</a> 可以作參考。</p>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2008. |
<a href="http://www.sylin.net/blog/2008/03/18/73">Permalink</a> |
<a href="http://www.sylin.net/blog/2008/03/18/73#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2008/03/18/73&title=Zend Framework 1.5 Release">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/php" rel="tag">php</a>, <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2008/03/18/73/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.5 Preview Release</title>
		<link>http://www.sylin.net/blog/2008/02/24/70</link>
		<comments>http://www.sylin.net/blog/2008/02/24/70#comments</comments>
		<pubDate>Sat, 23 Feb 2008 18:12:30 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/2008/02/24/70</guid>
		<description><![CDATA[其實這是快一個月前的新聞了: Zend Framework 1.5 Preview Release，積了很久，今天就來仔細研究一下到底有什麼新東西。 我大概從去年(2007) 十二月開始用 Zend Framework ，那時候還是 1.03，我習慣用的是 svn 的版本，這樣處理更新的時候比較方便。 1.5 版主要的特色 New Zend_Form component with support for AJAX-enabled form elements 新的 Zend_Form 來產生表單(Form) ，支援 AJAX，並包含表單驗證、過濾等功能 New action and view helpers for automating and facilitating AJAX requests and alternate response formats 新的 action helper 及 view helper 可以自動處理 AJAX request/response Infocard, [...]]]></description>
			<content:encoded><![CDATA[<p>其實這是快一個月前的新聞了: <a href="http://www.zendframeworkinaction.com/2008/01/29/zend-framework-15-preview-release/" title="Permanent Link: Zend Framework 1.5 Preview Release" rel="bookmark">Zend Framework 1.5 Preview Release</a>，積了很久，今天就來仔細研究一下到底有什麼新東西。</p>
<p>我大概從去年(2007) 十二月開始用 <a href="http://framework.zend.com">Zend Framework</a> ，那時候還是 1.03，我習慣用的是 <a href="http://framework.zend.com/svn/framework/trunk" target="_blank">svn</a> 的版本，這樣處理更新的時候比較方便。</p>
<p>1.5 版主要的特色<span id="more-70"></span></p>
<ul>
<li>New Zend_Form component with support for AJAX-enabled form elements
<ul>
<li>新的 <a href="http://framework.zend.com/manual/en/zend.form.html" title="Zend Form">Zend_Form</a> 來產生表單(Form) ，支援 AJAX，並包含表單驗證、過濾等功能</li>
</ul>
</li>
<li>New action and view helpers for automating and facilitating AJAX requests  and alternate response formats
<ul>
<li>新的 action helper 及 view helper 可以自動處理 AJAX request/response</li>
</ul>
</li>
<li>Infocard, OpenID, and LDAP authentication adapters
<ul>
<li>增加 <a href="http://framework.zend.com/manual/en/zend.infocard.html" target="_blank">Infocard</a>，<a href="http://framework.zend.com/manual/en/zend.auth.adapter.openid.html">OpenID</a> 及 <a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Ldap+-+Michael+B.+Allen">LDAP</a> 認證機制的支援</li>
<li>應該都是在 <a href="http://framework.zend.com/manual/en/zend.auth.html" target="_blank">Zend_Auth</a> 底下的擴充支援吧，前兩個都是支援 SSO 的協定，LDAP 的部分看來目前是還沒 ready</li>
</ul>
</li>
<li>Support for complex Lucene searches, including fuzzy, date-range, and  wildcard queries
<ul>
<li>支援 Apache <a href="http://framework.zend.com/manual/en/zend.search.lucene.html" target="_blank">Lucene</a> Search，Lucene 我也沒碰過，這裡有些中文介紹: 1. <a href="http://plog.longwin.com.tw/news-technology/2007/07/24/search_engine_lucene_study_2007" target="_blank">Search Engine &#8211; Apache Lucene 入手指南</a> 2. <a href="http://zh.wikipedia.org/wiki/Lucene" target="_blank">Wikipedia</a></li>
</ul>
</li>
<li>Support for Lucene 2.1 index file format</li>
<li>Partial, Placeholder, Action, and Header view helpers for advanced view  composition and rendering
<ul>
<li>四種新的 <a href="http://zh.wikipedia.org/wiki/Lucene" target="_blank">View</a> Helper 功能: 1. Partial: "<strong>render a template fragment in its own view scope</strong>"; 2. Placholder: 應該是為了幫助原始碼排版的功能吧; 3. Action: 插入 action 頁面執行結果; 4. Header: 用來生 html header 用的</li>
</ul>
</li>
<li>New Zend_Layout component for automating and facilitating site layouts
<ul>
<li>新的 <a href="http://framework.zend.com/manual/en/zend.layout.html">Zend_Layout</a> ，直接看 <a href="http://akrabat.com/2007/12/11/simple-zend_layout-example/" title="Simple Zend_Layout Example">example</a> 吧，比 document 詳細一點。</li>
</ul>
</li>
<li>UTF-8 support for PDF documents
<ul>
<li><a href="http://framework.zend.com/manual/en/zend.pdf.html">Zend_Pdf</a> 支援 UTF-8</li>
</ul>
</li>
<li>New Technorati, SlideShare, and Remember the Milk web services
<ul>
<li>幾個新的 Zend_Service_*</li>
</ul>
</li>
</ul>
<p>目前個人比較可能用到的大概是 Zend_Form, Action Helper, 和 Zend_Layout 吧，有些技術沒用過也作不出什麼評論 <img src='http://www.sylin.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>以上註釋，以我目前的理解為主，不保證正確。</p>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2008. |
<a href="http://www.sylin.net/blog/2008/02/24/70">Permalink</a> |
<a href="http://www.sylin.net/blog/2008/02/24/70#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2008/02/24/70&title=Zend Framework 1.5 Preview Release">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/php" rel="tag">php</a>, <a href="http://www.sylin.net/blog/tag/zend-framework" rel="tag">zend framework</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2008/02/24/70/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

