2008年2月26日 星期二

自訂IE檢視原始檔使用的編輯器

自訂編輯器的登錄是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Internet Explorer\View Source Editor\Editor Name

Edit Name 預設值就是指向你的編輯程式。

增加這個登錄的方法:

執行 Regedit,展開 HKEY_LOCAL_MACHINE(與檔案總管一樣,按資料夾前的 "+" 即可展開),再展開 SOFTWARE,再展開 Microsoft,再展開 Internet Explorer。

在Internet Explorer 上按滑鼠右鍵選「新增」>>「機碼」,將此機碼命名為 View Source Editor。

在 View Source Editor 上按滑鼠右鍵選「新增」>>「機碼」,將此機碼命名為 Editor Name。

Double-Click 右側窗格的(預設),在「數值資料」欄,輸入欲指定的程式所在(包含完整路徑)(註二),例如,我要讓我裝在 C:\Program Files\EditPad\EditPad.EXE 去開啟原始檔,我就是輸入:C:\Program Files\EditPad\EditPad.EXE ,按確定。

重新啟動電腦,讓新的登錄值生效。

以上面的例子為例,以後選擇「檢視原始檔」時,IE 就會利用 EditPad 這程式開啟。

摘自:http://www.binbin.net/messages/qa_win_ie/0073.htm

2008年2月20日 星期三

[MySQL]出現 MySQL Too many connections 錯誤訊息

Warning: mysql_pconnect(): Too many connections in C:\XMS\www\xms\common.php on line 31
error 1040: Too many connections

原因:
這是因為 mysql 預設的 connection 數量用完了(預設是100 個), 瞬間 loading 過高最會發生
(後來新版的 xms 系統預設有加大這個值至 300)

解決方式:
1. 用編輯器開啟:C:\windows\my.ini 中的 max_connections=100 參數, 將它改為 max_connections=300
2. 存檔後重新啟動 [控制台] / [服務]內的 MySQL 服務

[MySQL]出現 error 1030:Got error 127 from storage engine 錯誤訊息

此訊息表示系統資訊庫 (MySQL) 的資料表檔案損毀
通常在 "硬碟空間不足" 以及 "電腦不正常關機" 的情況下發生
修復資料表後即可回復

摘自:http://demo.xms.com.tw/xms/content/show.php?id=2467

[CakePHP]讓 dreamweaver 可以讀取 thtml & ctp檔案

cakephp视图文件的扩展名都是thtml,不能用dw可视编辑,不过可以把cake\libs\controller\controller.php里的 var $ext=’.thtml’改成html就可以直接用html视图文件了.

不过这不是正式的方法,我看了lib里面好几个地方直接用了’.thtml’,所以会出问题。

最好就是用一下方法:
如果作業系統OS是XP
1、修改“C:\Documents and Settings\user_name\Application Data\Macromedia\Dreamweaver 8\Configuration”目录下的Extensions.txt文件。在“PHP,PHP3,PHP4,PHP5,TPL,THTML,CTP:PHP Files”处加入thtml,ctp字样。

2、修改你的dreamwaver安装目录如 “C:\Program Files\Macromedia\Dreamweaver 8\Configuration”目录下的Extensions.txt文件。在“PHP,PHP3,PHP4,PHP5,TPL,THTML,CTP:PHP Files”处加入thtml,ctp字样。


HTM,HTML,SHTM,SHTML,HTA,HTC,XHTML,STM,SSI,JS,AS,ASC,ASR,XML,XSL,XSD,DTD,XSLT,RSS,RDF,LBI,DWT,ASP,ASA,ASPX,ASCX,ASMX,CONFIG,CS,CSS,CFM,CFML,CFC,TLD,TXT,PHP,PHP3,PHP4,PHP5,TPL,LASSO,JSP,JSF,VB,VBS,VTM,VTML,INC,JAVA,EDML,WML,THTML,CTP:全部文件



PHP,PHP3,PHP4,PHP5,TPL,THTML,CTP:PHP 檔案


3、修改你的dreamwaver安装目录如 “C:\Program Files\Macromedia\Dreamweaver 8\Configuration\DocumentTypes directory下的MMDocumentTypes.xml”文件加入thtml,ctp字样。


1.<documenttype id="PHP_MySQL" writebyteordermark="false" file="Default.php" macfileextension="php,php3,php4,php5,thtml,ctp" winfileextension="php,php3,php4,php5,thtml,ctp" internaltype="Dynamic" servermodel="PHP MySQL">


如果作業系統OS是Vista
1、修改“C:\Users\user_name\AppData\Roaming\Macromedia\Dreamweaver 8”目录下的Extensions.txt文件。在“PHP,PHP3,PHP4,PHP5,TPL,THTML,CTP:PHP Files”处加入thtml,ctp字样。

2、修改你的dreamwaver安装目录如 “C:\Program Files\Macromedia\Dreamweaver 8\Configuration”目录下的Extensions.txt文件。在“PHP,PHP3,PHP4,PHP5,TPL,THTML,CTP:PHP Files”处加入thtml,ctp字样。


HTM,HTML,SHTM,SHTML,HTA,HTC,XHTML,STM,SSI,JS,AS,ASC,ASR,XML,XSL,XSD,DTD,XSLT,RSS,RDF,LBI,DWT,ASP,ASA,ASPX,ASCX,ASMX,CONFIG,CS,CSS,CFM,CFML,CFC,TLD,TXT,PHP,PHP3,PHP4,PHP5,TPL,LASSO,JSP,JSF,VB,VBS,VTM,VTML,INC,JAVA,EDML,WML,THTML,CTP:全部文件



PHP,PHP3,PHP4,PHP5,TPL,THTML,CTP:PHP 檔案


3、修改你的dreamwaver安装目录如 “C:\Program Files\Macromedia\Dreamweaver 8\Configuration\DocumentTypes directory下的MMDocumentTypes.xml”文件加入thtml,ctp字样。


1.<documenttype id="PHP_MySQL" writebyteordermark="false" file="Default.php" macfileextension="php,php3,php4,php5,thtml,ctp" winfileextension="php,php3,php4,php5,thtml,ctp" internaltype="Dynamic" servermodel="PHP MySQL">

[Dreamweaver]修改註冊表解決Dreamweaver亂碼問題

Dreamweaver中出現亂碼,大致為兩種情況:

  一是沒有標明主頁制作所用的文字,這種情況下很簡單就可以解決,加上說明即可。

  二是你新加裝了字形,(諸如文鼎酷字形之類),這樣你每次新建一個網頁,都要調整一次,非常麻煩。那麼你可以用下面的方法解決。

  請先備份註冊表,退出運行中的Dreamweaver。

  1.運行regedit.exe。

  2.找到HKEY_CURRENT_USER/SOFTWARE/MACROMEDIA/DREAMWEAVER 4/FONT PREFERENCES

  接下來有2個方案:

  簡便方案:

  連續按兩下Number Encodings,把數值b改成c(十進制的11改成12);退出regedit,進入Dreamweaver,現在你就可以隨意地選擇PROPOTIOANL,FIXED FONT,CODE INSPECTOR的字形和文字大小了!

  完美方案:

  為什麼簡便方案還不夠呢?因為僅做上述改動,就只能選擇中文字形,而有些情況下,一些英文字形會比中文字形好看(比如我在CODE INSPECTOR裏面就選用ARIAL字形,比宋體、倣宋什麼的要好看多了),而且對中文部分也能正確顯示。

  方法如下:

  在HKEY_CURRENT_USER/SOFTWARE/MACROMEDIA/DREAMWEAVER 4/FONT PREFERENCES下,連續按兩下Number Encodings,把數值b改成c(十進制的11改成12);進入CharEncoding_11,對內部數值進行修改:

  注意最好隻改動以下值:

  Fixed Name :字形名稱

  Fixed Size :字形大小

  HTML inspector font :字形名稱

  HTML inspector font size :字形大小

  Proportional Name :字形名稱

  Proportional Size :字形大小

  如果感到不滿意,也可嘗試把:Fixed CharSet、Proportional CharSet、Windows Character Set從86(十進制的134,表示中文)改成00(代表英文)。

  對於簡便方案,這裡還有一個更簡單的實現方法,把以下代碼複制下來,保存成為一個後綴是.reg的文件(要注意一定要為純文本方式),然後執行這個reg文件,修改就會自動完成(也請先備份註冊表)。

  REGEDIT4 [HKEY_CURRENT_USER\Software\Macromedia\Dreamweaver 4\Font Preferences] "Number Encodings"=dword:0000000c"Default Encoding"=dword:00000005

