未来投稿記事の表示

Nucleusでは普通、今日の日付までの記事しか表示できません。
そこで、Nucleusでスケジュール管理用に先々の予定なども書き込み、表示させるようにしたかったので、いろいろ調べてみました。同じ様なことを考える人がやっぱりいるんですね。
NucleusJPフォーラムの中にありました。
http://japan.nucleuscms.org/bb/viewtopic.php?t=144
ここにコアファイルを改造する方法が詳しく解説されています。
1)Nucleusのコアファイル「BLOG.php」の変更
BLOG.php(v3.31SP1)
以下の3ヶ所を//でコメントアウト

function getSqlSearch内
491行目//	   . ' and i.itime<=' . mysqldate($this->getCorrectTime())
function getSqlBlog内
534行目	       . ' and i.idraft=0';	// exclude drafts
536行目//	   . ' and i.itime<=' . mysqldate($this->getCorrectTime());
※行の終了";"がコメントアウトではずれてしまうので「. ' and i.idraft=0」の後ろに";"を入れます
function showArchiveList内
566行目//	   . ' and itime <=' . mysqldate($this->getCorrectTime())	// don't show future items!

2)「globalfunctions.php」、「COMMENTS.php」の各ファイルのそれぞれの0,0 の部分を、1,1に変更
globalfunctions.php(v3.31SP1)

function selector内
771行目		if (!$manager->existsItem($itemid,1,1))

COMMENTS.php(v3.31SP1)

function isValidComment内
287行目		$item =& $manager->getItem($this->itemid,1,1);

3)プラグインを使用する場合はそのプラグインも変更
私は「NP_ShowBlogs」を使ってるのでこちらも変更します
http://japan.nucleuscms.org/bb/viewtopic.php?t=604
ここに変更方法が書かれてます。
NP_ShowBlogs
下記の2ヶ所(記事数カウントする部分と、記事を抽出する部分と)をコメントアウトして未来制限を解除します。

340行目//	$where .= ' AND i.itime <= ' . mysqldate($b->getCorrectTime());
404行目//				   . ' AND i.itime  <= ' . mysqldate($b->getCorrectTime()) 

4)未来投稿記事をカレンダーで表示できるように変更
NP_Calender-0.84k(表示幅設定機能付き)ここに変更方法が書かれてます
NP_Calendar.php

209行目	   if ($category != 0) {
210行目		   $res = sql_query('SELECT DAYOFMONTH(itime) as day FROM '.sql_table('item').' WHERE icat='.$category.' and MONTH(itime)='.$month.' and YEAR(itime)='.$year .' and iblog=' . $blogid . ' and idraft=0 and UNIX_TIMESTAMP(itime)<'.$timeNow.' GROUP BY day');
211行目	   } else {
212行目		   $res = sql_query('SELECT DAYOFMONTH(itime) as day FROM '.sql_table('item').' WHERE MONTH(itime)='.$month.' and YEAR(itime)='.$year .' and iblog=' . $blogid . ' and idraft=0 and UNIX_TIMESTAMP(itime)<'.$timeNow.' GROUP BY day');
213行目	   }
↓
209行目	   if ($category != 0) {
210行目		   $res = sql_query('SELECT DAYOFMONTH(itime) as day FROM '.sql_table('item').' WHERE icat='.$category.' and MONTH(itime)='.$month.' and YEAR(itime)='.$year .' and iblog=' . $blogid . ' and idraft=0 GROUP BY day');
211行目	   } else {
212行目		   $res = sql_query('SELECT DAYOFMONTH(itime) as day FROM '.sql_table('item').' WHERE MONTH(itime)='.$month.' and YEAR(itime)='.$year .' and iblog=' . $blogid . ' and idraft=0 GROUP BY day');
213行目	   }
226行目	   if ($next_month > $currentdate['mon'] && $year == $currentdate['year']) {
227行目	   	   $future = false;
228行目	   } else {
229行目	   	   $future = true;
230行目	   }
↓
226行目	   if ($next_month > $currentdate['mon'] && $year == $currentdate['year']) {
227行目	   	   $future = true;
228行目	   } else {
229行目	   	   $future = true;
230行目	   }

※おまけ
日付表示に曜日を付け加えて、更に曜日を日本語で表示するように変更
Nucleusの管理画面で「テンプレート編集」(日付と時刻)の中から

日付フォーマットを編集
%d/%m
↓
%m/%d(%a)
更にLocaleも編集
en
↓
japanese

エディタに機能ボタンを追加

