顯示具有 Lifetype 標籤的文章。 顯示所有文章
顯示具有 Lifetype 標籤的文章。 顯示所有文章

03 10月 2007

修正Lifetype文章中有backslash '\'的問題

我已經被Lifetype中有backslash問題快煩死了...

在文章中要輸入backslash '\'時,實際上我在打文章時,必須輸入'\\'
如果輸入'\'的話,這個backslash就會被lifetype默默地吃掉....默默地...默默地...默默地...

如果文章中我輸入'\\'
顯示出來的結果是'\'
再重新編輯文章時,輸入區的文章卻變成顯示'\'而沒有顯示'\\'...
因此如果沒有再將'\'改成'\\'的話
這個backslash就會被lifetype默默地吃掉了...

以前想說自己找看看bug在哪,結果...打開Lifetype的source code來看,看得超痛苦的...
因為Lifetype將所有control頁面的流動都包在php中,因此要了解它其中的小變數,真得滿困難的...

不過不知為何,今天開竅了!
上Lifetype的網站API Document頁面看source code,感覺還滿簡單的
看到不知道的變數,都可以直接點選連結看更詳細的說明~
這樣子看就簡單多了,終於找到bug的地方了~

我目前的lifetype版本為lifetype1.2.1

修改的地方只有一個...
lifetype-1.2/class/view/admin/admineditpostview.class.php 裡面的第53行

$this->setValue( "postText", str_replace('&', '&', $this->_article->getText( false )));

改成

if( get_magic_quotes_gpc() )
$this->setValue( "postText", str_replace( '\\',"\\\\", str_replace('&', '&', $this->_article->getText( false ))));
else
$this->setValue( "postText", str_replace('&', '&', $this->_article->getText( false )));

將Lifetype Server從Windows搬移至Linux

由於本站之前在windows上執行,有時候會造成Apache莫名奇妙地失靈,所以才想將server移至Linux Ubuntu上執行。這樣子所吃的資源可能也會比較少一點。

以下紀錄了移機的過程,主要遇到的問題有...編碼以及轉簡潔網址的問題。

[事前準備工作]

  1. 將Windows的資料備份出來
    • 將apache底下的lifetype整個資料夾壓縮備份起來(用zip壓縮,傳至Linux上再用unzip解壓縮)
    • 進入phpMyAdmin後,將lifetype資料庫輸出至檔案中lifetype.sql(請選擇「使用完整新增指令」)
  2. 在Ubunte上安裝Apache、Mysql、PHP(在這邊不多加著墨)
    • sudo apt-get install apache2
    • sudo apt-get install mysql
    • sudo apt-get install php
    • sudo apt-get install php-mysql
  3. 將原本Windows的lifetype程式碼,傳至apache2預設資料夾/var/www/
    • unzip lifetype.zip
  4. 上網下載phpMyAdmin,用來管理mysql資料庫

[重建Database]

  1. 利用phpMyAdmin建立一個lifetype資料庫,校對要調成utf8_unicode_ci
  2. 在Windows匯出的lifetype.sql檔前面加上
    • SET NAMES utf8;
      SET CHARACTER_SET_CLIENT=utf8;
      SET CHARACTER_SET_RESULTS=utf8;
  3. 在cmd line下指令,匯入lifetype.sql檔
    • mysql [lifetype DB name] -u[Name] -p[Password] < lifetype.sql \
      --default-character-set=utf8
    • # 因為mysql的預設編碼為latin1,因為需設定正確的character-set才能匯入
    • # 或是直接更改mysql預設的編碼方式為utf8就更乾脆了,可修改mysql的設定檔my.cnf
    • # [client]
      # default-character-set=utf8
      # [mysqld]
      # default-character-set=utf8
      # default-collation=utf8_general_ci
  4. ---- Error Message ----
    都按照上面的步驟做的話,應該就不會有所謂的亂碼出現才對。一開始我沒就直接匯入,也不疑有他,結果就犯了全天下男人都會犯的錯…ERROR 1064 (42000) at line 330: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xxxxxx' 主要的原因就是因為編碼問題,因為lifetype.sql中挾雜著鼎鼎大名的「許功蓋…」含有跳脫字元「」,所以就視為字串已結束,就出現錯了。
    不過我後來都照上面的做了,卻還是不斷出現同樣的錯誤訊息纏著我,讓我陷入人生中的低潮,後來才發現,原來是因為在Windows匯出lifetype.sql檔案,沒有選擇「使用完整新增指令」,所以才會不斷地出錯,當我又重新試了一次之後,終於成功了!!!讓我流下了感動的眼淚,並且大喝了一聲X,響徹雲霄!!!