摘自:http://big5.yesky.com/b5/homepage.yesky.com/130/2422630.shtml

2008年2月17日 星期日

重設FreeBSD的root密碼

當在 FreeBSD 忘記了 root 密碼時,可以在開機時進入 single user mode 及重新設定密碼,方法如下:

1. 重新開啟 FreeBSD 主機。

2. 在 "Welcome to FreeBSD!" 開啟選單中按 "4" 選擇 "Boot FreeBSD in single user mode"。

3. 然後會看到 "When prompted Enter full pathname of shell or RETURN for /bin/sh:",直接按 Enter。

4. 這時便會直接進入 single user mode,輸入以下指令重新掛載根目錄 "/" 為可讀寫:
# mount -u /
# mount -a

5. 用 passwd 重新設定 root 密碼:
# passwd

6. 最後重新啟動即可:
# sync;sync;sync;reboot

2008年2月9日 星期六

php 程式碼撰寫標準規則

1 變數命名規則


  • 變數名稱完全採用小寫英文字母.
  • 字與字之間使用 _ 來連接, 例如. $green_color_value
  • 要使用描述性的命名方式 (迴圈變數可以例外).
  • 迴圈變數通常使用: $i, $j, $k, …等等.
  • 計算性的變數($bug 的總數)應以被計算的變數名稱($bug)後面接 _count 的格式來命名, 例如. $bug_count
  • 全域性的變數前面應該加上 g_
  • 存放 session 的變數前面應該加上 sess_
  • 存放 cookie 的變數前面應該加上 cookie_
  • 臨時(temp)的變數前面應該加上 t_
  • 由網頁表單傳過來的參數和變數如果已經確認不含 SQL 特殊字元(例如 /) 前面應該加上 c_
  • 由網頁表單傳過來的函式參數如果不確認是否含 SQL 特殊字元(例如 /), 那前面應該加上 p_
  • 由網頁表單傳過來的變數如果不確認是否含 SQL 特殊字元(例如 /), 那前面應該加上 f_
  • 其他的變數前面應該加上 v_, v2_, …等等.
  • 為了避免視覺上的混淆, 變數前面千萬不要加上 l_ 或 o_ 或 q_ .
  • $query 和 $result 這兩個變數只能用在 SQL 的查詢語法變數($query)與查詢結果變數($result)

2 常數命名規則

  • 常數名稱完全採用大寫英文字母.
  • 字與字之間使用 _ 來連接, 例如. ROOT_PATH
  • 全域性的常數前面應該加上 G_
  • 如果內容有可能會改變(例如在管理介面提供更改設定內容值), 應改採用變數而非常數

3 函式(Functions)命名規則

  • 函式名稱完全採用小寫英文字母.
  • 字與字之間使用 _ 來連接, 例如. setup_page_breaks()
  • 函式名稱不應該超過五個有意義的英文字, 例如. setup_page_from_old_to_new() → setup_page_old_to_new()
  • 列印功能的函式前面應該要加上 print_, 例如. print_page()
  • 要儘量將功能有相關的函式加上相同的前置文字(可容易看出是相同群組的函式) 例如. email_, news_, … 等等.

4 Classes 命名規則

  • 要採用 FirstLetterOfWordIsCaptilized 的樣式
  • 屬於 class 物件內的變數, 前面應該要加上 m_

5 檔案命名規則

  • 檔案名稱完全採用小寫英文字母.
  • 字與字之間使用 _ 來連接, 例如. view_new_bugs_page.php
  • 要使用 .php 當副檔名
  • 檔名長度必須小於 32 個字元. 這樣才能相容一些較舊的檔案系統像是 Mac OS.
  • 會被 Included 的檔案在檔名後面必須是 _inc.php
  • 預設的參數檔案在檔名後面加上 .default 例如. config_inc.php.default

