Skip to content

Tag Archives: geeklog

さくらインターネットでの運用(22)話題の表示順序(を話題IDでコントロールする)

24-9 月-06

デフォルト?の話題の表示順序、
なんか、規則がわからんにゃん。。
$_CONF['sortmethod'] = ’sortnum’; (デフォルト)
こうなっていると、話題の「並べる順序」で定義した
若い番号順にならぶ。どこに並ぶかというと、
geeklogのデフォルトブロック「Topics」だ。
まあ、どこに並ぶかは良いんですが。。
なんでそう並ぶの…??
以下の3つの話題は、表示順序をいずれも同じにした(1にした)。
Final Decision I(起実)_3.創成
Final Decision I(起実)_1.宇宙(ソラ)
Final Decision I(起実)_2.サウンドメッセージ
なんでこう並ぶんだろう?
「sortnum」になってると話題名はまったく関係ないのかな。
じゃ、何順なんだろう?いじると順番が変わることもあるし。。
変更した日付順…?
規則性がつかめないと、なんとなく居心地が悪い(?笑)
というのも、やっぱり、テスターの性なんだろうな。と思う。笑。。
ちみなに、tidは、上から、
c01Final103
c01Final101
c01Final102
なのだ。
並べる順序で1,2,3…と振っていけばいいと思ったんですけど、
これの最大値が127なので、なんとなく、数字が足りなくなりそう?
とも思って。。ていうか、どこまで番号振ったか覚えられにゃい!爆
う~ん。あ、そうそう。
話題の最大数って決まっているんだろうか。。
それが127だとするとちょっと今の作り方では足りない気が
するなあ。。話題はいくつまで作れるんだろ。う~ん。
あ、まあ、それはとりあえずおいておいて。。
とりあえず、並び順です。
さて、ここでも、nmoxさんちの階層メニューが、おおいに
役だってくれました。。nmoxさんちの階層メニューを
使うと、話題IDの順番に並べることが出来るのを発見
したのです!(ちょっとハイ 笑)。
$sql = “SELECT tid,topic FROM “.$_TABLES['topics'].” ORDER BY sortnum ASC”;
ここのところの sortnum を tid にすればいいのだ。
えへへ。
やっばり、話題IDで順番をコントロール出来る方が、
自分としては扱いやすい(番号覚えてなくていいし 笑)。
話題IDは、ページ上には、現わさない部分なので(普通は)、
これを使って、いろいろやれるんんん。。

さくらインターネットでの運用(20)力業(?笑)3階層メニュー

22-9 月-06

nmoxさんの階層メニュー
こちらを複数個利用させて頂き、私の頭でやれる範囲で
3層メニューを表現してみました。
まず、どうしたいか。なのですが。
コンテンツメニューをこんな風にしたいです。
(大カテゴリ、子カテゴリなどは、便宜上、私が勝手に
呼ぶものです)
大カテゴリ1
 子カテゴリ1
   話題1
   話題2
 子カテゴリ2
   話題1
   話題2
大カテゴリ2
 子カテゴリ1
   話題1
   話題2
 子カテゴリ2
   話題1
   話題2
…略
自分のサイトに照らし合わせると
小説(大カテゴリ)
 Final Decision 起実(子カテゴリ)
   宇宙(話題)
   サウンドメッセージ(話題)
   創成(話題)
 笑いの間合い(話題)
 時空間奇縁伝(話題)
CG(大カテゴリ)
 ともくん日記(話題)
 メグメグ!(話題)
 ZENWARE(子カテゴリ)
   ZenLiner Tutorial(話題)
   ZenLiner Gallery(話題)
