分類
Javascript

全域form變數的取得

在寫網頁全域 javascript 的部分, 由於 ie 可以很容易的解析全域型變數, 也造成有些網站在實作 client javascript 時, 會發生一些問題.

基本上在網頁上存取頁面元件時, 可以利用 DOM 的方式進行, 以免發生跨瀏覽器的問題, 以下為一些常見的狀況. 例如頁面上有個唯一的 form, name為 f1 時, 通常會有人這麼寫:

f1.submit();

分類
PHP

在php中的UTF-8字元斷字方式

在 PHP 中, 若是有中文字時, 使用 substr() 函數時, 會發生斷字的問題. 如何解決呢? 我們可以利用 mb_ 開頭的系列函數來操作我們需要的行為, 例如取出左五碼, 可以這麼下:

$str = "中文字及english測試";
echo mb_substr($str, 0, 5, 'UTF-8');

這樣會顯示 “中文字及e” 這樣五個字出來.

另外一個重點在於該組函數後面加入的 encodeing 是關鍵, 若是 UTF-8, 可以用 UTF-8 或 UTF8 皆可以正常使用, 還有較常用的兩個函數: mb_strlen 及 mb_strwidth, 前者是用來取得字元個數, 後者則是取得寬度, 後者目地主要在於排版顯示用途, 因為寬字元會計算為 2, 如此一來便能有效地算出參考寬度.

以下為參考程式碼:
http://sample.diary.tw/4/php.php

分類
Database

如何選出隨機資料

利用 sql command 可以查詢指定的資料, 有時因為功能上的需要, 希望能在 web 頁面上呈現價格最低, 或是到訪最高的資料, 這種取出固定的資料順序, 往往少了一些活發性.

我們可以利用資料庫的函數特性, 讓查詢出來的結果能有不同的順序, 可以增加訪客訪問的興趣. 不過導入又十分容易的方法囉.

MS SQL Server

select * from mydata order by NEWID()

其中 NEWID() 函數, 是取出 GUID, 不過我們是利用這個函數來進行排序的打散. 如此一來, 每次查詢, 就會有不同的隨機效果

分類
TatterTools

TT實作閱讀統計資訊-ViewCounter1.1插件實作

由於 TatterTools 的文章閱讀方式, 和一般的 blog 有些差距, 大多數的 blog 是將文章(或稱article)”繼續閱讀” (“more…”) 這種放在另一個文章頁面裡, 也就是說, 將文章區分為兩個部分, 好讓集合的頁面只顯示前面(一般使用summary, abstract, first part來描述), 而整篇的內容則是用 content, body, article 來描述, 如此一來就將文章區分為兩塊.

分類
PHP

最近HEMiDEMi有點慢

由於在右側有引用了 HEMiDEMi 的最近書籤, 但因為在網路尖峰時間, HEMiDEMi 有點慢, 也會造成本網頁的負擔, 於是乾脆自行寫個快取機制來解決這個問題.

做法很單純, 我實作了一支小程式, 利用 php 去取得原來 javascript 內的網址內容:

http://www.hemidemi.com/digest/user/timhuang/bookmark/recent

再來就是存在本地檔, 利用了 filemtime 來取出檔案的修改時間, 並與現在時間比對, 若久於一定的時間(目前訂為 1200秒), 就重新再取, 否則就直接用快取檔案的內容, 如此一來便能大幅加速這個在尖峰時間的 javascript 下載慢速的問題.

所以原來的 <script type=”text/javascript” src=”http://www.hemidemi.com/digest/user/timhuang/bookmark/recent”></script> 就被改為引用實作好的 cache php 檔案: <script type=”text/javascript” src=”http://diary.tw/skin/customize/1/hemidemi.php”></script> 如此一來, 該 php 就會依上述工作方式來進行工作.

實作完成後, 覺得要多加個統計來找出 cache 的比例, 於是再利用了另一個檔案記錄 cache 和總使用次數, 並例在該 HEMiDEMi 區域, 如下:

其中前面的數字代表使用 cache 的, 後面為總使用次數, 這樣看起來蠻好的…