[建置Lifetype網站]

  1. 把原本在Windows上的lifetype資料夾複製到/var/www後,建議是把wizard.php抓回來,重新建置一遍,這樣子會比較簡單一點,否則要自己動手修改一些東西。
    • 修改/lifetype/config/config.properties.php內的db_host為
      $config['db_host'] = localhost
    • 將tmp及gallery這兩個資料夾權限改為777
      % cd /var/www/lifetype
      % chmod 777 tmp
      % chmod 777 gallery
    • 為了安全性起見,不將gallery底下的資料夾權限全開,因此必須將它的Owner改為apache的名字,我的主機上apache的名稱為www-data
      % chown -R www-data gallery
    • 看gallery底下有幾個資料夾就改幾個資料夾的權限,因為這些都是blog user上傳檔案的資料夾,因為本站只有一個user,blog_user_id為1,所以就只有一個資料夾「1」
      % cd gallery
      % chmod 755 1
      再將1資料夾底下的previews&previews-med的權限改成755
      % cd 1
      % chmod 755 previews
      % chmod 755 previews-med
  2. 輸入網站的網址,試試看是否正常運作。照理來說,到目前為止應該都是正常的。
    % /etc/init.d/apache2 start
    如果出現Error Message: apache2: Could not determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
    在/etc/apache2/apache2.conf中,加入ServerName localhost即可
  3. 但是,要進入admin.php的後台管理系統卻會失敗,因為原本網站的IP跟新網站的IP不一樣,而原本的DB中紀錄的base_url導致網頁中的連結都不正常了。
    @解決方法:利用phpMyAdmin進入lifetype的DB,進入lt_config這個Table。修改其中的兩項參數:
    base_url
    blog_does_not_exist_url
    將這兩個url參數中的網址改成新的IP就行了!
  4. 網站中有使用authImage外掛,可能會發現在產生驗證圖檔時,出現錯誤訊息「You don't have GD support compiled in, we cannot create an authimage. Please activate GD Support.」。這是因為你的php5沒有使用GD module,因為只要將GD module安裝起來即可,以下為Ubuntu的做法
    % apt-get install php5-gd
    % /etc/init.d/apache2 restart

[使用簡潔網址]

  1. 有使用簡潔網址的人,因為Ubuntu預設沒有掛載mod_rewrite,所以要先將module rewrite掛進來,因為apache在安裝時,其實已經裝載好,只是尚未load而已。而load的語法已寫好放在/etc/apache2/mods-available中,只要做個link放至mods-enabled,apache就會自動去load了
    % sudo ln -s /etc/apache2/mods-available/rewrite.load \
    /etc/apache2/mods-enabled/rewrite.load
    或是
    %
    sudo a2enmod rewrite
  2. 修改/etc/apache2/sites-enabled/000-default
    先找到
    <Directory /var/www>
    ...
    </Directory>
    將其中的AllowOverride後的None改為All
    Options後面要有FollowSymLinks

    然後重新啟動Apache
    /etc/init.d/apache2 restart
  3. 順利的話,應該就一切正常了:)
    可惜的是,我一點也不順利....Orz,我開網頁時,一直遇到error 500,打開apache的error.log檔來看時,顯示的錯誤是:「/var/www/lifetype/.htaccess: </Files> without matching <Files> section 」我一直不知道是哪裡的問題,千萬百試之後,才發現,我的.htaccess檔的編碼是utf8,後來把它改成ansi編碼就OK了~我猜可能是從windows複製過來linux後的才變這樣。

27 9月 2007

Lifetype 1.2.x版 結合BBClone

BBClone是統計網頁瀏覽人數的好幫手
感謝之前已經有Mark大大將Lifetype與BBClone結合在一起了
詳細的文章在這邊
http://blog.markplace.net/marks_development_blog/2/2005/05/06/4

但是上面這個只適用於1.0.x版的吧
1.1.x我沒試過
筆者目前所使用的版本是1.2.1版
按照Mark大大的方法掛上去後 會產生一些問題
原因是因為Lifetype的核心有修改過
所以有部分的code會產生錯誤...

