フレンドリーURL改良
このページでは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) {
更新履歴
- 20060708 makeFriendlyUrlで相対パスになる不具合解消
