こちらを参考に、こんな風にスタイルシートでできました。
.key a, .category a {
padding: 3px;
background-color: #f0f0f0;
border: 1px solid #a0a0a0;
text-decoration: none;
border-radius: 5px;
}
css3 から、こんな機能があったのね。
キーワード: rNote css border-radius 角丸め スタイルシート
こちらを参考に、こんな風にスタイルシートでできました。
.key a, .category a {
padding: 3px;
background-color: #f0f0f0;
border: 1px solid #a0a0a0;
text-decoration: none;
border-radius: 5px;
}
css3 から、こんな機能があったのね。
キーワード: rNote css border-radius 角丸め スタイルシート
「銀杏の木」の左側に、タグクラウドを追加した。
任意で記事に設定する Keys タグのキーワードが何個設定されているかをカウントして表示し、リンクをクリックするとその言葉で検索する形にしてみた。 Keys タグに出てきた数なので、実際の記事中に出現する回数ではない。
この追加のために、 rnote.php 本体と、プラグインの navitools.php, スキンファイルの html.side.skin に変更を加え、 file.cache に書き込まれるエントリに、 Keys タグの内容も追加するようにして実現させた。
navitools.php のプラグインには、新たに、 “tag_cloud” を追加し、
<%=$plugin name="navitools" func="tag_cloud" opt="min_count=3,max_size=200" %>
のような形で呼び出せるようにした。追加した tag_cloud は下の通り。
//==========================================================================
// タグクラウド Added by Crabfish
//==========================================================================
function tag_cloud($opt)
{
global $g_keyslist; // キーごとの設定回数情報
//echo 'opt=['.$opt.']<br />';
//opt に設定されている値を取得する。
$min_count = 1;
$max_size = 200;
if (isset($opt)) {
$tok = strtok($opt, ",");
while ($tok) {
list($lvalue, $rvalue) = explode("=", $tok, 2);
//echo 'lvalue=['.$lvalue.'] rvalue=['.$rvalue.']<br />';
switch ($lvalue) {
case 'min_count':
$min_count = intval($rvalue);
if ($min_count < 1) $min_count = 1;
break;
case 'max_size':
$max_size = intval($rvalue);
if ($max_size < 100) $max_size = 100;
break;
}
$tok = strtok(",");
}
}
//echo 'min_count=['.$min_count.']<br />';
//echo 'max_size=['.$max_size.']<br />';
$min = 65536;
$max = 0;
//キーの出現回数の最大値、最小値を取得する。
foreach ($g_keyslist as $k => $v) {
if ($max < $v) $max = $v;
if ($min > $v) $min = $v;
}
$dif = (($max - $min) > 0) ? ($max - $min) : 1;
$i = 0;
$rep = '';
foreach ($g_keyslist as $k => $v) {
if ($v >= $min_count) {
$rep .= '<span class="key"><a style="font-size: '.(($v-$min)/$dif*100+($max_size-100)).'%; line-height: 150%; white-space: nowrap;" href="/ichounoki/rnote/';
$rep .= MakeLinkUrl().'?m=search&cache=off&q='.$k.'&u=&cmt=1∧=1';
$rep .= '">'. $k . '</a></span> ';
}
$i++;
}
return $rep;
}
//==========================================================================
// タグクラウド Added by Crabfish
//==========================================================================
function tag_cloud($opt)
{
global $g_keyslist; // キーごとの設定回数情報
//echo 'opt=['.$opt.']<br />';
//opt に設定されている値を取得する。
$min_count = 1;
$max_size = 200;
if (isset($opt)) {
$tok = strtok($opt, ",");
while ($tok) {
list($lvalue, $rvalue) = explode("=", $tok, 2);
//echo 'lvalue=['.$lvalue.'] rvalue=['.$rvalue.']<br />';
switch ($lvalue) {
case 'min_count':
$min_count = intval($rvalue);
if ($min_count < 1) $min_count = 1;
break;
case 'max_size':
$max_size = intval($rvalue);
if ($max_size < 100) $max_size = 100;
break;
}
$tok = strtok(",");
}
}
//echo 'min_count=['.$min_count.']<br />';
//echo 'max_size=['.$max_size.']<br />';
$min = 65536;
$max = 0;
//キーの出現回数の最大値、最小値を取得する。
foreach ($g_keyslist as $k => $v) {
if ($max < $v) $max = $v;
if ($min > $v) $min = $v;
}
$dif = (($max - $min) > 0) ? ($max - $min) : 1;
$i = 0;
$rep = '';
foreach ($g_keyslist as $k => $v) {
if ($v >= $min_count) {
$rep .= '<span class="key"><a style="font-size: '.(($v-$min)/$dif*100+($max_size-100)).'%; line-height: 150%; white-space: nowrap;" href="';
$rep .= MakeLinkUrl().'?m=search&cache=off&q='.$k.'&u=&cmt=1∧=1';
$rep .= '">'. $k . '</a></span> ';
}
$i++;
}
return $rep;
}
min_count は、タグクラウドに表示させる最小出現回数。これ未満の回数のものは表示しない。
max_size は、タグクラウドを表示する際に、タグの出現回数に応じてフォントサイズを変えるようにしたので、その際の最大表示パーセント値。最小サイズは100%固定にした。
タグクラウドは一時期のように流行ってはいないが、実装作業は楽しかった。
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/冬星のソフトウェア」のコーナーを表示中です。(全部で???件の投稿があります。)
のように表示できるように修正した。
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>';
}
これで、希望するような形で表示されるようになる。