按照Mark大大的方法做完之後
將index.php中原本插入在
SessionManager::init();
這一行之後的code,
只要再加上成後面有// 1.2.x 的句子
就可以了

 ///BBClone
include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" );//for 1.2.x
define("_BBCLONE_DIR", PLOG_CLASS_PATH."bbclone/");
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if(!isset($_COOKIE["stats_cookie_nolog"])) {
$articles =& new Articles();
if(!empty($_REQUEST['articleId'])) {
//$article = $articles->getUserArticle($_REQUEST['articleId']); //1.0.x
$article = $articles->getArticle($_REQUEST['articleId']);// 1.2.x
$pageName = $article->getTopic();
} elseif(!empty($_REQUEST['articleName'])) {
if(!empty($_REQUEST['blogId'])) {
$blogId = $_REQUEST['blogId'];
} else {
$blogs =& new Blogs();
$blogInfo = $blogs->getBlogInfoByName($_REQUEST['blogName']);
$blogId = $blogInfo->getId();
}

$article = $articles->getBlogArticleByTitle($_REQUEST['articleName'], $blogId);
$pageName = $article->getTopic();
} else {
$pageName = 'index';
}

define("_BBC_PAGE_NAME", $pageName);
if (is_readable(COUNTER)) include_once(COUNTER);
}

或是直接下載已經改好的index.php

用了dp.SyntaxHighlighter後所產生的編輯問題

因為dp.SyntaxHighLighter的程式碼上色方法
是將code寫在<textarea>中
不過因為Lifetype的線上編輯器也是使用<textarea>
所以在文章新增完成後,再去編輯修改文章時就會產生問題了

因為文章裡有</textarea>這個tag
所以編輯頁面看到這個就會以為tinyMCE的編輯畫面到此為止了
結果會使得</textarea>後面的文字,全都跑去外面鬼混了…

解決方法:
templates/admin/editpost.template 75行
把
{$postText}
改成
{$postText|replace:'</textarea>':'&lt;/textarea>'}
這樣子的話 編輯畫面就會顯示正常了...

 

以上解法也是在網路上看到同好高手解決的
http://www.jiayun.org/plog/1_jiayun/archive/188__dpsyntaxhighlighter_ee.html

解決tinyMCE會吃掉textarea中的換行符號\n

由於lifetype1.1版以上的線上編輯器就開始使用tinyMCE
因此有個問題就存在了,tinyMCE會將<textarea></textarea>中間的換行符號n吃掉
所以在<textarea></textarea>中的文字全部都會擠成同一行

解決之道:
到lifetype的資料夾底下
lifetype / js / tinymce 的 tiny_mce-plog.js 這個檔案裡
加入這一行
remove_linebreaks : false ,
儲存之後就ok了。

修改Lifetype的中文翻譯

如果對Lifetype中文版的中文翻譯有點不滿意的話
可以自己到 locale/locale_zh_TW.php這個檔案修改裡面的內容

因為我本人是不太喜歡將「一月」稱為「元月」,感覺很怪Tongue out
譯者不要打我...我沒有說你翻得不好....

增加SyntaxHighlighter到自己的Lifetype上

SyntaxHighlighter
是一個能為程式碼加上顏色的好物!
方法是透過javascript & css為<textarea>中的code加上顏色


主要是參考
中文翻譯者的網站:
http://www.dcaid.com/article/article.asp?tid=52

原作者網站:
http://www.dreamprojections.com/syntaxhighlighter/

首先 到這個地方下載我自行改好的程式
下載

將這個檔案解壓縮後放在lifetype的目錄下

然後到你所使用的template的目錄下
ex: templatesstandard
找到header.template與footer.template

首先在header.template裡頭的<head>...</head>之間插入

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

然後再到footer.template裡頭的</body>之前插入

<script class="javascript" src="SyntaxHighlighter/Scripts/shCore.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushCSharp.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushPhp.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushJScript.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushJava.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushVb.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushSql.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushXml.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushDelphi.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushPython.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushRuby.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushCss.js"></script>
<script class="javascript" src="SyntaxHighlighter/Scripts/shBrushCpp.js"></script>
<script class="javascript">
dp.SyntaxHighlighter.HighlightAll('code');
</script>