[2006/10/4 23:46]
再新增讓使用者知道是利用 cache 出來, 或是真實去 HEMiDEMi 取得內容的狀況, 會出現 Cached 及 Real 兩種說明:

[2006/10/9 16:46]
為了能讓 cache 效能更發揮, 調整 cache 時間為 6小時, 所以 Real 的機會更低囉..

 

分類
TatterTools

新增最後訪問來源插件-LastReferers 1.0

每次在不想登入後台的狀況下, 就想得知從哪些網站參照過來, 也方便來訪的使用者能快速得知最後來訪的訪客來源, 於是寫了一個小插件, 用來做這項功能.

其實也就是將資料表 {$database[‘prefix’]}RefererLogs 關於該 blog 的最後五筆參考來源顯示出來, 難度不高, 方便使用, 僅需解開放置放 plugins 目錄下, 再修改 skin 上加入 [ ##_LastReferers_## ] 標籤即可(為避免衝碼, 將 ## 前後加上空白), 顯示效果如下:

而且可以點擊回去, 相當實用方便, 上線後發現大多還是由搜尋引擎來的, 方便給 blog 的站長參考!
下載插件:
LastReferers1.0.zip

[2007/6/18 23:00]
給 Chieh 站長使用 LastReferersAdmin 1.0 版本(注意是 TatterTools 1.1 以上才能使用哦!
LastReferersAdmin1.0.zip

Chieh 2007/02/21 15:53

的確是很方便的plugins,待會找時間安裝看看.. 🙂
請問可以安裝至後台嗎?

Timothy 2007/02/22 17:11

當然可以囉, 在本站上的 tt 插件都是可以安裝在後台內的啦. 歡迎自行下載使用, 若有任何問題, 也歡迎討論囉!

Chieh 2007/02/23 14:46

真是太好了!=)
以前找TT的插件總是要看到Ox◇o⊥x的韓文,真是痛苦..
現在終於找到tt在正體中文的高手了!
以後還請多多指教!

Timothy 2007/02/23 16:28

你太客氣了, 若有任何問題, 大家一起來研究研究囉!!

Chieh 2007/06/19 02:11

哇…Tim兄太感謝你了!每次都要來麻煩你老人家..真是不好意思..ccc

Timothy 2007/06/19 08:42

不客氣啦, 希望能對你有幫助哦!!

 

分類
Javascript

SyntaxHighlighter – 語法高亮標記

在 “懶懶喵日記” 那裡看到一個不錯的 client 工具, dp.SyntaxHighlighter, 因為之前也想在網頁上呈現一些程式碼, 而看起來也希望能達到比較像程式碼的方法呈現, 所以就來試用了一下, 該網站連結:

http://www.dreamprojections.com/syntaxhighlighter/

使用這個 javascript library 的好處是對 server side 沒有負擔(因為都丟到 client side 去做了), 而且對於大部分的應用領域來說都非常足夠了, 功能很多, 支持的語法有:

1. C#
2. CSS
3. C++
4. Delphi
5. Java
6. JavaScript
7. PHP
8. Python
9. Ruby
10. SQL
11. Visual Basic
12. XML / HTML

而且還有指定行, 顯示行(line #), 顯示列(col #), 動態展開, 看原始內容(利用 textarea 新開視窗), 列印等不錯的功能, 但是還是有一些些缺點, 例如無法指定大小(預設是全部程式碼顯示的高度及所在區域的全部寬度, 所以寬度可以自行利用 html 語法再調節, 但高度沒辦法, 有篇類似的方法, 可以參考這篇文章: http://bbs.toseek.info/cgi-bin/topic.cgi?forum=3&topic=36 ), 但真的還是很好用的一組 Syntax Highlighter, 所以推薦給大家囉, 目前也已應用在 sample.diary.tw 網站上, 例如: http://sample.diary.tw/2/chart1.php , 未來應該會多利用這組程式碼來作為顯示程式碼的工具囉!
使用方式很簡單, 下載該組件後, 在要使用的頁面上加入:

css:

<link type="text/css" rel="stylesheet" href="Styles/SyntaxHighlighter.css"></link>

javascript 函數:

<script language="javascript" src="Scripts/shCore.js"></script>
<script language="javascript" src="Scripts/shBrushXml.js"></script>
<script language="javascript">
dp.SyntaxHighlighter.HighlightAll('code');
</script>

其中 css 可自行參考如何放置, 在 javascript 則是要含入 shCore.js 後, 再含入 shBrushXXX.js 其中 XXX 為要使用的程式語法, 如 Xml, Cpp 等. 接下來就是要一行起始指令:
dp.SyntaxHighlighter.HighlightAll(‘code’);
其中的 ‘code’ 為要 highlight 區域 (textarea) 的名稱, 所以要使用就用
<textarea name=code class=c>….</textarea>
其中的 name 就指定為 code 即可, 而 class 則為要 highlight 的程式語法名稱對應的 class 即可, 另外尚有幾個功能用參數如下:

1. Smart tabs
2. First line
3. Expand code
4. Show columns
5. No gutter

可以再參考說明, 例如希望顯示預設先不展開, 可以這樣下:
<textarea name=code class=c:collapse>….</textarea>

呈現結果很不錯哦, 如下:

請大家多多利用!
本篇文章的 sample 可以參考: http://sample.diary.tw/3/cpp.php

延伸閱讀: http://www.cnblogs.com/unruledboy/archive/2005/06/28/HTMLHightLightCS.html

 

分類
Database

用CTE來取出指定筆數 – SQL2005

SQL2005中有個CTE (Common Table Expression)功能十分強大, 可以用來做遞迴式的參考, 藉以達成複雜的查詢邏輯並簡化查詢指令, 是 SQL2005的一個新的重要功能.

在使用 MySQL 時, 可以容易地利用 limit m, n 的語法進行指定筆數的取得, 然而在 SQL Server這裡一直沒有這種功能. 這樣的需求通常是應用在分頁上會用到. 不過SQL Server可以利用 ADO存取方式內的分頁方法來進行, 也就避開了這個問題. 但無論如何, 仍是將所有的資料帶到查詢端(如客戶端或是中間層)後, 再進行分頁, 效能仍然不佳.

分類
Database

方便好用的Database Mail – SQL2005

有在用 SQL 2000的使用者還記得 SQL Mail吧. SQL Mail是利用MAPI的方式進行mail的傳遞, 在實務上往往會使用outlook配合exchange server來進行環境的建立, 也造成在使用SQL Mail前, 要準備好這些環境. 但在一般的應用上, 要使用SQL Mail, 又要有這些環境, 不見得很容易實現. 另外再加上SQL Mail在cluster環境時, 也要注意兩台的MAPI profile的設定, 才不會發生發不出mail的問題.

是的, 你的不方便, MS都知道, 到 SQL 2005後, 你會發現多了一個 Database Mail 的功能, 本篇文章就是來介紹這個方便又好用的 SQL Server發信方式. Database Mail 是基於 SMTP的方式來寄送信件, 所以很容易設定, 不太需要像 MAPI 需要 outlook 介面及 exchange server 配合寄送, 當然還是要建立 profile, 好讓 SQL Server 明白你要發信的帳號. 不過因為是走 SMTP, 所以設定也就容易多了. 而且 Database Mail 是能完全支援 cluster 的(因為是用 SQL Server 的機制, 而非外部的資源).

分類
程式技術

XML/SWF Charts好用繪製圖表組件

同事給了一個連結, 看到了 www.maani.us 上有個 XML/SWF Charts的繪製圖表的組件, 介面很不錯, 而且又有動畫效果, 於是就來試試看.

這個網站上有多組套件可用, 這次針對 XML/SWF 進行安裝試用, 他的安裝很容易, 就下載放到 web server 上即可, 而 data 的內容可以拉 xml 的檔案, 或是 asp/php/cfm/cgi 等可輸出的網頁皆可. 內容不難實作, 格式如下: