Tags : P_BLOG
このTagsの登録数:4件 表示 : 1 - 4 / 4
P_BLOGのカレンダーを高速化
P_BLOG ver 1.0.4
16カ月ぶりに置き換え。カテゴリーの呼称を Tags にしてみたり、その他細々といじる。サイドメニューの「注目エントリ」はベタ書き(死。これのために過去ログをざっと見てみたんだけど、たいしたこと書いてないな。2年で100個じゃ週刊ペースだし。
大きな改造としては、記事に付いてるカテゴリーリンクを分解した。include/fnc_logs.inc.php の 240行目付近。
// Category
$category = '';
$cat_array = explode(',', $row['category']);
foreach($cat_array as $one_cat){
$one_cat = trim($one_cat, ' ');
$category .= '<a href="'.$cd.'/category.php?k='
.urlencode($one_cat).'" rel="tag">'.$one_cat.'</a>, ';
}
$category = trim($category, ', ');
//オリジナルのコード
//$category_title = $lang['cat_title_1'] . $row['category'] . $lang['cat_title_2'];
//$category = '<a href="'.$cd.'/category.php?k='.urlencode($row['category'])
//.'" title="'.$category_title.'">'.$row['category'].'</a>';
追記:
トラックバックいただいた Future is Now さんの P_BLOGのカテゴリーって にも書かれているように、カテゴリーの数によって大きさが変わるリストが欲しいとこです。というわけで作ってみた。include/fnc_base.inc.php の1087行目付近をハックする。
} elseif ($category_style == 2) { // List Style
$ul_start='<ul>'; $ul_end='</ul>';
if ($cat_num == 'yes') {
if(/*some_setting &&*/ count($cat_name_array)>=8){
$ul_start='<div class="escalation_tag" style="padding:6px;">'; $ul_end='</div>';
$tag_a=100; $tag_b=10; $tag_c=2; $tag_d=0;
//calc
$i=0;
$s_array=array_values($cat_name_array);
rsort($s_array, SORT_NUMERIC);
$tag_a=$s_array[1];
$tag_b=$s_array[3];
$tag_c=$s_array[7];
foreach ($cat_name_array as $str => $num) {
$span_prop='class="escalation_tag_d" style="font-size:100%;"';
if($num<=1){
//do nothing
}else if($num >= $tag_a){
$span_prop = 'class="escalation_tag_a" style="font-size:170%;"';
}else if($num >= $tag_b){
$span_prop = 'class="escalation_tag_b" style="font-size:136%;"';
}else if($num >= $tag_c){
$span_prop = 'class="escalation_tag_c" style="font-size:120%;"';
}
$category_list .= '<span '.$span_prop.'><a href="./category.php?k='
. rawurlencode($str) . '" title="'.htmlspecialchars($str).'('
. $num . ')">' .htmlspecialchars($str)."</a></span> ";
}
}else{
foreach ($cat_name_array as $str => $num) {
$category_list .= '<li><a href="./category.php?k='
. rawurlencode($str) . '">' .htmlspecialchars($str). ' ('
. $num . ")</a></li>\n";
}
}
} else {
foreach ($cat_name_array as $str) {
$category_list .= '<li><a href="./category.php?k=' . rawurlencode($str) .
'">' .htmlspecialchars($str). "</a></li>\n";
}
}
//////////////// Presentation! /////////////////
$category_menu =<<<EOD<div class="menu">
<h2>{$lang['category']}</h2>
{$ul_start}{$category_list}{$ul_end}
</div>
EOD;
}
カテゴリーの数によって class 分けをしている。CSS まで手が回らなかったので簡易の style 属性でごまかしている。ロジックはいい加減。いちばん大きいものが2個、次が2個、その次が4個、あとは残り、と大ざっぱに決め打っている。array_values() でログの数を抽出→ rsort() でソート→ n番目の項目を基準値にする、という手順。
P_BLOG 改造
category.php へのリンクを短く改造してみた。思いきり短く「category.php?カテゴリ名」だ。左のメニューは既にそうなっている。具体的には category.php にて $_GET を isset() で調べる直前に
if(count($_GET)==1){
foreach($_GET as $_key => $_val){
if($_val=='' && $_key!=''){
$_GET['k']=$_key;
$_GET['d']='';
$_GET['p']='0';
$_GET['pn']='1';
$_GET['c']='1';
}
}
}
と追加。「category.php?xxxx」なクエリーだったら旧形式のクエリーと同じ値を入れてしまう。アンテナサイトの更新時刻付きリンクとコンフリクトするけれど、これを登録しているアンテナはいくらなんでもないだろう。
P_BLOG ver 1.0b20
ついにP_BLOGをアップデート。設置してからはじめてのアップデート。格段に管理がしやすくなっている。すげー。
重箱の隅をつつかせてください、ごめんなさい。GETで空クエリーの省略ができないのが気になる。ソースコードを見るとisset()で全部揃っているかのチェックが入って1個でも不足しているとはじかれる。例えばクエリー「k」が不要な場合も「search.php?p=xxx」とは書けなくて「search.php?k=&p=xxx」としないとエラーになる。この辺のURLは自動生成される箇所なので、気持ちの問題だろうけれど、category.phpはクエリー「k」だけで表示できるようにした方が気持ちがいいな。
7月に入って一度もXcodeを立ち上げてない。少なくともあと一週間くらいはまともにプログラムできる環境ではない。ので、どういうかたちであれ7月中旬にどうにかする目標は無理でした。夏休みの宿題にします。
P_BLOGのカレンダー出力プラグインを高速化します。詳細はソースを見ていただくとして、オリジナルのコードは月の日数と同じ回数mysql_query()を実行していて、最低でも28回の問い合わせが発生します。これを1回で済ませるように改善。なんと10倍〜15倍高速化することができました(当社比)。ここだけ速くなってもページ全体への影響は微々たるもので体感できるほどではありませんが、サーバ負荷は軽減するはずなので、すべてのP_BLOGユーザーにお奨めします。
使用するには include/user_include/plugins/plg_calendar.inc.php を同梱のファイルと入れ替えてください。
→ダウンロード P_BLOG_calendar_plugin_mod.zip