Sep 27

以下是在 PTT 的 PHP 板看到某篇文章後的心得,以及小小的經驗分享。

Smarty 稍有經驗的人,應該都知道樣板內可使用 {include} 這個 tag 來嵌入其他 template file。
然而,因為 Smarty 內的變數都是全域變數,所以我對這個 tag 的看法是「能不用,就不用」。

用常見的網站論壇系統舉個簡單的例子:

  • A 設計師負責開發顯示 HTML header 的 template,使用了 $title 變數作為 page title,ex:
    <html><head><title>$title</title></head>
  • B 設計師負責開發顯示論壇文章內容的 template,恰巧也使用了 $title 作為文章標題。

若 B 設計師在其 template file 中使用了 {include} 來嵌入 A 設計師的 template file,就可能會產生預期之外的顯示結果。

當然,若是開發團隊已事先溝通好各項變數的命名,就不會有這種情況。
但為了減少此類風險,降低 debug 的難度,我們會選擇使用這種方式:

  • 在系統全域共用的函式檔案中增加負責顯示 HTML header 的 function,例如 function page_header($title) { ...} ,並在 function 中 assign 變數,引入 A 設計師開發的 template file。
  • 在論壇文章內容顯示的程式檔中,呼叫 page_header($title),再 assign 文章標題的變數,引入 B 設計師開發的 template file。

當然,若嵌入的 template file 內沒有任何變數,就不須考量以上的狀況,開發/設計人員可以大膽地隨意使用。 8)

Technorati Tags: , ,

Tags: , ,
(Visited 3624 times)
Sep 09

昨晚,有個學長透過 MSN 問我有無簡單好用的 PHP 圖形驗證碼,又讓我想到 reCAPTCHA
上一次使用時,reCAPTCHA 僅提供顏色變更;如今,reCAPTCHA 已經開始支援多國語言了。

剛才稍微玩了一下,寫了這個簡單的網頁
reCAPTCHA 的多國語言化相關資訊可以參考 這裡,而我使用的中文化程式碼片段為:

<script type="text/javascript">
	var RecaptchaOptions = {
		custom_translations : {
			visual_challenge : "取得圖形驗證碼",
			audio_challenge : "取得音效驗證碼",
			refresh_btn : "重新整理圖形",
			instructions_visual : "輸入兩個英文單字:",
			instructions_audio : "輸入您聽到的聲音:",
			help_btn : "獲得協助",
			play_again : "重新播放音效",
			cant_hear_this : "將音效下載為 MP3",
			incorrect_try_again : "錯誤! 請再試一次"
		}
	};
</script>

Technorati Tags: , , , ,

Tags: , , , ,
(Visited 4164 times)
Sep 04

以往我撰寫 PHP 的兩個工具是 vimjEditvim 比較常用)。
當時會選 jEdit 是因為 jEdit 提供了 FTP 遠端存取的功能,更改或新增的程式檔可以自動上傳到遠端主機。
昨天在 PTT 的 PHP 板看到有人提到 Aptana Studio,今天想到就抓來玩看看。

令我驚豔的是,Aptana Studio 也提供了遠端存取的功能,包括 FTP、FTPS、SFTP,以及各種版本控制系統。
不過,試了一下之後,發現它沒有辦法自動讓更改或新增的程式檔上傳到遠端主機,只能儲存後,再手動作 upload。
在網路上搜尋解決方法後,我卻發現工具列上的 Scripts -> Synchronize -> Upload Current File On Save 是壞掉的。 =_=|||

在即將放棄使用 Aptana Studio 時,我發現了 這個討論串,而且也順利解決自動上傳的問題。
討論串的內容有點亂,所以把解法整理在這邊,順便幫自己留個備份(以免以後又要找解法):

  1. Aptana Studio 安裝的資料夾找出 upload_current_file_on_save.js 這個檔案,並編輯它。
  2. 在 header 的部份補上這兩行:
    Listener: commandService().addExecutionListener(this);
    Key: M1+S

    補完之後的 header 大概像這樣:

    /* Listener: commandService().addExecutionListener(this);
     * Currently an example script (disabled)> Copy as your own script, and modify
     * the Listener command as shown below
     *
     * Menu: Synchronize > Upload Current File On Save
     * Key: M1+S
     * Kudos: Ingo Muschenetz
     * License: EPL 1.0
     * DOM: http://localhost/com.aptana.ide.syncing.doms
     * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
     */
  3. 在檔案最後面補上這段:
    function main() {
       sync.uploadCurrentEditor();
    }
  4. 存檔並重新執行 Aptana Studio

之後只要按下 Ctrl + s 儲存檔案,該檔案就會自動上傳到遠端主機囉。 :evil:

Technorati Tags:

Tags:
(Visited 4051 times)