6 SQL 格式

  • 所有 SQL 的關鍵字必須採用大寫英文字母:
$query = "SELECT *
FROM $g_mantis_bug_table
WHERE id='1'";
  • 要以 $query 這特殊變數來存放 SQL 的命令. 這樣當發生錯誤時可以很容易找出問題的地方.
  • SQL 的寫法要分行, 這樣才能讓程式碼變的容易閱讀與了解.

7 一般通用格式

  • 使用 TABS 來分出層次
<TAB>if ( is_array( gpc_get( 'show_category', null ) ) ) {
<TAB><TAB>$f_show_category = gpc_get_string_array( 'show_category', META_FILTER_ANY );
<TAB>} else {
<TAB><TAB>$f_show_category = gpc_get_string( 'show_category', META_FILTER_ANY );
<TAB><TAB>$f_show_category = array( $f_show_category );
<TAB>}
  • 在 php 程式碼前後要以 <?php ?> 這樣式來撰寫
<?php require_once( 'core.php' ) ?>
<?php auth_ensure_user_authenticated() ?>
<?php
$f_type = gpc_get_int( 'type', -1 );
?>
  • 儘量不要直接在程式碼內印出(print/echo) HTML, 除非這 HTML 很短或是在函式的回圈內1)
  • 不要使用 EOF 這有意義的字當結構標籤(aaa EOF bbb : 以 EOF 來當判別區別資料項)2)

8 其他

  • 不要使用 ?: 當結構標籤, 這樣會造成混淆以及有可能是造成問題的潛在原因.
  • 避免使用 magic numbers. 所使用的 magic numbers 應該只有 1 和 0 而且是出現在很容易理解的地方.

9 頁面標準

  • 版權說明應該是要放在程式碼最上方(這部分應該包含版本相關資訊)
<?php
# 專案代號 - 專案名稱
# Copyright (C) 2002 - 2005 專案負責人 - 聯絡 E-Mail
# This program is distributed under the terms and conditions of the GPL <- 採用的版權方式
# See the README and LICENSE files for details  
# --------------------------------------------------------
# $Id: 檔案名稱,v 版本編號 異動日期 時間 異動者 Exp $
# --------------------------------------------------------
?>  
例如 :  
<?php
# viaDocExg - 公文電子交換系統
# Copyright (C) 2006 - 2007 Jonathan Tsai - tryweb@ichiayi.com
# This program is distributed under the terms and conditions of the GPL # See the README and LICENSE files for details  
# --------------------------------------------------------
# $Id: main.php,v 1.00 2007/1/02 上午 12:07 jonathan Exp $
# --------------------------------------------------------
?>
  • print_ 這樣的函式應該是出現在最底下3)

10 大括號和小括號

  • 函式右邊應該緊接著小括號, 例如. function() , 而不是 function () ← 函式與括號間多空了一格
  • 系統保留字(if, while, for)右邊應該先空一格再接著小括號, 例如. for (…)
  • 陣列括號與裡面的索引變數間不應該出現空格, 例如. $arr['index'] 而不是 $arr[ 'index' ] ← 括號裡面多了空格
  • 使用大括號的格式請參考以下實例說明, 請採用非對齊位置格式.
for (...) {
    blah
}

if (...) {
    blah
}
  • if … else 應該要如以下的格式:
if (...) {    blah1
} else {
    blah2
}

11 邏輯運算與判別式

  • NOT 這運算元(!)應該要緊接在變數前面, 不要空格, 例如. !$value
  • 要擅用括號的好處, 特別是在複雜的邏輯運算式中, 例如. if ( ( null == $val ) && ( null == $val2 ) )

12 字串

  • 字串相連之間要留空白字元, 例如. 'str ' . $value . ' str2';
  • 如果沒有特殊的狀況, 應該使用 ' (單引號)來取代 " (雙引號)

13 註解

  • 以 # 這個符號來當註解開頭, 而不是 //
  • 使用 /* */ 來標註整個註解區塊. 一般而言, 這只用在開發過程.
  • 使用 @@@ 來標示簡短的訊息, 這樣可以留下讓程式碼中可以改善想法, 所以應該在 @@@ 後面先接著自己的姓名或代號, 然後才是訊息內容. 範例如下:
