mt_allow_comment の値を確認 2018-12-16 (日) 00:51:38+09:00

ソフトウェア

Open Live Writer を用いて metaWeblog::newPost, metaWeblog::editPost で投稿して、 mt_allow_comment に何が送られてくるか確かめた。

None を選んで投稿したとき:

<member>
   <name>mt_allow_comments</name>
   <value>
   <int>0</int>
   </value>
  </member>

が、送られてきた。

Open を選んで投稿したとき:

<member>
   <name>mt_allow_comments</name>
   <value>
   <int>1</int>
   </value>
  </member>

が、送られてきた。

Closed を選んで投稿したとき:

<member>
   <name>mt_allow_comments</name>
   <value>
   <int>2</int>
   </value>
  </member>

が、送られてきた。


64ビット関係のPHP7の日時を扱う関数、クラスが64ビットの unix time を何の問題もなく処理できるか、ふと気になったのでこちらを参考に、試してみた。

(1) strtotime は32ビットを超える日時は、入力される年が4桁までなら正しく unix time を出力できるが、5桁以上は正しく出力できない。

(例)
var_dump(strtotime('9999-12-23'));
(結果)int 253401490800
var_dump(strtotime('12345-12-23'));
(結果)int 1135308840

(2) strftime は32ビットを超える unix time は、結果の年が4桁までなら正しく変換できるが、5桁以上は変換できない。

(例)
print strftime("%Y-%m-%d %w %H:%M:%S", 253401490800);
(結果)9999-12-23 4 00:00:00
print strftime("%Y-%m-%d %w %H:%M:%S", 2534014908000);
(結果)

(3) date は、32 ビットを超える unix time を正しく日時に変換できる。

(例)
print date("Y-m-d H:i:s", 2534014908000);
(結果)82269-09-26 15:00:00

(4) DateTime クラスは、32ビットを超える unix time を正しく日時に変換できるが、日時から unix time への変換は年が5桁以上になる場合は正しく変換できない。

(例)
$d = new DateTime();
$d->setTimestamp(2534014908000);
echo $d->format('Y-m-d\TH:i:s u v');
(結果)82269-09-26T15:00:00 000000 000
$d = new DateTime('12345-12-23');
print $d->getTimestamp();
(結果)1135308840

上のような結果になった。

とりあえず、西暦9999年までは、どの関数、クラスを使っても問題ないようだが、年が5桁以上になると正常動作しないものがちらほらあるので、すっきりとはしない。PHP7より前の Windows のPHPでは、 int のサイズはプラットフォームに依らず32ビット固定だったが、PHP7でせっかく64ビットにも対応したのだから、標準関数、クラスも完璧に動作するようにコードを書いて欲しかった。


オリジナルの rNote では、記事表示部分の上に表示されるナビゲーション部分、

>「」へのコーナーを表示中です。(全部で???件の投稿があります。)

の部分も、サブカテゴリのディレクトリ works/software を作り、カテゴリ名に「冬星のソフトウェア」と指定した場合に、

>「ホーム/works/ソフトウェア

のように表示されてしまう。

これを、

>「ホーム/works/冬星のソフトウェア」のコーナーを表示中です。(全部で???件の投稿があります。)

のように表示できるように修正した。

rnote.php の function Navi_ForthBack(&$fi,$opt) の中の、

    // Category name
    $d0 = explode("/",$dir);
    if(isset($category_name[''])) $cn=$category_name['']; else $cn='Home';
    $category = '<a href="'.MakeLinkUrl().'">'.$cn.'</a>';
    $dd = '';
    foreach($d0 as $a) if($a){
        $cn = $a; if(isset($category_name[$cn])) $cn=$category_name[$cn];
        $dd .= $a.'/';
        $category .= '/<a href="'.MakeLinkUrl($dd).'">'.$cn.'</a>';
    }

の部分を、下のように修正する。

    // Category name
    $d0 = explode("/",$dir);
    if(isset($category_name[''])) $cn=$category_name['']; else $cn='Home';
    $category = '<a href="'.MakeLinkUrl().'">'.$cn.'</a>';
    $dd = '';
    $cd = '';
    foreach($d0 as $a) if($a){
        if ($cd == '') $cd = $a; else $cd .= '/' . $a;
        if(isset($category_name[$cd])) $cn=$category_name[$cd];
        $dd .= $a.'/';
        $category .= '/<a href="'.MakeLinkUrl($dd).'">'.$cn.'</a>';
    }

