PETIT POWER w/ZeRo

 
  • Home
  • Archives
  • Download
  • About
  • Contact

2008年 3月 16(日曜日)

MODx Folderアクセス時に/を付ける小技

ということで、SEOに適したUrlを吐き出してくれるプラグイン「SEO Strict URLs」(詳細は、こちら を参照)があるんですが、現在作業中のサイトが旧URLから新URL(ホスト変わるので)に変わるので、軽めな対応で済ませたいという思いでプラグインを利用せずにコアをちょっぴり修正してフォルダの場合のURLをそれっぽいURLで吐き出すようにしてみました。

例えば、下記のようなドキュメント構造になっていた場合

/FolderA

|--- DocumentA1

|--- DocumentA2

/DocumentB

 

サフィックスが.htmlと付いていた場合に、

FolderAへのアクセス時には、FolderA.htmlに

DocumentA1へのアクセス時には、FolderA/DocumentA1.html とMODxがAliasを作ってくれます。

サフィックスがない場合は、前者がFolderA、後者がFolderA/DocumentA1となります。

で、FolderAへのアクセス時は、FolderA/と後ろに/を付けた形式でURLを吐き出しもらうようにしたいわけです。
サフィックスがある場合だとFolderAとFolderA.htmlとこの時点でちょっとなぁってことなので、SEO Urlsではサフィックスの有無に関係なくFolderAにはFolderA/でアクセスでき

ということで、SEO Strict Urlsプラグインの基本的なURL生成部分をコア修正で補うパッチになります。
但し、条件としてサフィックスなしでユーザがリーフ(末端のドキュメントである)を認識して自分でエイリアス名に拡張子を含めたものを設定する必要があります、もちろん、フォルダとしての扱いの場合は拡張子は付けちゃなりません。
というのは、コアの修正に際してはこの拡張子(というかピリオド)があるかないかで、/を付けるか付けないかを決めているわけです。
サフィックス付きだと、もうちょっと面倒なことをしなければならないので・・・そこまでするならSEO strict Urlsプラグインを使った方がよいのです。

もちろん、URL生成部分に修正を加えるだけなので、FolderAでアクセスされた場合にFolderA/にリダイレクトしてくれることはしません。

なので、すでに構築済みの場合はSEO Strict Urlsプラグインを導入することをオススメします。
もちろん、過去のことは忘れて心機一転という方はコア修正で済ませてもOKです。

対象ファイルは、document.parser.class.inc.phpです。(ちなみに、バージョンは0.9.6.2p2)

修正するべき関数を丸ごと以下に記載するので、入れ替えればOKです。

 

1.makeFriendlyURL関数

    function makeFriendlyURL($pre, $suff, $alias) {
        $dir= dirname($alias);
        $balias = basename($alias);
        if (!strpos($balias,"."))
        {	$balias .= "/";
        }
        return ($dir != '.' ? "$dir/" : "") . $pre .$balias . $suff;
    }

2.makeUrl関数

    function makeUrl($id, $alias= '', $args= '', $scheme= '') {
        $url= '';
        $virtualDir= '';
        if (!is_numeric($id)) {
            $this->messageQuit('`' . $id . '` is not numeric and may not be passed to makeUrl()');
        }
        if ($args != '' && $this->config['friendly_urls'] == 1) {
            // add ? to $args if missing
            $c= substr($args, 0, 1);
            if (strpos($this->config['friendly_url_prefix'], '?') === false) {
                if ($c == '&')
                    $args= '?' . substr($args, 1);
                elseif ($c != '?') $args= '?' . $args;
            } else {
                if ($c == '?')
                    $args= '&' . substr($args, 1);
                elseif ($c != '&') $args= '&' . $args;
            }
        }
        elseif ($args != '') {
            // add & to $args if missing
            $c= substr($args, 0, 1);
            if ($c == '?')
                $args= '&' . substr($args, 1);
            elseif ($c != '&') $args= '&' . $args;
        }
        if ($this->config['friendly_urls'] == 1 && $alias != '') {
            $url= $this->config['friendly_url_prefix'] . $alias . $this->config['friendly_url_suffix'] . $args;
        }
        elseif ($this->config['friendly_urls'] == 1 && $alias == '') {
            $alias= $id;
            if ($this->config['friendly_alias_urls'] == 1) {
                $al= $this->aliasListing[$id];
                $alPath= !empty ($al['path']) ? $al['path'] . '/' : '';
                if ($al && $al['alias'])
                    $alias= $al['alias'];
            }
            if (!strpos($alias,"."))
            {	$alias .= "/";
            }
            $alias= $alPath . $this->config['friendly_url_prefix'] . $alias . $this->config['friendly_url_suffix'];
            $url= $alias . $args;
        } else {
            $url= 'index.php?id=' . $id . $args;
        }

        $host= $this->config['base_url'];
        // check if scheme argument has been set
        if ($scheme != '') {
            // for backward compatibility - check if the desired scheme is different than the current scheme
            if (is_numeric($scheme) && $scheme != $_SERVER['HTTPS']) {
                $scheme= ($_SERVER['HTTPS'] ? 'http' : 'https');
            }

            // to-do: check to make sure that $site_url incudes the url :port (e.g. :8080)
            $host= $scheme == 'full' ? $this->config['site_url'] : $scheme . '://' . $_SERVER['HTTP_HOST'] . $this->config['base_url'];
        }

        if ($this->config['xhtml_urls']) {
        	return preg_replace("/&(?!amp;)/","&", $host . $virtualDir . $url);
        } else {
        	return $host . $virtualDir . $url;
        }
    }