$t_setting_arr['relationship_bug'] = 0;
$t_custom_fields = custom_field_get_ids(); # @@@ (thraxisp) This should really be the linked ids, but we don't know the project
$t_custom_fields_data = array();

14 程式碼編輯工具應該有的特點

  • 要能在多個檔案中同時對字串搜尋與取代功能
  • 能直接跳到指定的行號處
  • 對程式語法能夠區分出來(函式, 變數, 保留字 能夠以不同顏色標示)
  • 能夠依據 TAB 來對齊
  • 推薦使用 Notepad++4)EditPlus5) 這樣的編輯工具
  • 如果沒有特殊狀況, 應該要將程式碼存成 UTF-8 格式

2008年2月6日 星期三

[jQuery]jQuery入門第一步

指南(1)用jquery開始吧

這個指南是對jquery庫的一個總的介紹,當然你也被要求具備javascript和DOM(文檔對象模型)的相關知識。該指南試圖解釋一些必須的細節。它涵蓋了一個簡單的」hello world」實例,選擇器和事件基礎,AJAX,FX以及官方插件。

這個指南並沒有」click me」,而是依靠」copy me」(複製/粘貼代碼)來測試例子,拷貝一個例子,看它是怎麼做的,然後根據你自己的想法修改它。

目錄:
1. 安裝
2. Hello jQuery (look like hello world)
3. 用選擇器(selector)和事件(events)
4. 用ajax
5. 用FX(各種效果)
6. 用tablesorter 插件
7. 書寫你自己的插件
8. 下一步(展望)


1.安裝
開始之前,我們需要一個jquery庫的拷貝(js文件)。最新的版本你能在這裡下載。這個指南也提供了一個基本的「開始工具包」,你可以在下面地址下載到。

Jquery starterkit

下載該文件並且解壓縮。用你喜歡的編輯器(比如:記事本)打開starterkit.htm和custom.js,並在瀏覽器(IE,firefox, netscape)打開starterkit.htm
現在我們可以開始類似於「hello world」的例子了。

2.Hello ,jQuery
作為我們要做的每一件事情,需要確定只要用到了dom,那麼你就應該為當前文檔註冊一個ready 事件
(關於ready和onload的區別,大家可以參考<小蛀翻譯的"jQuery簡單指南"部分>,在這裡就不解釋了)

$(document).ready(function() {
// do stuff when DOM is ready
});




在函數塊裡邊放一個alert並沒多少意義,因為一個alert並不需要DOM被加載。所以你可以做一些更複雜的事情來用到dom,比如下面當你click一個的時候顯示一個alert
$(document).ready(function() {
$("a").click(function() {
alert("Hello world!");
});
});




所以只要你點標籤,alert就會顯示出來。
讓我們看一看都做了些什麼吧。$(「a」)是一個jquery的選擇器(selector),它能選擇所有的元素(dom對象)。$是一個jquery裡對於類的別名,因此$()構造了一個新的jquery對象。Click()函數是對象裡的有個方法。它綁定了對所有元素的click事件並且當事件發生時執行提供的函數。
類似於下面的代碼:
Link
這個區別是顯而易見的:我們不需要為單一的對象寫click事件了。我們把html(結構)和js(行為)分開了就像用CSS分開一樣。
現在,我們已經對選擇器和事件有了一定的認識了。

3.選擇器(selector)和事件(events)
Jquery提供了2個方法來選擇DOM元素。第一個方法是用CSS和XPATH(比如:$(「div > ul a」))。第二種方法是用jQuery對象的各種方法。當然兩種方法也可以結合。
我們在starterkit裡選擇和修改第一個order list來測試這些選擇器。
開始之前,我們需要選擇列表本身。這個列表有一個ID=」 orderedlist」,在經典javascript裡,你必須這樣用:document.getElementById("orderedlist"),但是在jQuery裡,我們只需要做這些:
$(document).ready(function() {
$("#orderedlist").addClass("red");
});




這個starterkit提供了一個如何加CSS樣式 class.red。因此,當你刷新starterkit.htm的時候,你會發現第一個list背景變成紅色,而第二個list沒有被改變。
現在讓我們加更多的classes到list的子元素:
$(document).ready(function() {
$("#orderedlist > li").addClass("blue");
});




上面的例子選擇了id為orderedlist的所有子標籤li,並且在他們上面加了一個class.blue的樣式。
現在來點更複雜的。當鼠標移到li元素的時候,增加和刪除一個Class樣式:
$(document).ready(function() {
$("#orderedlist li:last").hover(function() {
$(this).addClass("green");
}, function() {
$(this).removeClass("green");
});




你在這裡可以找到很多CSS和XPATH的語法。
更多的例子和表達式你也可以在這裡找到。
對於每個onxxx事件,象onclick,onchange,onsubmit等,都有一個和jquery同意義的對應的事件,而其他事件,象ready,hover等,都是為某個方法提供。
你能在visual jquery裡發現一個完整的事件列表。

還有種寫法是jquery特有的(chain),就是把一個選擇器的所有的事件並排列出來,中間用」.」隔開:
$(document).ready(function() {
$("#orderedlist").find("li").each(function(i) {
$(this).html( $(this).html() + " BAM! " + i );
});
});




一個你經常面對的任務是在事件裡邊執行函數。比如這樣
$(document).ready(function() {
// use this to reset a single form
$("#reset").click(function() {
$("#form")[0].reset();
});
});




這個代碼只是ID為form的表單執行reset()方法。但是萬一你有很多個表單需要執行呢?那麼你可以這樣寫:
$(document).ready(function() {
// use this to reset several forms at once
$("#reset").click(function() {
$("form").each(function() {
this.reset();
});
});
});




另外一個你必須面對的問題是選擇某個或某幾個元素。Jquery提供了filter()和not()方法。當filter()是過濾一些適合filter ()表達式元素,而not()是刪除和not()表達式相反的元素。當你想選擇所有的li元素,並且不包含ul子元素呢?你可以這樣寫:
$(document).ready(function() {
$("li").not("[ul]").css("border", "1px solid black");
});




結果是除了包含ul子元素的li,其他所有的li都得到了一個border.可能你也想選擇有name屬性的anchor():
$(document).ready(function() {
$("a[@name]").background("#eee");
});




要匹配屬性的值(value),我們可以用」*=」來代替」=」
$(document).ready(function() {
$("a[@href*=/content/gallery]").click(function() {
// do something with all links that point somewhere to /content/gallery
});
});




直到現在,我們已經學到了很多選擇器的使用。這裡還有種情況你需要選擇前一個或後一個元素。想一想starterkit.htm裡的FAQ,當你click問題的時候,它是怎麼實現隱藏和顯示的呢?代碼是這樣的:
$(document).ready(function() {
$('#faq').find('dd').hide().end().find('dt').click(function() {
var answer = $(this).next();
if (answer.is(':visible')) {
answer.slideUp();
} else {
answer.slideDown();
}
});
});




因為上面只有唯一一個選擇器(#faq),我們用chain來減少代碼的長度和提高代碼的易讀性和表現性.這裡要說明一下,如果按原文翻譯過來我想很多人都看不懂,感覺他自己也沒怎麼說明白。我說說我自己的理解:
『dd'和『dt'都是#faq的子元素,find()的作用就是找到它的子元素。End()應該和next()搭配的,end()實質上是把『dd'過濾了,也就是next()的時候實質上是參考的』dt'。這樣每個』dt'的next就是『dd',挺容易實現的。要是還不明白你可以邊參考邊照著做一遍。

除了同屬元素外,我們也可以選擇父元素:
$(document).ready(function() {
$("a").hover(function() {
$(this).parents("p").addClass("highlight");
}, function() {
$(this).parents("p").removeClass("highlight");
});
});


很容易看懂,p就是a的父元素。

讓我們回顧一下前面所學的,jquery有很多地方能使代碼更簡潔因此容易讀和保持。下面的就是對$(document).ready(callback)符號的一個簡單描述
$(function() {
// code to execute when the DOM is ready
});





好吧,讓我們來寫個hello , world ,來結束第一天的課程,相信你一定會寫了吧
$(function() {
$("a").click(function() {
alert("Hello world!");
});
});




現在,基礎已經掌握了,下次我們將探索一下Jquery的其他方面(ajax)

4.Rateing:使用AJAX
在這部分我們寫了一個簡單的ajax應用,它的目的是允許用戶rate(評估)一些事情,就像youtube.com一樣.
我們需要寫一些代碼.例子中用到了一個php文件來讀取”rating”的參數和返回rating個數(count)和平均rating(array_sum/count).你可以看一看starterkit裡邊的rate.php代碼.
我們需要這個例子工作在ajax上,因此我們用jquery寫一個必要的標籤並且把它追加到一個ID名為」rating」的div容器裡邊.代碼如下:
$(document).ready(function() {
// generate markup
var ratingMarkup = ["Please rate: "];
for(var i=1; i <= 5; i++) { ratingMarkup[ratingMarkup.length] = "" + i + " ";
}
// add markup to container and applier click handlers to anchors
$("#rating").append( ratingMarkup.join('') ).find("a").click(function(e) {
e.preventDefault();
// send requests
$.post("rate.php", {rating: $(this).html()}, function(xml) {
// format result
var result = [
"Thanks for rating, current average: ",
$("average", xml).text(),
", number of votes: ",
$("count", xml).text()
];
// output result
$("#rating").html(result.join(''));
} );
});
});



上面的代碼片斷產生了5個元素並且把它們追加到了id為」rating」的div容器裡.第一次加載頁面後,所有的 元素都包含在div容器裡,然後再加上個click事件。當被click的時候,一個post請求被發送到rate.php文件裡,並且通過rating: $(this).html()傳遞參數,經過處理PHP文件處理後把結果作為xml寫進div容器

如果你電腦上沒裝php的運行環境。你可以在這裡看到這個例子的效果。

對與一個不用javascript也能工作的rating例子,你可以訪問softonic.de

你也能在這裡或者在visual jquery裡邊發現更多的關於ajax的幫助文檔。

當靠AJAX加載內容的時候,一個非常普遍的問題是:當加載事件句柄到你文檔的時候也需要將該事件應用與你加載的內容裡,所以你不得不在內容加載之後提供這些事件句柄。為了防止代碼重複,你應該委派一個函數。例如:
// lets use the shortcut
$(function() {
var addClickHandlers = function() {
$("a.clickMeToLoadContent").click(function() {
$("#target").load(this.href, addClickHandlers);
});
};
addClickHandlers();
});




上面當DOM準備好後addClickHandlers只應用了一次,並且每次用戶點一個樣式為class. clickMeToLoadContent的時候內容已經完成加載了。
請主義函數addClickHandlers被定義成了一個局部變量,而非全局函數(function addClickHandlers() {...}).。請堅持這種寫法,因為它可以避免全局變量定義過多引起的衝突。

另外一個非常普遍的AJAX回調問題是參數。假設你需要傳遞一個額外的參數,那麼把回調封裝到一個函數里能夠實現,如下:
// get some data
var foobar = ...;
// specify handler, it needs data as a paramter
var handler = function(data) {
...
};
// add click handler and pass foobar!
$('a').click( function(event) { handler(foobar); } );

// if you need the context of the original handler, use apply:
$('a').click( function(event) { handler.apply(this, [foobar]); });




5.各種動態效果的實現:用FX
Jquery能實現簡單的動態效果,比如顯示(show)和隱藏(hide)
// $(document).ready(function() {
$("a").toggle(function() {
$(".stuff").hide('slow');
}, function() {
$(".stuff").show('fast');
});
});




發揮你的想像,你能用aninate()創建任意的組合:
// $(document).ready(function() {
$("a").toggle(function() {
$(".stuff").animate({
height: 'hide',
opacity: 'hide'
}, 'slow');
}, function() {
$(".stuff").animate({
height: 'show',
opacity: 'show'
}, 'slow');
});
});




