您在這裡

Lightbox V2

charlesc's 的頭像
charlesc 在 2006-06-10 (週六) 00:55 發表
模組介紹: 

Lightbox 光箱特效,用很酷的效果,讓小圖片在目前的網頁上方重疊顯示大圖片。此模組會自動地把特效所需要的Javascript和CSS放入網頁裡,就不需要手動去編輯版型。它不只可以用來顯示單張圖片,也可以用在多張相片的相簿裡。

模組分類:

回應

相對於 lightbox,我推薦使用 thickbox,thickbox 被實作出來,最主要的“原因“如下:

  • size。lightbox 總計使用了三個 javavscript 檔,要 100KB 出頭,而 thickbox 只要 2x~3xKB。這數字看起來沒差多少,不過在我用了一陣子 lightbox 後,覺得這個 size 的差距在一些情況下是有差的。例如,你在美國 LA 機場,使用到爛爛的 wireless ap 回來看你的網站時…
  • thickbox 可以做到「秀單張圖」「秀多張圖」「秀另一個網頁的內容」「秀 iframe」…lightbox 只能秀圖。
  • thickbox 使用 jQuery,而 jQuery 已經被包含在 drupal 5.0 裏頭了 :)。

基於上述三個原因,已經開始著手把自己的網站,由原來的 lightbox 改為 thickbox 了 :)

ps. 這類的 box,可以參考這一篇 Lightbox 收集

charlesc 的手腳好快。

在這邊提供一個自己寫的 .php,目的在把之前有用到 lightbox v2 的 node 的內文,轉為使用 thickbox。

<?

$link = mysql_connect( '機器', '帳號', '密碼') or die('failed to mysql_connect!.');
mysql_query('SET NAMES "utf8"', $link);
mysql_select_db('資料庫名') or die('Could not select database');

$query = "UPDATE node_revisions SET body = REPLACE(body, 'rel=\"lightbox\"', 'class=\"thickbox\"')";;
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$query = "UPDATE node_revisions SET teaser = REPLACE(teaser, 'rel=\"lightbox\"', 'class=\"thickbox\"')";;
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

$querys = array();

$query = "SELECT nid, body FROM node_revisions WHERE body LIKE '%rel=\"lightbox[%'";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
$col_value = ereg_replace( "rel=\"lightbox\[([a-zA-Z0-9_]+)\]\"", "class=\"thickbox\" rel=\"\\1\"", $line['body'] );
$query = "UPDATE node_revisions SET `body` = \"" . mysql_real_escape_string($col_value, $link) . "\" WHERE nid = " . $line['nid'];
$querys[] = $query;
}
// Free resultset
mysql_free_result($result);

$query = "SELECT nid, teaser FROM node_revisions WHERE teaser LIKE '%rel=\"lightbox[%'";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
$col_value = ereg_replace( "rel=\"lightbox\[([a-zA-Z0-9_]+)\]\"", "class=\"thickbox\" rel=\"\\1\"", $line['teaser'] );
$query = "UPDATE node_revisions SET `teaser` = \"" . mysql_real_escape_string($col_value, $link) . "\" WHERE nid = " . $line['nid'];

$querys[] = $query;
}
// Free resultset
mysql_free_result($result);

$i=0;
foreach( $querys as $query ) {
$i++;
$r = mysql_query($query) or die('Query failed: ' . mysql_error());
}
echo $i;

// Closing connection
mysql_close($link);
?>

1. code 寫得很隨便,所以請謹慎使用。記得自行修改裏頭的中文部分。
2. code 沒用到任何 drupal 的東西,所以可以獨立執行,只要可以存取資料庫就好了。
3. 不考慮 table 有 prefix 的情況,有的話,得自行在 node_revisions 前加上。
4. 請偷偷執行,不要告訴別人你有這個 .php,最好是執行完後就砍了這個 .php。
5. 我的程式是假設你使用 mysql :p
6. 執行前,請記得備份你的資料庫,以免有個萬一時,還有得救。
7. 不曉得怎麼讓 node 的 teaser 自動與它的 body 做 sync,導致得分別對 body 和 teaser 兩個欄位都做一次處理,感覺有點笨。
8. mysql expression 有 replace, regular expression match,可惜沒有 regular expression replace。
9. 這個 tag 會吃掉 tab 和 space,感覺有點可惜(不過也可能是故意的?)

> 7. 不曉得怎麼讓 node 的 teaser 自動與它的 body 做 sync,導致得分別對 body 和 teaser 兩個欄位都做一次處理,感覺有點笨。

沒差啦... :P

--
from open mind to open source~

想請問有關Lightbox2的應用

安裝完畢後台測試顯示也可以,但是要怎樣設定讓一般沒有權限的訪客,

也可以不用登入一樣有效果出現嗎??