最近の更新

関連


その他いろいろ

多機能フィードリーダSynapse製作中

2月までは目が回るほど忙しい

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

フレンドリーURL改良

フレンドリーURLのエイリアスパス関連の改良など
初出:2007年03/31 更新:2007年04/18

この文書のキーワード: PHP, MODx

このページではMODxの標準のフレンドリーURL、エイリアスパスの挙動を変更するいくつかの改良法を紹介します。0.9.2.1で確認し、0.9.5では動きません

MODx標準の挙動

フレンドリーURL

これはindex.php?q=pageというパスの代わりに、/page.htmlのような静的にみえるURL等でアクセス/書き出すオプションで、管理画面の「管理→MODx設定」の「フレンドリーURL」タブで設定します。

エイリアスパス

通常の階層化したウェブサイトのように、たとえばarticleというエイリアスをもつドキュメントの親がblogというエイリアスを持っているとすると、/blog/article.htmlでアクセス出来る機能です。

無効状態では、blogの子articleは http://?/blog/article.htmlでも、http://?/articleでも、http://?/xxxxxx/article.htmlでもとにかく最後のファイル名?部分がartiche(.html)で有りさえすればアクセス出来ます。
MODx内部では、IDからhttp://?/article.htmlのようなURLを生成します。

有効状態では、上の例で言うとhttp://?/blog/article(.html)でしかアクセスできません。
MODx内部では、IDからhttp://?/blog/article.htmlのようなURLを生成します。

改良

エイリアスパスOFFでもエイリアスパス対応URLを吐く

上に述べたように、無効状態では親ドキュメントを考慮しないURLが生成されますが、無効状態の様々なアクセス方法を維持したまま、わかりやすくするためにエイリアスパスのようなURLを内部では出力したい、という場合に用います。

変更するのは/manager/processors/cache_sync.processor.inc.phpです。 以下のdiffを適用してアップロードした後、管理画面のサイト→サイトのリフレッシュを実行します。(そうしないとキャッシュが生成されているページに変更が適用されません)

--- /manager/processors/cache_sync.class.processor.php_original	Tue Jun 20 03:38:00 2006
+++ /manager/processors/cache_sync.class.processor.php	Thu Jul 06 04:27:39 2006
@@ -94,8 +94,12 @@
 		$limit_tmp = mysql_num_rows($rs);
 		for ($i_tmp=0; $i_tmp<$limit_tmp; $i_tmp++) { 
 			$tmp1 = mysql_fetch_assoc($rs);
+			/* Mod for
+			 * write URLs in alias path (even when use_alias_path is off) ... it will work for two ways to access. e.g. /info/contact-us.html, /contact-us.html
+			 * 20060706 by uglydog(http://nanabit.net/)
+			 */
+			$tmpPath = $this->getParents($tmp1['parent']);
 			if ($config['friendly_urls'] == 1 && $config['use_alias_path'] == 1) {
-				$tmpPath = $this->getParents($tmp1['parent']);
 				$alias= (strlen($tmpPath) > 0 ? "$tmpPath/" : '').$tmp1['alias'];
 				$alias= mysql_escape_string($alias);
 				$tmpPHP .= '$d[\\''.$alias.'\\']'." = ".$tmp1['id'].";\\n";

子ドキュメントを持つドキュメントのURLを格好良く表示

上の例で言うblogドキュメントは、標準ではhttp://?/blog.htmlといったURLになりますが、ここは格好良くhttp://?/blog/にしたい場合があります。

変更するのは/manager/includes/document.parser.class.inc.php。以下のdiffを適用してアップロードした後、管理画面のサイト→サイトのリフレッシュを実行します。(そうしないとキャッシュが生成されているページに変更が適用されません)

--- /manager/includes/document.parser.class.inc_original.php	Tue Jun 20 02:14:00 2006
+++ /manager/includes/document.parser.class.inc.php	Sat Jul 08 09:30:30 2006
@@ -799,8 +799,19 @@
   }
 
   function makeFriendlyURL($pre,$suff,$alias) {
+	/* Mod for
+	 * write folder documents as /category/ instead of /category.html
+	 * 20060706 by uglydog(http://nanabit.net/)
+	 */
+	$tbl = $this->getFullTableName("site_content");
+	$sql = "SELECT isfolder FROM $tbl WHERE alias='".mysql_escape_string(basename($alias))."' LIMIT 1;";
+	$result = $this->dbQuery($sql);
+	$tmp = $this->fetchRow($result);
+	if($tmp && $tmp['isfolder'])
+		$suff = '/';
+
     $dir = dirname($alias);
-    return ($dir!='.' ? "$dir/":"").$pre.basename($alias).$suff;
+    return ($dir!='.' ? "/$dir/":"/").$pre.basename($alias).$suff;
   }
 
   function rewriteUrls($documentSource) {

更新履歴