在interface 插件收集裡,你能發現很多奇特的效果。這個站點也提供一些演示。

6.分類:用表格分類插件
該插件是運行在客戶端的,所以你只要在你文件裡包含jquery和插件的文件並且寫出你想如何分類。試試下面的例子。在starterkit.htm裡添加下面一行代碼:



把插件包含進去後,你還需要在custom.js裡寫
$(document).ready(function() {
$("#large").tableSorter();
});



點擊表格的頭部看看它是怎麼工作的。
這個表格也能夠用高亮隔行顯示來實現斑馬線效果。代碼如下:
$(document).ready(function() {
$("#large").tableSorter({
stripingRowClass: ['odd','even'], // Class names for striping supplyed as a array.
stripRowsOnStartUp: true // Strip rows on tableSorter init.
});
});




這裡有更多的例子和演示在tablesorter homepage
當你用jquery久了之後會發現把你的代碼(功能模塊)作為插件封裝在一個包是多麼有用,不僅你自己或你的公司能重用這些代碼(功能模塊),也能在一些社區裡共享。下面我們將來看看如何構造一個插件!

7.插件:寫你自己的jquery插件
其實為jquery寫插件是很簡單的。如果你按照下面的規則,整合你的插件將非常容易。
1.給你的插件命名。讓我們叫它」foobar」
2.創建一個文件名為:jquery.[你的插件名].js 比如:jquery.foobar.js
3.擴展jquery的內部對象,創建一個或多個插件的方法,比如:
jQuery.fn.foobar = function() {
// do something
});