Nucleusのエディタに機能ボタンを追加する方法については、nakahara21.comweb関連tips備忘録でいろいろ紹介されているのでこのブログにもちょっとアレンジしてボタンを追加してみます。
Nucleusのエディタに以下の5つの機能ボタンを追加します。
・選択範囲を<pre><%nobr%>~<%/nobr%></pre>’で囲むボタン
・特殊文字を変換(<、>、& を &lt;、&gt;、&amp; に変換)するボタン
・リスト形式、番号付きリスト形式、見出しリスト形式のボタン
編集するのは下の3つ (Nucleus CMS v3.31SP1 )
 ・nucleus/javascript/edit.js
 ・nucleus/libs/PAGEFACTORY.php
 ・nucleus/language/japanese-euc.php
まずはedit.jpから 110行目付近の

function italicThis() { insertAroundCaret('<i>','</i>'); }
の下に、以下の2行を挿入する。
function preThis() { insertAroundCaret('<pre><%nobr%>','<%/nobr%></pre>'); }
function entitiesThis() { entitiesCaret(); }

次に、287行目付近の

/* some methods to get things working in Mozilla as well */
の上に以下の関数を挿入する。
function entitiesCaret () {
var textEl = lastSelected;
if (textEl && textEl.createTextRange && lastCaretPos) {
var caretPos = lastCaretPos;
caretPos.text = caretPos.text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');
} else if (!document.all && document.getElementById) {
newText = mozSelectedText().replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');
mozReplace(document.getElementById('input' + nonie_FormType), newText);
}
updAllPreviews();
}

次に、下記のコードを最後尾に追加します。

function ullistThis() { insertAroundCaret('<ul><li></li>\n<li></li>\n<li></li>\n<li></li>','</ul>\n'); }
function nolistThis() { insertAroundCaret('<ol><li></li>\n<li></li>\n<li></li>\n<li></li>','</ol>\n'); }
function dllistThis() { insertAroundCaret('<dl><dt></dt>\n<dd></dd>\n<dt></dt>\n<dd></dd>','</dl>\n'); }

今度はPAGEFACTORY.php (313行目)

$this->_jsbuttonspacer();
の下に、以下の5行を挿入する。
$this->_jsbutton('pre',"preThis()",_ADD_PRE_TT);
$this->_jsbutton('entities',"entitiesThis()",_ADD_ENTITIES_TT);
$this->_jsbutton('ullist',"ullistThis()",_ADD_ULLIST_TT);
$this->_jsbutton('nolist',"nolistThis()",_ADD_NOLIST_TT);
$this->_jsbutton('dtlist',"dllistThis()",_ADD_DLLIST_TT);

次にPAGEFACTORY.php (351行目)

$this->_jsbuttonspacer();
の下に、以下の5行を挿入する。
$this->_jsbutton('pre',"preThis()",_ADD_PRE_TT);
$this->_jsbutton('entities',"entitiesThis()",_ADD_ENTITIES_TT);
$this->_jsbutton('ullist',"ullistThis()",_ADD_ULLIST_TT);
$this->_jsbutton('nolist',"nolistThis()",_ADD_NOLIST_TT);
$this->_jsbutton('dtlist',"dllistThis()",_ADD_DLLIST_TT);

次にjapanese-euc.phpの編集

209行目 // tooltips on toolbar
210行目 define('_ADD_ALIGNLEFT_TT',		       '左寄せ');
211行目 define('_ADD_ALIGNRIGHT_TT',		'右寄せ');
212行目 define('_ADD_ALIGNCENTER_TT',		'中央寄せ');
この下に以下を追加
define('_ADD_PRE_TT',		'<PRE>');
define('_ADD_ENTITIES_TT',		'特殊文字変換');
define('_ADD_ULLIST_TT',		'リスト形式');
define('_ADD_NOLIST_TT',		'番号付きリスト形式');
define('_ADD_DLLIST_TT',		'見出しリスト形式');

最後に画像の追加
以下の5つの画像をnucleus/imagesに追加
20061105-button-pre.gif 20061105-button-entities.gif 20061106-button-ullist.gif 20061106-button-nolist.gif 20061106-button-dtlist.gif
こんな感じになります。
20080426-WS000003.JPG

未来投稿記事のコメントもリスト表示

スケジュール管理に未来投稿記事も表示できるようにしたんですが、未来投稿記事にコメントがあった場合、通常だとコメントリストには表示されません。そこで、未来投稿記事のコメントもリスト表示できるように変更しました。
コメントリストはNP_Comment Tree バージョン: 2.1を使ってますので、
NP_CommentTree.phpの173行目を以下のように変更します。

$item =& $manager->getItem($latest_itemid[$i],0,0);
↓
$item =& $manager->getItem($latest_itemid[$i],1,1);

Nucleusのカテゴリーの順番入れ替え

自宅サーバー構築メモのカテゴリーの順番を入れ替える必要があったのでググッてみたらNucleus(JP)Forumに修正方法が書かれてました。
【BLOG.php】を編集します(v2.4)

