<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.joetsuihk.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>jquery</title>
 <link>http://www.joetsuihk.com/free_tags/jquery</link>
 <description>The taxonomy view with a depth of 0.</description>
 <language>en</language>
<item>
 <title>2007-05-15 jquery 在Drupal 的使用(三) -嵌入jquery</title>
 <link>http://www.joetsuihk.com/2007_05_09_jquery_in_drupal_3_implement_jquery</link>
 <description>&lt;p&gt;可供擺放javascript 和jquery 的地方有好幾個&lt;br /&gt;
要視乎javascript 的性質,&lt;br /&gt;
放到適當的位置&lt;br /&gt;
雖然放錯位置都不會影響效能&lt;br /&gt;
但為了維護的方便,&lt;br /&gt;
必需保持 顯示-控制分離&lt;/p&gt;
&lt;p&gt;其實使用jquery 的情況好很多&lt;br /&gt;
從優化視覺效果到幫助使用者&lt;br /&gt;
到流行的ajax, 偏門點的繁簡轉換等等&lt;br /&gt;
都會用上jquery&lt;br /&gt;
jquery 可能會放到一個獨立的js 檔內&lt;br /&gt;
或inline 放到相關的html, php 檔都有&lt;/p&gt;
&lt;p&gt;先從開發模組的角度看&lt;br /&gt;
取tabbed block 為例,&lt;br /&gt;
要讓unordered list 化成 tabbed block&lt;br /&gt;
便要用jquery 隱藏一部分內容&lt;br /&gt;
按下tab 的時候便顯示另一塊&lt;br /&gt;
加減某些class 等等, 都用上jquery&lt;br /&gt;
因此, 沒有了jquery, tabbed block 可算不上是tabbed block&lt;br /&gt;
所以, jquery 的部分一定要嵌入到模組之內&lt;br /&gt;
而且因為jquery 行數超過十,&lt;br /&gt;
順理成章放到一個獨立的 tabbed_block.js 之內&lt;br /&gt;
也是加jquery 最簡單的方法&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;drupal_add_js&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;tabbed_block.js&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
之後, drupal 會在html 的header tags 之內&lt;br /&gt;
加上這個js 檔&lt;br /&gt;
令unordered list 化成tabbed block&lt;/p&gt;
&lt;p&gt;而一般界面的優化&lt;br /&gt;
通常都會放到theme 之內&lt;br /&gt;
例如這站的淡入效果, 便將joe.js 放到其中一個theme 之內&lt;br /&gt;
page.tpl.php:&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;//包含js 文件:&lt;br /&gt;&amp;lt;script src=&amp;quot;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;print &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;base_path&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() . &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;path_to_theme&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;/joe.js&amp;quot; &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;//直接inline&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&amp;nbsp; //....&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
要留意的只是路徑問題&lt;br /&gt;
要指定這個theme 的路徑, 如上例:&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;base_path&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;parth_to_theme&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;()&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;最後, 大家可能發覺我寫的文字很多&lt;br /&gt;
但例子少一點&lt;br /&gt;
實際使用時可能還要自己查一下API&lt;br /&gt;
這裡算不上什麼好地方&lt;br /&gt;
但個人覺得,&lt;br /&gt;
是因為&quot;使用概念&quot;比&quot;使用方法&quot;更重要&lt;br /&gt;
Drupal 發展真的一日千里&lt;br /&gt;
即將零七年六月一日, Drupal 6.0 就code freeze 了&lt;br /&gt;
也即基本寫好6.0 會加入的功能&lt;br /&gt;
只餘下測試, 除蟲的工作&lt;br /&gt;
當中一代接一代的代碼改變&lt;br /&gt;
API 改變等等都會令&quot;使用方法&quot;落伍, 不適用&lt;br /&gt;
但&quot;使用概念&quot;卻不會因為升級而改變&lt;br /&gt;
都會循一定的大方向而提升&lt;br /&gt;
所以有很多的篇幅描述這樣做那樣做的原因&lt;br /&gt;
而解決的思路又如何一步一步的推進&lt;br /&gt;
希望可以令大家有能力自己嘗試解決&lt;br /&gt;
而這裡只作一個穿針引線的作用&lt;/p&gt;
</description>
 <comments>http://www.joetsuihk.com/2007_05_09_jquery_in_drupal_3_implement_jquery#comments</comments>
 <category domain="http://www.joetsuihk.com/free_tags/development">Development</category>
 <category domain="http://www.joetsuihk.com/free_tags/drupal">Drupal</category>
 <pubDate>Tue, 15 May 2007 04:02:47 -0700</pubDate>
 <dc:creator>JOE</dc:creator>
 <guid isPermaLink="false">55 at http://www.joetsuihk.com</guid>
