Textpattern 固定網址

Textpattern 的官方釋出版本有提供五種固定網址格式,每一種的格式後面都會附加上標題;但對於非英語系國家而言,將文章標題附加在固定網址之後反而會造成困擾-因為我們較常使用中文命名的標題,偏偏 Textpattern 對於將中文標題轉化為網址的這塊並不是處理得很好,常常標題英文之後的文字都漏掉。

所以我都是在「網站進階設定」裡把「附加標題於永久網址」的選項關掉。

雖然說 Textpattern 提供的五種固定網址格式都相當不錯,但因為我是打算從WP轉換過去,當然連結也必須相對應到,以我現在的wp的固定網址格式 /archives/%year%_%monthnum%/%post_id% 而言,官方所提供的格式並不符合我的需求。

曾經以為必須要安裝什麼神秘的外掛才能達到自訂固定網址的功能,經過嘗試兩套固定網址的外掛皆宣告失敗,才改用 .htaccess 來達到轉換功能,沒想到竟然一試就成功(難道外掛與我命格相衝嗎 :南瓜頭:)

第一個步驟當然就是開啟 .htaccess 加入對應的 RewriteRule

註:我是加在 RewriteRule ^(.*) index.php 的上一行,不然會無法運作

php · [高亮] · [原始]

  1. RewriteRule ^([A-Za-z0-9_]+)/[0-9]{4}_[0-9]{2}/([A-Za-z0-9_]+)/?$ index.php?s=$1&id=$2 [L]
RewriteRule ^([A-Za-z0-9_]+)/[0-9]{4}_[0-9]{2}/([A-Za-z0-9_]+)/?$ index.php?s=$1&id=$2 [L]

再來就是匯入wp文章之前,先到「外觀」>「版區」裡建立一個新的版區,名為 archives﹔然後在匯入wp的設定頁面「匯入到版區 」選擇剛剛新增的 archives,匯入完成之後,從wp匯入的文章已經穩穩的存放在archives版區之內啦!

如何使匯入的文章id與wp上的文章id一致,請參考
在 Textpattern 匯入WP的文章

現在要開始修改txp,讓它在固定網址格式的選項中出現 /版區/年_月/id/標題,以便將全站文章連結對應成這個格式。
textpattern/include/txp_prefs.php

php · [高亮] · [原始]

  1. # FIND
  2. ‘title_only’                            => gTxt(‘title_only’),
  3.  
  4. # ADD NEXT LINE
  5. ’section_yearmonth_id_title’        => gTxt(’section_yearmonth_id_title’),
# FIND
\'title_only\'							=> gTxt(\'title_only\'),

# ADD NEXT LINE
\'section_yearmonth_id_title\'		=> gTxt(\'section_yearmonth_id_title\'),

textpattern/publish/taghandlers.php

