LifeType 與 Gallery2 plugin 修改

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

LifeType 與 Gallery2 plugin 修改

文章twu2 » 週四 2月 16, 2006 4:41 pm

這幾天把 LifeType 裝了起來, 發現有一個 Gallery 的 plugin 可以使用, 不過我昨天試了一天, 都無法正常運作. 忙了一天後, 終於讓我找到無法運作的原因了.

我不確定為什麼這個 plugin 在別的網站上頭是可以運作的, 因為裡頭在使用 Gallery API 時, 參數似乎不怎麼正確, 且傳回值在沒有錯誤時是個 null 而不是一個 object, 所以接著用來檢查的動作就會有問題 (也許是版本不同的關係, 不過我看過 2.0.2 與 2.1 的 source code, 都不應該這樣子寫.

所以, 簡單改了一下:
代碼: 選擇全部
diff -Nur gallery.orig/class/gallery/galleryhelper.class.php gallery/class/gallery/galleryhelper.class.php
--- gallery.orig/class/gallery/galleryhelper.class.php   2005-05-17 13:26:12.000000000 +0800
+++ gallery/class/gallery/galleryhelper.class.php   2006-02-16 15:50:29.501266842 +0800
@@ -60,11 +60,12 @@
    // Set up the gallery call
         $ret = GalleryEmbed::init( array( 'embedUri' => $this->_embedUri,
-                                          'embedPath' => $this->_embedPath,
-                                          'relativeG2Path' => $this->_relativePath,
+                 'g2Uri' => $this->_relativePath,
+                 'loginRedirect' => '/index.php',
                                           'activeUserId' => '' ) );
 
         // Return error details if there is a problem
-        if ($ret->isError()) {
+        if ($ret != null) {
             $this->_error = $ret->getAsHtml();
             return;
         }
@@ -94,7 +95,7 @@
         $ret = GalleryEmbed::done();
 
         // Check for errors
-        if ($ret->isError()) {
+        if ($ret != null) {
             return $ret->getAsHtml();
         }
 
@@ -121,12 +122,13 @@
 
    $ret = GalleryEmbed::init( array( 'embedUri' => $this->_embedUri,
-                 'embedPath' => $this->_embedPath,
-                 'relativeG2Path' => $this->_relativePath,
+                 'g2Uri' => $this->_relativePath,
+                 'loginRedirect' => '/index.php',
                  'activeUserId' => '',
                  'fullInit' => true) );
       
    // Check for errors
-        if ($ret->isError()) {
+        if ($ret != null) {
             return $ret->getAsHtml();
         }
 
@@ -141,7 +143,7 @@
    }
 
    // Check for errors
-   if ($ret->isError()) {
+   if ($ret != null) {
        return $ret->getAsHtml();
    }
 
@@ -149,7 +151,7 @@
         $ret = GalleryEmbed::done();
    
    // Check for errors
-        if ($ret->isError()) {
+        if ($ret != null) {
             return $ret->getAsHtml();
         }
 


這個 patch 可以到這兒抓: http://www.teatime.com.tw/~tommy/mypatc ... lery.patch

經過這個修正後, Gallery 應該可以在 LifeType 中正常使用了.

有關這個 plugin 的說明並不多, 有些要注意的地方如下:

* Gallery 部份

在網址改寫的部份, 其中 "限制熱鏈接項目" 這個項目不可以使用. 另外 "顯示項目" 這個也最好不要用 (用了之後, 有個壞處是當你要用 specificItem 設定來顯示某張圖片時, 很難由原本的 Gallery 來查出到底 itemId 是什麼), 如果要使用這個功能, 後面對於 LifeType 的部份 rewrite 模組的設定也要加上這項才可以.

* LifeType 部份

Absolute path: 設定你的系統上頭, 安裝 Gallery2 的 embed.php 的完整路徑. 以我的系統而言, 就是 /usr/share/gallery2/embed.php

Embed uri: 你的 LifeType 使用 Gallery 時, 應該用的 index.php 連結與參數. 以我的系統而言, 就是 blog.teatiem.com.tw/index.php?op=gallery&blogId=1 (如果是同一個 hostname, 則可以省略 hostname)

Embed path: 弄不清楚做什麼用的, 實際上好像也沒用到這個參數了, 就打個 / 上去吧. 程式裡頭也沒用到這個參數了.

Relative path: 就是你的 Gallery 的 main.php 所在的路徑. 以我的系統來說, 就是 gallery.teatime.com.tw/main.php (如果是同一個 hostname, 則可以省略 hostname, 用相對路徑表示)

如果你在 Gallery 有啟用 "顯示項目" 的網址改寫, 在 Gallery 的 .htaccess 會有下列的設定:
代碼: 選擇全部
RewriteCond %{THE_REQUEST} /v/([^?]+)(?.| .)
RewriteCond %{REQUEST_FILENAME} !/main.php$
RewriteRule .   /main.php?g2_view=core.ShowItem&g2_path=%1  [QSA,L]


這時在 LifeType 的 .htaccess 就要有相對應的設定:
代碼: 選擇全部
RewriteCond %{THE_REQUEST} /v/([^?]+)(?.| .)
RewriteCond %{REQUEST_FILENAME} !/index.php$
RewriteRule .   index.php?op=gallery&blogId=1&g2_view=core.ShowItem&g2_path=%1   [QSA,L]

經過這樣的修正與設定後, 就可以順利將 LifeType 與 Gallery2 整合在一起了

要看運作結果可以參考我的部落格: http://blog.teatime.com.tw/1
twu2
懵懂的國中生
懵懂的國中生
 
文章: 219
註冊時間: 週二 3月 11, 2003 2:58 pm
來自: Taipei

LifeType 與 Gallery2 plugin 修改 part 2

文章twu2 » 週五 2月 17, 2006 4:54 pm

到 Gallery 的網站上看了一下 API, 發現有 API 可以把路徑或檔案名轉換成 itemId 來用, 這樣子就算都用 rewrite 來產生可讀性較高的路徑, 一樣可以很輕鬆的在 plugin 中搭配 specificItem 來指定 itemId 了.

把 gallery/class/gallery/galleryhelper.class.php 做一下小修正:
代碼: 選擇全部
--- galleryhelper.class.php.orig        2006-02-17 16:35:56.557242419 +0800
+++ galleryhelper.class.php     2006-02-17 16:33:29.227243493 +0800
@@ -132,6 +132,9 @@

        // Get the image block
         if ( $itemid != "" ) {
+           if (is_numeric($itemid) == false) {
+               list($ret, $itemid) = GalleryCoreApi::fetchItemIdByPath($itemid);
+           }
            list($ret, $g2data) = GalleryEmbed::getImageBlock( array( 'blocks' => $blocks,
                                                                      'show' => $show,
                                                                      'itemId' => $itemid) );


這樣子修正後, 只要你在 Gallery 中看到的相簿路徑像是 v/tommy_baby 就可以在 plugin 設定 itemId 的地方填入 tommy_baby 就會查出該相簿的 itemId 來顯示. 如果是相片如 v/tommy_baby/tommy_baby_200601/DSC_0006.JPG, 就在 plugin 設定 itemId 的地方填入 tommy_baby/tommy_baby_200601/DSC_0006.JPG 就可以了.

這樣子就方便許多了, 也沒有上一篇所說的使用 rewrite 功能後, 很難找出 itemId 的問題了.

不過會有另外一個問題是, 如果你的路徑名稱剛好都是數字, 就會被認為那是一個 itemId, 而不是路徑, 就不會再去轉換一次了.

另外, 發現這個 plugin 只能在設定 specificItem 時, 設定 itemId 的值, 如果不是 specificItem 時, 就會自動清除 itemId 的設定值. 但是在 Gallery 的程式中, 並沒有這個限制, 也就是我們可以使用 randomImage 搭配某個相簿的 itemId, 就可以隨機的由這個相簿 (含子相簿) 中選取一張相片來用. 所以順便把這個給改了:
代碼: 選擇全部
--- plugingalleryupdateconfigaction.class.php.orig      2006-02-17 17:40:36.363616876 +0800
+++ plugingalleryupdateconfigaction.class.php   2006-02-17 17:41:13.524118432 +0800
@@ -87,7 +87,7 @@
        }

        if ( $this->_blocks != "specificItem" ) {
-           $this->_itemid = "";
+           //$this->_itemid = "";
        }

        if ( !file_exists( $this->_absolutePath ) ) {


上頭的檔案是 gallery/class/action/ 這個路徑裡頭.

這樣子處理之後, 如果我使用 randomImage, 在 itemId 輸入 tommy_baby 時, 就會變成隨機選取 tommy_baby 相簿裡頭的照片了.
twu2
懵懂的國中生
懵懂的國中生
 
文章: 219
註冊時間: 週二 3月 11, 2003 2:58 pm
來自: Taipei

Re: LifeType 與 Gallery2 plugin 修改 part 2

文章twu2 » 週六 2月 18, 2006 5:30 pm

twu2 寫:不過會有另外一個問題是, 如果你的路徑名稱剛好都是數字, 就會被認為那是一個 itemId, 而不是路徑, 就不會再去轉換一次了.


晚上試了一下, 發現可以在 itemId 前頭加上 / 來避免這個問題. 加上之後, 就不會被認為是數字, 且 Gallery 也接受這樣的方式.

修改這個 plugin 的中文 UTF8 語系檔.

可以由下面抓下面這個檔案回去, 放在 gallery/locale 下頭, 存成 locale_zh_TW.php 就可以了.

http://blog.teatime.com.tw/plugins/gall ... _zh_TW.txt
twu2
懵懂的國中生
懵懂的國中生
 
文章: 219
註冊時間: 週二 3月 11, 2003 2:58 pm
來自: Taipei


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客