636行目付近の
$data['self'] = $CONF['Self'];
この部分の下に以下を追加します
$data['catname'] = strip_tags($data['catname']);
1138行目の
function parse_category() { echo $this->currentItem->category; }
を下記のように編集します
function parse_category() { echo strip_tags($this->currentItem->category); }

これでカテゴリーの名前の前に<00>、<01>等の数字を入力することで、順番を自由に設定できます。
v3.31SP1 の場合
【BLOG.php】

658行目付近の
$data['self'] = $CONF['Self'];
この部分の下に以下を追加します
$data['catname'] = strip_tags($data['catname']);

【ITEMACTIONS.php】

153~155行目の
function parse_category() {
echo $this->currentItem->category;
}
を下記のように編集します
function parse_category() {
echo strip_tags($this->currentItem->category);
}

Nucleus バージョン3.3 にアップグレード

このブログは Nucleus を使ってますが、Nucleus バージョン3.3 日本語版がリリースされましたので、アップグレードしました。
v3.3 の主な機能は以下の通り。
* コメントフォームのメールアドレス欄とURLの分離
* if 文の拡張
* カスタムスキンパーツ
* 自動ドラフト保存
* Atom 1.0 対応
* SpamCheck イベントがコア組み込みに
* セキュリティ関連の強化
などです。
アップグレード手順は以下のとおりです。
1)パッケージのダウンロード
フルパッケージ版ではなく、v3.24からアップグレードしますのでアップグレード用パッケージ「upgrade3.3_ja_euc.zip」をダウンロードします。
2)バックアップの作成
これまで使用していたデータベースを壊したりすることは無いようですが、念のため、データベースと config.php のバックアップをとっておきます。
3)ファイルのアップロード
コアファイル等いくつかのファイルを変更してますので、アップロードする前にそれぞれのバックアップファイルをとり、SSHで上書きアップロードします。更新後、変更してた箇所をなおします。
4)アップグレードスクリプトの実行
アップグレードスクリプトのディレクトリーにアクセスして、アップグレードスクリプトを実行します。
http://yokensaka.com/blog/nucleus/upgrades/index.php
実行すべきアップグレード手順が以下のように表示されますので、これを実行します。これで v3.3用のデータベースが構築されます。
20070511-nucleus_v3.3_01.gif
20070511-nucleus_v3.3_02.gif
20070511-nucleus_v3.3_03.gif
5)最後にセキュリティリスクを避けるため、upgrades/ ディレクトリは削除します。
6)手動変更
ログイン用のフォームや、(ログインしてないときの)コメントフォームが乱れる場合は、使用してるスキンの css に下記を追加することで、きれいに並ぶようになりようです。

div.loginform .formfield, div.commentform .formfield {
display: block;
} 

テンプレートで、日付のフッターを使用してる場合、こちらのBLOG.zipと入れ替える必要があるようです。

ブログ(Nucleus)で使用している各種プラグイン

yokensaka.comでは「あにょの自宅サーバー構築メモ」の他にいくつかのブログをNucleusで運営しています。そのいくつかのブログで使用している各種プラグインの最新版ダウンロード先と現在のバージョン管理をするためにまとめてみました。
※プラグインをいくつか最新版にしました。2007/04/07

NP_0TicketForPlugin バージョン: 1.2.8.1a
独自の管理ページを持つプラグインの脆弱性を暫定的に解決するプラグイン。
NP_0PatchBlogid バージョン: 0.2.5
SQLインジェクション攻撃・クロスサイトスクリプティング攻撃の脆弱性を暫定的に解決するプラグイン。
NP_NoRobotComment バージョン: 0.94
コメントフォームを利用しないコメントスパムをを拒否するプラグイン。
NP_ShowBlogs バージョン: 2.66.3
indexページにページ送りを付加するプラグイン。複数blog記事の一括時系列表示にも対応。
NP_Navigation Bar バージョン: 0.93
パン屑リストと前後の記事へのリンクを自動表示するプラグイン。
NP_ExtraSkinJP バージョン: 0.44
スキンから呼び出すパーツを作ることができ、統一したいナビゲーションやサイドバーなどに便利なプラグイン。
NP_Headlines バージョン: 0.11
サイドメニューの「最新の 10 記事」を表示しているシンプルで動作が軽いプラグイン。
NP_ArchiveIndex バージョン: 0.8
アーカイブ一覧画面に、カテゴリー別に記事一覧を分かりやすく表示する為のプラグイン
NP_TrackBack バージョン: 2.0.3 jp7
トラックバック機能を実現するためのプラグイン。
NP_Hit Counter バージョン: 0.63
時間期限付きIPチェックなど多機能版カウンターのプラグイン。
NP_Calendar バージョン: 0.85
定番。記事へのナビゲーション機能のついたカレンダーを表示するプラグイン。
NP_Contents List バージョン: 2.1
カテゴリリストを表示させるプラグイン。カテゴリリストの表示順序を任意で決められる。
NP_StripBR バージョン: 0.01
改行を自動変換しない部分を指定できるプラグイン。
NP_SkinFiles バージョン: 2.02
スキンファイルのアップロード、cssなどの編集を行うプラグイン。
NP_Thumbnail バージョン: 3.0
画像アップロード時に自動的にサムネイル(縮小画像)を作成してくれるプラグイン。
NP_MediaFiles バージョン: 1.01.8
media ディレクトリのファイルを管理するためのプラグイン。
NP_Comment Tree バージョン: 2.1
最新のコメントをツリー形式で表示させるプラグイン。
NP_EzComment バージョン: 0.33
個別アイテムページ以外にもコメントやコメントフォームを表示する事が出来るプラグイン。
NP_CommentEdit バージョン: 03
いただいたコメントの編集・削除がログインしてる時、コメント表示画面から出来るプラグイン。