4.用幫助函數創建一個對象(可選)
jQuery.fooBar = {
height: 5,
calculateBar = function() { ... },
checkDependencies = function() { ... }
};



然後你能在你的插件裡邊調用這些幫助函數
jQuery.fn.foobar = function() {
// do something
jQuery.foobar.checkDependencies(value);
// do something else
};


5.創建一個用戶能修改的默認的設置(可選)
jQuery.fn.foobar = function(options) {
var settings = {
value: 5,
name: "pete",
bar: 655
};
if(options) {
jQuery.extend(settings, options);
}
};



然後你能用下面的默認調用該插件(有選項)
$("...").foobar({
value: 123,
bar: 9
});




如果你要發佈你的插件,你應該提供一些例子和演示。
現在你有一個基本的認識了吧,讓我們運用自己的知識和創造力來寫我們自己的插件
有很多朋友操作表單這樣來結束代碼:
$("input[@type='checkbox']").each(function() {
this.checked = true;
// or, to uncheck
this.checked = false;
// or, to toggle
this.checked = !this.checked;
});



請注意,無論什麼時候,當你的代碼出現each時,你應該重寫上面的代碼來構造一個插件如下:
$.fn.check = function() {
return this.each(function() {
this.checked = true;
});
};



於是插件可以這樣用:
$("input[@type='checkbox']").check();



現在你也能寫一些插件為uncheck()和togglecheck().但是我們可以擴展插件來接收一些選項.
$.fn.check = function(mode) {
var mode = mode || 'on'; // if mode is undefined, use 'on' as default
return this.each(function() {
switch(mode) {
case 'on':
this.checked = true;
break;
case 'off':
this.checked = false;
break;
case 'toggle':
this.checked = !this.checked;
break;
}
});
};



然後用戶能夠這麼使用:
$("input[@type='checkbox']").check();
$("input[@type='checkbox']").check('on');
$("input[@type='checkbox']").check('off');
$("input[@type='checkbox']").check('toggle');




8.下一步(展望)
如果你計劃學習更多的javascript,你應該考慮用firefox的firebug插件來調試你的代碼.它為javascript的調試提供了一個控制台,一個調試器和其他有用的東西.

摘自:http://calos-tw.blogspot.com/2007/05/jquery.html

[twecommerce]刪除TWE-COMMERCE V2.3字樣

我找了一下,在includes/classes/Smarty_2.6.10/Smarty.class.php中,第1293行

echo '
'.strtoupper(substr(PROJECT_VERSION,0,17)).'
';
將它註解掉
//echo '
'.strtoupper(substr(PROJECT_VERSION,0,17)).'
';

就可以了~ (若沒必要請留下,敬請尊重創作者的版權及心血~)

摘自:http://www.5itaiwan.tw/blog/read.php?277&part=3

wibiya widget