投稿者 ZeRo in MODx at 22:18 | コメント (0) | トラックバック (0)
このエントリに定義されたタグ: MODx
タグに関連するエントリ一覧:
MODx SendPingはバージョンアップするべきか?
アレレ、、、これからじゃないの MODxってば??
Simplepieがバージョンアップしています!
MODx CMS Awards 2007で受賞!!
MODx PackPubの最終選考に!!

コメント
コメント表示形式 (一覧 | スレッド)

コメントがありません

コメント追加

BB コード 書式を許可します。
標準的な感情表現、 :-) や ;-) といったものは画像に変換します。
スマイル
         
電子メールアドレスは表示せず、電子メールの通知にのみ使用します。

ロボットからの自動的なコメントスパムを防ぐために、画像の下の入力ボックスに適切な文字列を入力してください。文字列が一致する場合のみ、コメントが送信されるでしょう。ブラウザーが Cookie をサポートし、受け入れることを確認してください。さもなければ、コメントを正確に確認することができません。
CAPTCHA

 
 

[PR]

カレンダー

戻る 10月 '08 転送
月 火 水 木 金 土 日
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

カテゴリ

  • iPod (2)
  • MODx (29)
  • Nucleus (23)
  • PHP (19)
  • Ruby (1)
  • Serendipity (16)
  • WordPress (1)
  • ざれごと (93)
  • スクリプト&ソフト (6)
  • 健忘録 (4)
  • 本 (7)
すべてのカテゴリ

クイックサーチ

タグ

お風呂掃除 ちいたん アクセス解析 アフィリエイト カビ スニペット テンプレート バイオ フレームワーク ミニブログ メールサーバ モップ リニューアル 加速成功 奇怪 小技 広告 本 玄箱 藤原伊織 道幸 武久 電話機 風呂掃除 ajax checkpad CI Courier-MTA dave.tv eForm extJS feedburner Firefly framework frog google GPARTED-LiveCD Insights Search iPhone iPod touch iTunesサーバ kohana Linkstation mce mixi ML300 modx moony np_metaex NP_NewsfeedEX NP_RelatedEX np_simplepie Nucleus OpenX PHP phpmixi phpTrafficA pieX qmail rhaco s9y sendping Serendipity shorewall simplepie toaster TrackBack Twitter Ubuntu USB-HDD vista wii Wii Fit Windows Live Writer Wordpress xajax xfy Blog Editor XREA ZendFramework Zend_Cache

コメント

コメント: ZeRo
iPod Touch サーマルコントロールケース
2008/10/11 15:16
あら、えー と つけた ときは確か 保護シート は外しまし た。 確か 、少しの厚 みでもちゃ んと収まら なかった気 がします。 す [...]


コメント: Kaz
iPod Touch サーマルコントロールケース
2008/10/09 21:51
購入しまし た。今まで 使用してい た保護フィ ルムを貼っ たままでケ ースを装着 してしまい 、表示面に ニュートン リングが・ ・・ [...]


コメント: ZeRo
pieX Ver0.7リリース
2008/10/05 21:51
トラックバ ック先の情 報もチェッ クしてね・ ・・修正版 は後日アッ プします、 説明書もち ょっと改版 ですね(^ ^; shin tata [...]


コメント: shintata.com
pieX Ver0.7リリース
2008/10/05 21:25
全体のRSS を修正した ので、せっ かくだから 「最近の記 事」という のを表示さ せたい。 まとめたRS Sを取り込 んで表示さ せれば [...]


コメント: ZeRo
LinuxWorld Expo2008 にいってきたです
2008/06/02 22:30
さすがに、 全部動かし ているわけ じゃないで すよ。 実 際に触った ことがある ものもあり ますが、大 抵はデモサ イトとかを 見た [...]


リンク集

  • オープンソース
    • CMS/BLOG
      • MODxCMS
        • Let's enjoy MODx
        • MODxCMS
        • Phize on the Web
        • あ~ゆ~どりま~
        • ケイムズカンパニー
      • Nucleus CMS JAPAN
      • Serendipity
    • FRAMEWORK
      • CodeIgniter
        • CodeIgniter 本家
        • CodeIgniterユーザガイド日本語版
        • Rapyd Framework
      • Kohana
        • Kohana本家
      • ZendFramework
    • ライブラリ
      • SimplePie
    • Zen Cart日本公式サイト
  • サービス
    • Value-Domain
  • スクリプト
    • 206
    • ネットサーフレスキュー「Web裏技」
  • メールサーバ
    • Courier-mta日本
    • 日本Courierユーザ会
  • Nucleusなブログ
  • SHOP@PETITPOWER
  • ZeRo∞Log

インフォメーション

WORLDRANKING BELLSEARCH

 RSSリーダーで購読する

Copyright 2005 - 2008 PETITPOWER  | Powered by Serendipity