</item>
<item>
 <title>2007-05-12 jquery 在Drupal 的使用(二) -jquery recursive</title>
 <link>http://www.joetsuihk.com/2007_05_09_jquery_in_drupal_2_jquery_recursive</link>
 <description>&lt;p&gt;續jquery&lt;/p&gt;
&lt;p&gt;先說明一下callback&lt;br /&gt;
用fadeIn() 說明一下&lt;br /&gt;
&lt;code /&gt;&lt;br /&gt;
fadeIn(speed, callback)&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
fadeIn() 有兩個參數&lt;br /&gt;
第一個speed&lt;br /&gt;
用作指定淡入的速度, 可以為字符串&quot;slow&quot; &quot;normal&quot; &quot;fast&quot;&lt;br /&gt;
也可以為數字, 指定毫秒(千分一秒)&lt;/p&gt;
&lt;p&gt;第二個callback&lt;br /&gt;
參數可以是一個函數名, 也可以定義一個新函數(inline 的方式)&lt;br /&gt;
而這個函數會在fadeIn() 完成,&lt;br /&gt;
也即是效果完結的時候被呼叫.&lt;br /&gt;
例如&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;$(&amp;quot;#joe&amp;quot;).fadeIn( &amp;quot;normal&amp;quot; , &amp;quot;joe_example&amp;quot; )&lt;br /&gt;&lt;br /&gt;function joe_example(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert( &amp;quot;Element with id &amp;quot; + $(this).attr(&amp;quot;id&amp;quot;) + &amp;quot; fade in finished.&amp;quot; );&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
這樣fadeIn 元成的時候便會呼叫 joe_example()&lt;br /&gt;
函數內可以用 $(this) 來指定&quot;自己&quot;&lt;br /&gt;
來獲得這個元素的相關資料&lt;br /&gt;
如果配合next(), sibling(), parent() 也可以得到附近的元素&lt;br /&gt;
再作其他處理&lt;/p&gt;
&lt;p&gt;至於inline的方式, 語法為:&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;$(&amp;quot;#joe&amp;quot;).fadeIn( &amp;quot;normal&amp;quot; , function(){&lt;br /&gt;&amp;nbsp; $(this).next().fadeIn();&lt;br /&gt;});&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
例子中, id 是joe 的元素先淡入&lt;br /&gt;
淡入完成之後,&lt;br /&gt;
joe 元素的下一個元素淡入&lt;br /&gt;
完成一次兩個為一組的連還淡入效果&lt;br /&gt;
注意, 這個例子只會淡入joe 元素和joe 元素的下一個元素&lt;br /&gt;
共兩個元素&lt;br /&gt;
並不會連鎖的淡入第三個元素&lt;/p&gt;
&lt;p&gt;如果要發生無限的連鎖,&lt;br /&gt;
像這站的menu 的效果&lt;br /&gt;
便要使用遍歷(recursive) 結構了&lt;br /&gt;
首先介紹一下遍歷結構,&lt;br /&gt;
簡單的遍歷一般是指一個函數會自己呼叫自己&lt;br /&gt;
一直到符合某一個條件才停下&lt;br /&gt;
所以一個完整的遍歷結構一定有兩個條件&lt;br /&gt;
一個是呼叫自己的呼叫&lt;br /&gt;
另一個是一個停止呼叫的條件&lt;br /&gt;
用一個簡單的例子說明&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;function recursive(count){&lt;br /&gt;&amp;nbsp; //完結條件&lt;br /&gt;&amp;nbsp; if ( count&amp;gt;5 ){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; alert( count++ );&lt;br /&gt;&amp;nbsp; //呼叫自己&lt;br /&gt;&amp;nbsp; recursive( count );&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;
上面展示了一個遍歷函數&lt;br /&gt;
但這個函數不會開始, 直到代碼第一次呼叫 recursive(0)&lt;br /&gt;
一但被第一次呼叫(initialize)&lt;br /&gt;
便不會停, 直到count&amp;gt;5&lt;/p&gt;
&lt;p&gt;同樣的原理可以放到menu 的連鎖反應之中&lt;br /&gt;
javascript 的代碼都分為兩個部份&lt;br /&gt;
一個遍歷的函數,&lt;br /&gt;
一次呼叫(initialize)&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;//initialize&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&amp;nbsp; $(&amp;quot;ul.primary-links&amp;quot;).children().eq(0).fadeIn(&amp;quot;slow&amp;quot;,function(){nextFadeIn(this)});&lt;br /&gt;});&lt;br /&gt;//遍歷函數&lt;br /&gt;function nextFadeIn(obj){&lt;br /&gt;&amp;nbsp; $(obj).next().fadeIn(&amp;quot;slow&amp;quot;,function(){nextFadeIn(this)});&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;下一次介紹drupal 加入javascript 的方法和總結一下jquery 的用法, 思考方向等&lt;/p&gt;
</description>
 <comments>http://www.joetsuihk.com/2007_05_09_jquery_in_drupal_2_jquery_recursive#comments</comments>
 <category domain="http://www.joetsuihk.com/free_tags/development">Development</category>
 <category domain="http://www.joetsuihk.com/free_tags/drupal">Drupal</category>
 <category domain="http://www.joetsuihk.com/free_tags/php">PHP</category>
 <pubDate>Sat, 12 May 2007 01:02:00 -0700</pubDate>
 <dc:creator>JOE</dc:creator>
 <guid isPermaLink="false">53 at http://www.joetsuihk.com</guid>
</item>
<item>
 <title>2007-05-08 樣版微調(二) - jquery</title>
 <link>http://www.joetsuihk.com/2007_05_08_jquery</link>
 <description>&lt;p&gt;今天努力的在localhost 改一下theme&lt;br /&gt;
right sidebar 的blocks 都用上漸變&lt;br /&gt;
以突顯效果&lt;br /&gt;
之後的改變都會以視覺沖擊為主&lt;br /&gt;
要吸引顧客啊....&lt;/p&gt;
&lt;p&gt;有位過客留了言, 要講一講jquery&lt;br /&gt;
就在此淺談一下jquery&lt;br /&gt;
(原本打算link 一個jquery 官網的教學, 但jquery.com 近日被攻擊了, 訪問不了)&lt;/p&gt;
&lt;p&gt;兩大javascript 庫, prototype 和jquery 我都有用過&lt;br /&gt;
各有千秋, 但因為Drupal 內建jquery,&lt;br /&gt;
用jquery 都多了, 但他們功能大都差無幾&lt;/p&gt;
&lt;p&gt;用jquery, 先要熟用$(), 一個jquery 的selector&lt;br /&gt;
# 開頭代表id $(&quot;#wrapper&quot;)&lt;br /&gt;
. 開頭代表class&lt;br /&gt;
&amp;gt; 指子類&lt;br /&gt;
等等&lt;/p&gt;
&lt;p&gt;其實menu 的漸變效果&lt;br /&gt;
由一個recursive 的函數做中心&lt;br /&gt;
自己(this) fadeIn() 完成了, callback 自己&lt;br /&gt;
然後找下一個siblings(兄弟元素), 用fadeIn(), callback 自己...&lt;br /&gt;
沒完沒了&lt;br /&gt;
然後用一個$(document).ready() 初始化就可以了&lt;br /&gt;
&lt;div class=&quot;codeblock&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;ready&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(function(){&lt;br /&gt;&amp;nbsp; $(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;ul.primary-links&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;children&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;eq&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;fadeIn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;slow&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;nextFadeIn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)&lt;br /&gt;&amp;nbsp; });&lt;br /&gt;});&lt;br /&gt;function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;nextFadeIn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;obj&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;){&lt;br /&gt;&amp;nbsp; $(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;obj&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;fadeIn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;slow&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;,function(){&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;nextFadeIn&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;)});&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;最後給一個link, 非常好的jquery reference:&lt;br /&gt;
&lt;a href=&quot;http://visualjquery.com&quot; title=&quot;http://visualjquery.com&quot;&gt;http://visualjquery.com&lt;/a&gt;&lt;/p&gt;
</description>
 <comments>http://www.joetsuihk.com/2007_05_08_jquery#comments</comments>
 <category domain="http://www.joetsuihk.com/free_tags/development">Development</category>
 <category domain="http://www.joetsuihk.com/free_tags/drupal">Drupal</category>
 <pubDate>Tue, 08 May 2007 07:36:37 -0700</pubDate>
 <dc:creator>JOE</dc:creator>
 <guid isPermaLink="false">50 at http://www.joetsuihk.com</guid>
</item>
<item>
 <title>2007-05-07 Drupal樣版微調</title>
 <link>http://www.joetsuihk.com/2007_05_07_fine_tune_drupal_theme</link>
 <description>&lt;p&gt;這站已經差不多滿月了&lt;br /&gt;
日常的營運都開始順暢, 上手了&lt;br /&gt;
所以連日將會對樣式作些微調&lt;br /&gt;
令用戶和我都能更方便, 美觀&lt;/p&gt;
&lt;p&gt;今日除了顯而易見的寛度改變之外&lt;br /&gt;
對flash 下的menu  用了jquery 作修飾&lt;br /&gt;
順便也秀一下jquery 的功力&lt;br /&gt;
一個漸變的效果, 使用jquery 裡的 fadeIn()&lt;br /&gt;
簡單的代碼做到好的效果&lt;/p&gt;
&lt;p&gt;來日會一直在樣式上微調,&lt;br /&gt;
以活用tabbed block 等自家產品&lt;/p&gt;
</description>
 <comments>http://www.joetsuihk.com/2007_05_07_fine_tune_drupal_theme#comments</comments>
 <category domain="http://www.joetsuihk.com/free_tags/development">Development</category>
 <category domain="http://www.joetsuihk.com/free_tags/drupal">Drupal</category>
 <pubDate>Mon, 07 May 2007 07:57:50 -0700</pubDate>
 <dc:creator>JOE</dc:creator>
 <guid isPermaLink="false">49 at http://www.joetsuihk.com</guid>
</item>
<item>
 <title>2007-04-09-drupal-module-develop-with-tabs-and-ajax</title>
 <link>http://www.joetsuihk.com/2007_04_09_drupal_module_develop_tabs_and_ajax</link>
 <description>&lt;p&gt;blog 數正幾何級的減少中...&lt;/p&gt;
&lt;p&gt;主要是專注於放復活節假...&lt;br /&gt;和drupal 的一個模?開發有關&lt;/p&gt;
&lt;p&gt;這一次的模?是一個recent comment 和 recent blog post 的二合一模?&lt;br /&gt;用了jquery library 和 tabs plugin&lt;br /&gt;成就一個tab 和ajax 模?&lt;br /&gt;當然沿用drupal 內建使用ajax 的方式&lt;br /&gt;但講起來容易&lt;br /&gt;官網都不多這類的drupal 5.1+ ajax 的描述&lt;br /&gt;唯有向已經內建ajax 的現有module 偷師&lt;br /&gt;open source 吧...&lt;br /&gt;明白了當中的機制之後&lt;br /&gt;有寫過ajax 的朋友應該會立即上手&lt;br /&gt;如果還沒有寫過, 到jquery 的官網先參考一下ajax 的用法會容易點&lt;br /&gt;反正都有中文說明&lt;/p&gt;
&lt;p&gt;以下假設你已經會做一個模?&lt;br /&gt;所以只提重點部份&lt;/p&gt;
&lt;p&gt;先講tabs 的組成&lt;br /&gt;tabs 有一個指定的格式&lt;/p&gt;
&lt;p&gt;&amp;lt;div&amp;gt;&lt;/p&gt;
&lt;p&gt;  &amp;lt;ul&amp;gt;&lt;/p&gt;
&lt;p&gt;    &amp;lt;li&amp;gt;tab title1&amp;lt;/li&amp;gt;&lt;br /&gt;    &amp;lt;li&amp;gt;tab title2&amp;lt;/li&amp;gt;&lt;/p&gt;
&lt;p&gt;  &amp;lt;/ul&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;tab content1&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;tab content2&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;換成recent comment, recent blog post:(非php code, 只為一個算法結構)&lt;br /&gt;hook_block()內:&lt;/p&gt;
&lt;p&gt;&amp;lt;div id=&#039;&#039;joe_container&#039;&#039;&amp;gt;&lt;/p&gt;
&lt;p&gt;  &amp;lt;ul&amp;gt;&lt;/p&gt;
&lt;p&gt;    &amp;lt;li&amp;gt;t(&#039;&#039;Recent comments&#039;&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;    &amp;lt;li&amp;gt;t(&#039;&#039;Recent blog posts&#039;&#039;)&amp;lt;/li&amp;gt;&lt;/p&gt;
&lt;p&gt;  &amp;lt;/ul&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;theme(&#039;&#039;comment_block&#039;&#039;)&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;joe_recent_blog()&amp;lt;/div&amp;gt;//self defined function&lt;/p&gt;
&lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;其中, theme(&#039;&#039;comment block&#039;&#039;)為comment module 內建的function 輸出recent comment&lt;br /&gt;joe_recent_blog() 為一個模?內定義的function, prototype類似:&lt;/p&gt;
&lt;p&gt;    if (user_access(&#039;&#039;access content&#039;&#039;)) {&lt;br /&gt;      $result = db_query_range(db_rewrite_sql(&quot;SELECT&lt;br /&gt;n.nid, n.title, n.created FROM {node} n WHERE n.type = &#039;&#039;blog&#039;&#039; AND n.status = 1&lt;br /&gt;ORDER BY n.created DESC&quot;), 0, 10);&lt;br /&gt;      if (db_num_rows($result)) {&lt;br /&gt;        $block[&#039;&#039;content&#039;&#039;] .= &quot;&amp;lt;div&lt;br /&gt;id=&#039;&#039;fragment-2&#039;&#039;&amp;gt;&quot;.node_title_list($result);&lt;br /&gt;        $block[&#039;&#039;content&#039;&#039;] .= &#039;&#039;&amp;lt;div&lt;br /&gt;class=&quot;more-link&quot;&amp;gt;&#039;&#039;. l(t(&#039;&#039;more&#039;&#039;), &#039;&#039;blog&#039;&#039;, array(&#039;&#039;title&#039;&#039; =&amp;gt; t(&#039;&#039;Read the&lt;br /&gt;latest blog entries.&#039;&#039;))) .&#039;&#039;&amp;lt;/div&amp;gt;&#039;&#039;;&lt;br /&gt;      }&lt;br /&gt;    }&lt;/p&gt;
&lt;p&gt;先完成非ajax block 的部份, 可降解ajax, 可降解block&lt;/p&gt;
&lt;p&gt;此時已經可以在drupal 內enable block, 測試一下&lt;br /&gt;為插入ajax 做準備&lt;/p&gt;
&lt;p&gt;因為ajax 的javascript code 為數十多二十行,&lt;br /&gt;分開一個.js file 處理&lt;br /&gt;joe.js:&lt;/p&gt;
&lt;p&gt;$(document).ready( function(){dojo_ajax_auto_attach();} )&lt;/p&gt;
&lt;p&gt;function dojo_ajax_auto_attach(){&lt;br /&gt;  //init tabs&lt;br /&gt;  $(&quot;#joe_container&quot;).tabs();&lt;/p&gt;
&lt;p&gt;///////////////////////////////略&lt;/p&gt;
&lt;p&gt;留意, drupal 5.1 內建的drupal/misc/jquery.js&lt;br /&gt;並不可以使用tabs plugin...(應該為版本問題)&lt;br /&gt;故要使用tabs plugin 包內的jquery.js 或官網的jquery.js, 覆蓋&lt;br /&gt;接著又可以試一下tabs 的效果&lt;/p&gt;
&lt;p&gt;戲玉...終於到了...ajax 的部分&lt;br /&gt;ajax request 有一個url 的para  注(i)&lt;br /&gt;用作找出php handler 的php file&lt;br /&gt;但drupal 內卻用一個module file作handler&lt;br /&gt;故要告訴(register) 到drupal core, 某一path 會用作handler&lt;br /&gt;傳相關parameter 到module file&lt;br /&gt;要在hook_menu() 內:&lt;/p&gt;
&lt;p&gt;$items = array();&lt;br /&gt;    $items[] = array(&lt;br /&gt;      &#039;&#039;path&#039;&#039; =&amp;gt; &#039;&#039;dojo/menu&#039;&#039;,  //注(i)&lt;br /&gt;      &#039;&#039;title&#039;&#039; =&amp;gt; t(&#039;&#039;dojo&#039;&#039;),&lt;br /&gt;      &#039;&#039;access&#039;&#039; =&amp;gt; user_access(&#039;&#039;access content&#039;&#039;),&lt;br /&gt;      &#039;&#039;type&#039;&#039; =&amp;gt; MENU_CALLBACK,&lt;br /&gt;      &#039;&#039;callback&#039;&#039; =&amp;gt; &#039;&#039;dojo_js&#039;&#039; //真正的php handler&lt;br /&gt;function&lt;br /&gt;    );&lt;/p&gt;
&lt;p&gt;  $items = array_merge($items, module_invoke_all(&#039;&#039;dojo_menu&#039;&#039;, $may_cache));&lt;br /&gt;  return $items;&lt;/p&gt;
&lt;p&gt;到此, ajax 的php 部份其實只有一個register function hook_menu()&lt;br /&gt;和dojo_js(), 一個真正的handler&lt;/p&gt;
&lt;p&gt;javascript 卻反而可以細分為兩個部份&lt;br /&gt;caller 和handler&lt;br /&gt;caller 為一個buttom, 按了就發出一個要求到注(i) 的path&lt;/p&gt;
&lt;p&gt;$(&quot;.dojo-ajax&quot;).click(function(){&lt;br /&gt;    $.ajax({&lt;br /&gt;      type: &quot;POST&quot;,&lt;br /&gt;      url: &quot;/drupal/dojo/menu&quot;,&lt;br /&gt;      data: &quot;path=&quot; + &quot;dojo/menu&quot;,&lt;/p&gt;
&lt;p&gt;/////////////////////略, 待續&lt;br /&gt;handler 為php 返回的json object parser&lt;br /&gt;通常為插入返回的json object 的javascript code&lt;br /&gt;////續&lt;/p&gt;
&lt;p&gt;success: function (data) {&lt;br /&gt;        data = Drupal.parseJson(data);&lt;br /&gt;        $(&quot;#block-dojo-0 .content&quot;).html(&lt;br /&gt;data.content );&lt;/p&gt;
&lt;p&gt;細心看source code 就可以了&lt;/p&gt;
&lt;p&gt;歡迎回應~&lt;/p&gt;
</description>
 <comments>http://www.joetsuihk.com/2007_04_09_drupal_module_develop_tabs_and_ajax#comments</comments>
 <category domain="http://www.joetsuihk.com/free_tags/drupal">Drupal</category>
 <category domain="http://www.joetsuihk.com/free_tags/tabbed_block">Tabbed Block</category>
 <pubDate>Sun, 08 Apr 2007 18:35:19 -0700</pubDate>
 <dc:creator>JOE</dc:creator>
 <guid isPermaLink="false">14 at http://www.joetsuihk.com</guid>
</item>
</channel>
</rss>
