We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 23276
    • 85 Posts
    編集履歴
    2007-05-07T18:40:49+09:00 application/xhtml+xml対応プラグインが思いっきり間違えていたので修正&スリム化しました。


    こんにちは。
    MODxで「できるといいなあ」と思ったことを、練習としてプラグインとスニペットにしてみました。
    既にたくさんのプラグイン・スニペットがある中で、たいしたものではないのでかなり気が引けるのですが、せっかくなので投稿してみます。
    まだ、MODxをいじり初めて間もない&PHPも不慣れなので変なことをしていたらすみません…ご指導いただければと思います。

    【1】年数表示スニペット
    ある日からある日までの年数を表示します。年齢表示や「○○歴: ○○年」とかを毎年、自動表示したくて作ってみました。

    使い方
    1.「スニペット」からスニペット名「PhiYear」で「新規作成」
    2.ページの内容等の表示したい位置に書式に従って記述

    書式
    [[PhiYear?begin=`日付`]]
    [[PhiYear?end=`日付`]]
    [[PhiYear?begin=`日付`&end=`日付`]]

    ※begin, endはどちらも省略可能。省略した場合は現在の日付が使われます。
    ※日付の書式は「/」「-」「.」のいずれかで区切られたもので、年は4桁、月日は1桁か2桁で指定。

     yyyy/mm/dd
     yyyy.mm.dd
     yyyy-mm-dd
     yyyy-mm.dd 等

    $pattern = '/^(\d{4})[-\/\.](\d{1,2})[-\/\.](\d{1,2})$/';
    $now = date('Y-m-d');
    
    $begin = preg_match($pattern, $begin, $matches) && checkdate($matches[2], $matches[3], $matches[1]) ? $begin : $now;
    $end = preg_match($pattern, $end, $matches) && checkdate($matches[2], $matches[3], $matches[1]) ? $end : $now;
    
    list($by, $bm, $bd) = explode('-', preg_replace("/[\.\/]/","-", $begin));
    list($ey, $em, $ed) = explode('-', preg_replace("/[\.\/]/","-", $end));
    
    $PhiYear = $ey - $by;
    if ($em * 100 + $ed < $bm * 100 + $bd) $PhiYear --;
    
    return $PhiYear;
    



    【2】 application/xhtml+xml対応プラグイン

    [PLUGIN] application/xhtml+xml 1.1
    http://www.modxcms.com/PLUGIN-applicationxhtmlxml-1.1-1252.html

    を参考にさせていただきました。Content-Type「application/xhtml+xml」に未対応のUAには「text/html」として出力するプラグインです。
    OperaやAnother HTML-lintにも対応したコードに変更してみました。コード自体はよく色々なブログ等で紹介されているものです。

    使い方
    1.新規プラグインにコードを入力後、「OnWebPagePrerende」イベントをチェックして保存
    2.「サイト設定」の「カスタムコンテントタイプ」に「application/xhtml+xml」を追加
    3.ページの設定で「コンテントタイプ」に「application/xhtml+xml」を選択

    if ($modx->documentObject['contentType'] == 'application/xhtml+xml') {
        $accept = $_SERVER['HTTP_ACCEPT'];
        $ua = $_SERVER['HTTP_USER_AGENT'];
        $charset = $modx->config['modx_charset'];
    
        $supported = eregi('Opera', $ua) || eregi('Another_HTML-lint', $ua) || eregi('application/xhtml\+xml', $accept);
    
        if ($supported ) {
          header ('Content-type: application/xhtml+xml; charset={$charset}');
        } else {
          header ('Content-Type: text/html; charset={$charset}');
        }
    }