…こんな感じでしょうか。。
nmoxさんちの階層メニューは、lib-custom.phpに
追記する関数として提供されていますので、それを
大カテゴリの数分コピーします。
(うちは、大カテゴリが4つなので4個)。
そして、その4つのそれぞれの以下の部分に
4つを区別する文字列を追記します。
function phpblock_nmoxmenu(){
global $_CONF,$_TABLES;
$retval=”
<ul class='nmoxmenu'>";

function phpblock_nmoxmenuX(){
global $_CONF,$_TABLES;
$retval=”
<ul class='nmoxmenu mX'>";
function phpblock_nmoxmenuX(){
関数が区別出来ればなんでも良いと思いますが、
わかりやすいように、1~4を振りました(Xのとこ)。
<ul class='nmoxmenu mX'>";
こちらもなんでもいいのですが、m1~m4を振りました。
それから、話題IDの先頭3文字を、class名として
書き出すように、以下を追記。
…略
//指定カテゴリーが開いている状態のカテゴリー
$str = $rc["tid"]; // 追記
$strsub = substr($str, 0, 3); // 追記
$retval.=”
<li class='open ".$strsub."'> //”.$strsub.” を追記
…略
//指定カテゴリーが閉じている状態のカテゴリー
$str = $rc["tid"]; // 追記
$strsub = substr($str, 0, 3); // 追記
$retval.=”
<li class='close ".$strsub."'> //”.$strsub.” を追記
…略
//インデックスが存在しなければ、単発メニュー
$str = $rc["tid"]; // 追記
$strsub = substr($str, 0, 3); // 追記
$retval .= ”
<li class='only [...]

さくらインターネットでの運用(19)ポータルブロックをセンターブロックに表示する

22-9 月-06

geeklogは、ブロックコンテンツを静的固定ページに
読み込んで表示することが出来るので、やってみます。
http://wiki.geeklog.jp/index.php/StaticPagesBlock14
ポータルブロックで、自サイトのRSSを読み込み、
それを静的固定ページを使ってセンターブロックに
表示してみます。これで、記事の新着情報を
フロントページのセンターブロックに表示出来ます。
まず、静的固定ページでPHPを実行出来るようにする
必要があります。
1.グループで、staticpages admin を編集
   staticpages.PHP にチェックをつける
それから、ポータルブロックを作り、自サイトの
RDFを指定します。
これで、サイドブロックに自サイトの新着情報が
表示されました。
これをセンターブロックに表示します。詳細は、wikiに
ありますが、
echo DB_getItem( ‘**_blocks’, ‘content’,”bid = ‘**’”);
上記の一行を静的固定ページに書き込みます。
**_blocksは、geeklogのテーブル接頭辞です。
デフォルトならglのままだとおもいます。
bid =”**”は、ブロックID(たぶん)です。
geeklog上のどこかでわかるのかもしれませんが、
私はわからなかったので、mysqlで調べました。
 —*—*—*—*—*—
  ブロックIDについて:
  ブロックを編集する時の、URLの最後の数字が
  ブロックIDです。
  (今駒さん。ありがとうございました)。
 —*—*—*—*—*—
表示したいブロックIDを調べて「bid =”**”」に書きます。
・センターブロック表示 にチェックを入れ
・PHPを実行する を選びます。
保存して、おわり。
ブロックでは、title=””を使い、ツールチップで、日付を
表示するハックを教えて頂きましたが、センターブロックは、
幅に余裕があるので、日付の表示を少し変え、タイトルの
手前に表示するように変更してみました。
lib-common.php の function COM_rdfImport()
を変更します。
(変更後)
$dt = strtotime($feed->articles[$i]['date']);
$dt = date("Y.m.d", $dt);
$urls = htmlspecialchars($feed->articles[$i]['link'],ENT_QUOTES);
$content = $dt . '&#160;<a href="' . $urls . '">'
. $feed->articles[$i]['title'] . '</a>';

さくらインターネットでの運用(18)プロトタイプテンプレート

15-9 月-06

<table><!– 大囲い。 全体の幅が決まる –>
<tr>
<td>
<div>ここはheader</div>
<table><!– container 用 table –>
<tr>
<!– レフトブロック –>
<td>
<div このdivで幅を決める>レフトブロックの内容</div>
</td>
<!– レフトブロック end –>
<!– コンテンツブロック –>
<td>
<div このdivで幅を決める>センターブロックの内容。
記事とか静的固定ページとか</div>
</td>
<!– コンテンツブロック end –>
<!– ライトブロック –>
<td>
<div このdivで幅を決める>ライトブロックの内容</div>
</td>
<!– ライトブロック end –>
</tr>
</table><!– container end –>
<div>ここはfooter</div>
</td>
</tr>
</table>

さくらインターネットでの運用(17)右メニュー時の問題について

08-9 月-06

Geeklog Japanese 参照トピ
geeklogjapaneseではあまり推奨されてない方法のようなのだが、
右メニューを以下で実現したみた。
まず、
$_CONF['show_right_blocks'] = true;
こうすることで、常に、右ブロックが表示される
その後、ブロックを作っていく中で、左メニューとして
表示したいブロックは、「ホームページのみ」とします。
そうすると、思い通りのサイト構成になりました。
が、掲示板の表示で問題が起きました。詳しくは、
フォーラムに書きましたが、掲示板の個々のページを
表示する時だけ、構文エラーが出る。
Warning: Invalid argument supplied for foreach() in /home/xxx/xxx/system/lib-custom.php on line 374
で、色々調べているうちに、これは、
「$_CONF['show_right_blocks'] = false;」であっても、
掲示板の個々のページを表示する段階で、左に
ブロックがないと、起こるエラーでした。
(まあ、あまり、falseにして、掲示板を表示する時に
 左にブロックを置かない人はいないかも知れませんが。。
 一カラムになりますもんね。。)。
で。教えて頂いた。
lib-custom.php の374行目
foreach($showblocks as $block) {
 …
}
 ↓
if (!empty ($showblocs)) {
foreach($showblocks as $block) {
 …
}
}

さくらインターネットでの運用(16)リライトできません

06-9 月-06

$_CONF['url_rewrite'] = false; // false = off, true = on
これをtrueにして、URLを書き換えることが出来ません。
というか、正確には、書き換えることは出来る?のですが、
書き換わったURLをクリックすると、「No input file specified.」と
画面に表示されてしまうのです。
具体的に書きますと、例えば、記事の一覧を
表示した時に現れる「全文表示」のURLは、
http://www.liolion.info/gl1/article.php?story=test02
とかです。
で、config.phpでのリライト機能を使うと、URLが
http://www.liolion.info/gl1/article.php/est02
とかになります。
さくらインターネットの場合、ここまでは、出来ているの
ですが、いざ、http://www.liolion.info/gl1/article.php/est02
を叩くと、「No input file specified.」と言われてしまう。。
これはcgi版のphpに起こる現象らしい。

さくらインターネットでの運用(15)最新記事一覧プラグイン

04-9 月-06

What's New ブロックでは、新着記事などを表示するんですが、
どうも今ひとつなので、探してみると、良さげなプラグインが。。
Geeklog Japan のダウンロードページから、

http://www.geeklog.jp/filemgmt/index.php?page=3
最新記事リストブロック を頂いてきました。
これも、lib-custom.phpの追加して、ブロックで
呼び出すタイプのプラグインです。
ちょっといじったところを書いてみます。
$Length=13;
 ↓
$Length=48;
(タイトルが長いから 笑)。
それと、<ul>をつかって、リスト表示するようにしました。
//Get appropriate stories from DB
$sql = "SELECT sid, tid,title, date,
group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon from
{$_TABLES['stories']} WHERE title<>'' AND (draft_flag = 0) ORDER BY date DESC
LIMIT " . $numrows;
$result = DB_query($sql);
$nrows = DB_numRows($result);
//Display title of stories.
$i=0;
$retval='';
do
{
$A = DB_fetchArray($result);
$title=COM_truncate($A['title'],$Length,'…');
$TACCESS=SEC_hasTopicAccess($A['tid']);
$ACCESS=SEC_hasAccess($A['owner_id'], $A['group_id'] ,$A['perm_owner'] ,$A['perm_group']
,$A['perm_members'] ,$A['perm_anon']);
if ($ACCESS>0 AND $TACCESS>0)
{
$retval .= '<a href="' . $_CONF['site_url'] . '/article.php?story=' . $A['sid'].
'">' [...]

さくらインターネットでの運用(14)話題名の長さと表示順序

04-9 月-06

う。。
表示順序は、最大127らしい。
どこかで変更出来るのかも知らんが、とりあえず、
やめておこうかな。笑。。
それより、話題名の長さだ。
私は、日記でもわかるように(笑)タイトルが長い。笑
そんなわけで、話題名も長いです。でも、初期値では、
そんなに長く取れないらしい。長く書いたら、切れて
ひまった。。
どこを見るかというと、mysqlだ。
(geeklogの方でも、制限があるのかも知れないが、
わからない…というか見たくないというか 笑)。
mysqlにログインすると、テーブルがたくさん出来ている。
それらしいテーブル名を捜す。。
接頭辞_topicsというのがある。きっとこれにちがいない。笑
構造を表示すると、いくつかフィールドが出来ている。
とりあえず、それらしいのはtopicsだ。
フィールドタイプにvarchar(48)となっている。
これだ、これに違いない。これが制限をかけて
いるんだ。変更してみよう。
ということで、適当にマウスを動かすと、ツールチップが
現れるので、これを頼りに操作する。。「変更(筆?マーク)」
っていうのがあるぞ。きっとこれに違いない。笑。
クリックしてみる。
当たりだ。笑。。
うーとぉ。
じゃあ、長さを96にしてみよう。
保存。
そして、自分のgeeklogに戻り、話題名を長めに
入力してみる。。
やったね。笑。

さくらインターネットでの運用(13) RSS再び

03-9 月-06

さて。
前回、あんなに(笑)、格闘したRSSアグリゲータですが、
これは、複数のrss reedを混ぜ合わせて、日付順に
表示するプラグインです。いや、それはわかってたんですが。。
実は、geeklogには、標準でRSS取り込みの機能が
ついていることを初めて知った。(笑)
そう。プラグイン入れなくても、良かったの。笑。
ポータルブロックを作ればとても簡単にできてしまう。
じゃ、ポータルブロックを作ってみましょう。
管理者メニュー > ブロック > 新規作成
タイトルと、ブロック名を入れて、
タイプをポータルブロックにします。
ポータルブロックオプションとこに、取り込みたい
rssのURLを入力。何件取り込みたいかを入力して、
おしまい。
なぁんだ。簡単だぁ。笑。
そいでこれ、ノーマルブロックのオプションという
ところに、書き出される見たいなんですけど(それが、
表示されているというわけだ)これ、一定時間で書き
換わってる見たいですね。1時間くらいなのかな。。
よくわかっていない。笑。。
そして!ここでも、ツールチップで日付を表示!に
挑戦!しようと思ったのですが、今回は、自力で
解決出来ず。。
またまた、geeklog japanのフォーラムで教えて頂いた。
lib-common.phpの
COM_rdfImport( )の終わりの方。
$content = '<a href="' . $feed->articles[$i]['link'] . '" target="_blank">'
. $feed->articles[$i]['title'] . '</a>';

$dt = strtotime($feed->articles[$i]['date']);
$dt = date("Y/m/d H:i:s", $dt);
$content = '<a href="' . $feed->articles[$i]['link'] . '" title="' . $dt . '">'
. $feed->articles[$i]['title'] . '</a>';

さくらインターネットでの運用(11) RSSアグリゲータプラグイン

02-9 月-06

さて。このプラグインですが、今、ちょっと、
不具合も見つかっているようで、開発者さんが、
書き換えてらっしゃるみたいです。ですから、
アップデータがあがってから、導入した方が
きっとわかりやすいと思いますが、とりあえず、
こうすれば、良い感じですというのを書きます。
まず、以下から、プラグインをダウンロード。
http://www.geeklog.jp/filemgmt/index.php?id=80&comments=1
導入自体は簡単です。既存のファイルに、
内容を追加するだけです。利用方法はここに。
http://wiki.geeklog.jp/index.php/PluginrssAggregator14
でも、この通りやって動かなかったんですよね (笑)。
やりとりは、Geeklog Japanのフォーラムに書いて
あります。
http://www.geeklog.jp/forum/viewtopic.php?forum=6&showtopic=2017
●では、まず、lib-common.phpから。
1.どこでもいいと思うんですけど、とりあえず、最後の ?>の
  前に、add_to_lib-common.phpの内容を追加挿入。
2.function COM_rdfImport( $bid, $rdfurl, $maxheadlines = 0 )
  から始まる関数が、3324行目くらいにあれば、その
  一連をコメントアウト(無効化)します。そうしないと、
  文句を言われてしまいます(追加した分に同じ
  定義があるから)。
3.で。フォーラムでは、日付のソートがうまくいかず、
  以下を書き換えてもらったのですが、lib-custom.phpの
  方で、調整出来ることがわかったので、以下は、
  そのままです。
function COM_rdfSort( $a, $b)
{
if ($a['date'] == $b['date']) return 0;
return ($a['date'] > $b['date']) ? -1 : 1;
}
で。lib-common.phpは、おわり。
●次に、system > lib-custom.php。
1.add_to_lib-costom.php の内容をlib-costom.phpに
  追加挿入。
2.以下のurlに取り込みたい、rssを書きます。
$rdfs = array(array(’site’=>’Site1′,
‘url’=>’http://www.xxxx.xxx/index.xmlなど’),
array(’site’=>’Site2′,
‘url’=>’http://http://www.xxxx.xxx/index.xmlなど’));
3.var_dump($articles); を見つけたら、コメントアウトします。
4.以下の2行を書き換えます。
$feed->articles[$j]['site'] = $rdfs[$i]['site'];
$articles[] = $feed->articles[$j];

$feed->articles[$j]['site'] = $rdfs[$i]['site'];
//ISO8601でない日付文字列をISO8601にする
$strdate= $feed->articles[$j]['date'];
$l = strtotime($strdate);
if ($l != -1) {
$feed->articles[$j]['date'] = date(”Y-m-d\\TH:i:sO”,$l);
}
$articles[] = $feed->articles[$j];
(RSSアグリゲータプラグインのコメントを参照しました)
で、一応、書き換え終わり。
アップロードします。
●ブロックを作る
次に、表示させるブロックを作ります。
1.管理者メニュー > ブロック
2.新規作成
  タイトルと、ブロック名を入力
  タイプは、phpブロック
  そして、phpブロックオプションの関数のところに
  phpblock_rssAggregator と入力
保存して終わりです。
●で、ちょっと自分で追加したところ。
記事のタイトルだけ表示して、なんとなく寂しかったので、
ツールチップで、日付を表示するようにしてみました。
lib-custom.phpの以下。

$content = '<a href="' . $articles[$i]['link'] . '">'
$articles[$i]['title'] [...]