これで、希望するような形で表示されるようになる。

キーワード: rNote ナビゲーション


これまで、当サイトの記事の右上には、

>「[ソフトウェア]」

のように、記事のカテゴリーが表示されていた。

今回、

ソフトウェア

のように見た目を変更した。

変更点は:

style-sites.css


.key a, .category a {
    padding:3px;
    background-color: #f0f0f0;
    border: 1px solid #a0a0a0;
    text-decoration: none;
}

html_item.skin


<div class="category">
<a href="<%=$site_base%>rnote.php?u=<%=$Category_Dir%>"><%=$Category%></a>
</div>

この変更で、外見に関してはOK。(置換命令 Category_Dir はサブカテゴリのカテゴリキーを表示させるためにrnote.php にコードを追加する。詳細は後述。)

続けて、サブカテゴリの場合の表示の修正を行う。

例えば、 works/software/ というディレクトリを掘り、 works/software/ のカテゴリ名を「冬星のソフトウェア」とするために、 rnote_config.php に、

>$category_name['works/software'] = '冬星のソフトウェア';

と書いても、オリジナルの rNote では、カテゴリ名に、「works/software/」としか表示されない。これを、「冬星のソフトウェア」と表示されるように変更を加える。

// ITEM用スキン処理・本体
function GetContentsEach($fname,$skin,$bSingle) の中の、

    while($tagstr=SkinTagChk('Category',$a,$opt)){
        $dd = explode("/",$dir);
        $cn = '';
        if(sizeof($dd)>1){
            foreach($dd as $dd) if($dd){
                if(isset($category_name[$dd])) $dd=$category_name[$dd];
                $cn .= '/'.$dd;//カテゴリ名がなければカテゴリキーを使用する。
            }
        }else{
            if(isset($category_name[''])) $cn=$category_name['']; else $cn='Home';
        }
        $a=str_replace($tagstr,preg_replace('/^\//','',$cn),$a);
    }

の部分を、下のように変更する。

    while($tagstr=SkinTagChk('Category',$a,$opt)){
        $cn = '';
        $cd = preg_replace('/^\//','',$dir);
        $cd = preg_replace('/\/$/','',$cd);
        if(isset($category_name[$cd])) {
            $cn=$category_name[$cd];
        } else {
            $cn=$dir;//カテゴリ名がなければカテゴリキーを使用する。
        }
        $a=str_replace($tagstr,preg_replace('/^\//','',$cn),$a);
    }

また、 SkinTagChk(‘Category’,$a,$opt) の while ループの直前に、下を追加する。

    while($tagstr=SkinTagChk('Category_Dir',$a,$opt)){
        $cn = '';
        if(isset($category_name[$dir])) {
            $cn=$category_name[$dir];
        } else {
            $cn=$dir;//カテゴリ名がなければカテゴリキーを使用する。
        }
        $a=str_replace($tagstr,$cn,$a);
    }

これで、サブカテゴリ works/software/ が「冬星のソフトウェア」と表示され、リンクも貼られるようになる。

[コメントの受付は終了しています ]
この記事のリンク元 | 14 |

キーワード: rNote カテゴリー


これまでは、当サイトの記事の下部には、

>「この記事に属するキー: [rNote] [XML-RPC]」

のように、その記事に設定されたキーワードの一覧を表示していた。

今回、

>「キーワード: rNote XML-RPC

のように見た目を変更した。

変更点は:

style-sites.css

.key a, .category a {
    padding:3px;
    background-color: #f0f0f0;
    border: 1px solid #a0a0a0;
    text-decoration: none;
}

html_item.skin

<if def_tag="Keys">
< div class="keys">
< p style="text-align: right">キーワード:
<?php
  $string = '<%=$Keys%>';
  $tkn = strtok($string,",");
  while ($tkn !== false) {
    echo " <span class=\"key\"><a href=\"<%=$site_base%>rnote.php?m=search&cache=off&q=$tkn&u=&cmt=1&and=1\">$tkn</a></span>";
    $tkn = strtok(",");
  }
?>
</div>
</if>

キーワード: rNote キーワード keys