「NP_ShowBlogs」インストール

「よけんさか」のいくつかのブログで使ってた「NP_MultiBlogs」というプラグインが、現在、セキュリティチェックのため一時的に配布を停止しているようなので、代わりに「NP_ShowBlogs」というプラグインをインストールしました。そして、ページ切り替えの表示を見やすいように変更しました。
≪Prev | | 1 | 2 | 3 |…| 8 | 9 | 10 || Next≫

前のページ ≪ | 1 | 2 | 3 |…| 8 | 9 | 10 | ≫ 次のページ
変更するには「NP_ShowBlogs.php」の689行目から752行目あたりを以下のように編集します。

	$buf .= '<a href="' . $prevpagelink . '" title="Previous page" rel="Prev">&laquo;Prev</a> |';
} elseif ($type >= 2) {
$buf .= "&laquo;Prev |";
・
・
$buf .= '| <a href="' . $nextpagelink . '" title="Next page" rel="Next">Next&raquo;</a>' . "\n";
} elseif ($type >= 2) {
$buf .= "| Next&raquo;\n";
↓
$buf .= '<a href="' . $prevpagelink . '" title="Previous page" rel="Prev">前のページ &laquo;</a> ';
} elseif ($type >= 2) {
$buf .= "前のページ &laquo;";
・
・
$buf .= '<a href="' . $nextpagelink . '" title="Next page" rel="Next"> &raquo; 次のページ</a>' . "\n";
} elseif ($type >= 2) {
$buf .= " &raquo; 次のページ\n";>

「NP_Thumbnail」変更

あにょのブログでは野鳥の写真をアップしていますが、「NP_Thumbnail」で自動生成されるサムネイル画像の画質は100に対して75で作成されるので、90で作成されるように、「NP_Thumbnail.php」の173行目と176行目を変更しました。いくらかサムネイルの画質、綺麗になったかな?

173行目		ImageJpeg($im,$tmpfname);
176行目		ImagePng($im,$tmpfname);
↓
173行目		ImageJpeg($im,$tmpfname,90);
176行目		ImagePng($im,$tmpfname,90);

あと、サムネイル画像にマウスを置くと「クリックするとオリジナル画像を表示します」というテキストを表示させるよう278行目と279行目の最後のほうを変更しました。

class=¥"thumbnail¥" $alt />";
↓
class=¥"thumbnail¥" alt=¥"クリックするとオリジナル画像を表示します¥" />";

「画像ポップアップウィンドウ」のスキン変更

Nucleusの初期設定では、ポップアップウインドウに表示されてる画像を左クリックしても右クリックしてもウインドウが閉じるようになっています。そこで右クリックした場合はメニュー表示されるように変更しました。
スキン編集で「画像ポップアップウィンドウ」を開き以下のように変更します。

<body onblur="window.close()">
<a href="javascript:window.close();"><%image%></a>
</body>
 ↓
<body onclick="window.close()">
<a href="javascript:window.close();"><%image%></a>
</body>

「onblur」を「onclick」にすることで「左クリック→閉じる、右クリック→メニュー表示」となります。
追記:2010年2月16日
上記設定だとIEでは「左クリック→閉じる、右クリック→メニュー表示」になりますが、Firefoxでは右クリックしても閉じてしまいます。IE、Firefox両方共、「左クリック→閉じる、右クリック→メニュー表示」となるように設定変更しました。

<body onblur="window.close()">
<a href="javascript:window.close();"><%image%></a>
</body>
 ↓
<body>
<a href="#" onclick="window.close()"><%image%></a>
</body>