php · [高亮] · [原始]

  1. # FIND
  2. switch($permlink_mode) {
  3.  
  4. # ADD NEXT LINE
  5.             case ’section_yearmonth_id_title’:
  6.                 list($y,$m,$d) = explode("-",date("Y-m-d",$posted));
  7.                 if ($prefs[‘attach_titles_to_permalinks’]) {
  8.                     return hu."$section/{$y}_$m/$thisid/$url_title";
  9.                 } else {
  10.                     return hu."$section/{$y}_$m/$thisid/";
  11.                 }
# FIND
switch($permlink_mode) {

# ADD NEXT LINE
			case \'section_yearmonth_id_title\':
				list($y,$m,$d) = explode("-",date("Y-m-d",$posted));
				if ($prefs[\'attach_titles_to_permalinks\']) {
					return hu."$section/{$y}_$m/$thisid/$url_title";
				} else {
					return hu."$section/{$y}_$m/$thisid/";
				}

修改語系檔 textpattern/lang/zh-tw.txt
在最後加入一行

section_yearmonth_id_title => 版區/年_月/id/標題

到「管理」「設定」「語系管理」中拉到最下面,選擇 從檔案安裝 (僅限系統)來更新繁體中文語系。

現在固定網址格式已經多了剛剛新增加的選項,要啟用新增加的固定網址型態只需要將固定網址結構設為版區/年_月/id/標題

目前這個固定網址格式只有在我的本地伺服器上運用,並沒有實際上線測試過,但目前為止沒發現什麼問題,如果有問題我也認啦 ˊ_ˋ”

Update 2006.09.23
非常遲鈍的到今天才發現這樣改固定網址格式會損失錯誤頁面支援的功能
修改一下publish.php
textpattern/publish.php

php · [高亮] · [原始]

  1. # FIND
  2. switch ($permlink_mode) {
  3.  
  4. # ADD NEXT LINE
  5. case ’section_yearmonth_id_title’:
  6.     if (empty($u2)) {
  7.         $out[’s’] = (ckEx(’section’,$u1)) ? $u1 : ;
  8.         $is_404 = empty($out[’s’]);
  9.     }
  10.     elseif (empty($u3)){
  11.         $month = str_replace(‘_’, ‘-’, $u2);
  12.         if (preg_match(‘/\d+-\d+/’, $month)) {
  13.             $out[‘month’] = $month;
  14.             $out[’s’] = ‘default’;
  15.         }
  16.         else {
  17.             $is_404 = 1;
  18.         }
  19.     }else {
  20.         $rs = lookupByIDSection($u2, $u1);
  21.         $out[’s’] = @$rs[‘Section’];
  22.         $out[‘id’] = @$rs[‘ID’];
  23.         $is_404 = (empty($out[’s’]) or empty($out[‘id’]));
  24.     }
  25. break;
# FIND
switch ($permlink_mode) {

# ADD NEXT LINE
case \'section_yearmonth_id_title\':
	if (empty($u2)) {
		$out[\'s\'] = (ckEx(\'section\',$u1)) ? $u1 : \'\';
		$is_404 = empty($out[\'s\']);
	}
	elseif (empty($u3)){
		$month = str_replace(\'_\', \'-\', $u2);
		if (preg_match(\'/\\d+-\\d+/\', $month)) {
			$out[\'month\'] = $month;
			$out[\'s\'] = \'default\';
		}
		else {
			$is_404 = 1;
		}
	}else {
		$rs = lookupByIDSection($u2, $u1);
		$out[\'s\'] = @$rs[\'Section\'];
		$out[\'id\'] = @$rs[\'ID\'];
		$is_404 = (empty($out[\'s\']) or empty($out[\'id\']));
	}
break;

8 Responses to “Textpattern 固定網址”

  1. JellyCatz果凍喵 Says:

    cc~ 是怎樣的原因使你想從WP轉到TP?

  2. Beata Says:

    恩..
    首先是在OpenSourceCMS上面的排名是blog類第一名讓我產生好奇心
    跑到測試blog的後台亂玩讓我驚豔
    而且可以掛外掛上去,再加上官方的外掛列表也不少
    這才真的下載txp下來玩

    之後對他的繁體中文語系感到無言
    (這..這是外行人翻的吧:滴汗:)

    前幾天翻譯了部份官方wiki上的txp tag說明文件
    天哪!模板功能莫名其妙的強大!
    什麼最新迴響最近文章外掛都不用了….
    直接可以在模板上用語法調出來

    可是目前我還在調整txp的部份功能中
    連佈景都還沒做.暫時不會丟上來啦!

  3. Di Says:

    我关注这个软件也很久了,可惜资料太少,希望你动作快点啊:)

  4. Beata Says:

    阿哈哈!
    想不到也有人注意到TXP:雙心:
    TXP真是一個很優秀的BLOG軟體
    唯一的致命傷大概就是不內建Trackback功能

    這幾天我也正在研究當中:)
    沒事時我們可以切磋切磋:OK:

  5. CGS Says:

    我以前也用過 TextPattern ,理由跟你一樣 ,不過 TrackBack 難解 ,所以後來改用 NucleusCMS .

  6. JellyCatz果凍喵 Says:

    Trackback的功能其實很簡單~ 遠端利用post資料過來後Server端回傳HTTP header 200成功訊息即可~ 簡單的來說就是另外一種類似留言的方式~ 不過自己並不是PHP程式設計師(主修JAVA)~ :)給你一個思考方向就是了~ then~ Textpattern之前就有試用過~ 那是個好東西~ 說不定哪天會和你一樣轉過去吧(就像之前玩MT玩透後跑來玩WP般:P) & http://aroussi.com/article/12/trackback-wtextpattern 這邊好像有TP的Trackback的解決方式~ 這就留給懶喵喵研究了 :) [不然Google上也可以找到相關訊息]

  7. Beata Says:

    多謝你的資訊:拍手:
    本來還在煩惱必須做diff動作的
    官方trackback外掛必須要把某個檔案覆蓋上主程式..

    這個好連結我就收下啦~

  8. dimlau Says:

    来的好像有点晚了
    但是。。
    您能告诉我么:
    如果我要实现year/month/title
    这样的形式,那么最后一步应该怎么操作?

Leave a Comment