カレンダープラグインで翌月表示 投稿する

投稿者:s_sato  投稿日時:2025-05-01 14:14:23
カレンダープラグインで表示できるカレンダーをcommon.entry_calendar_nextのように
翌月分も表示できる方法がありましたら教えていただきたいです。
よろしくお願いいたします。
投稿者:齋藤毅  投稿日時:2025-05-02 06:04:30
カレンダープラグインのコードを確認してみましたが、現時点での機能では翌月分は表示出来そうにないです。
プラグインの複製をすれば、対応出来そうです。

もし、複製を希望される場合は、この場で一つずつ対応方法の投稿を行います。
投稿者:s_sato  投稿日時:2025-05-02 08:18:04
ありがとうございます。
複製で問題ないので手順をお願いします。
投稿者:齋藤毅  投稿日時:2025-05-02 09:21:19
https://saitodev.co/soycms/soycms/tutorial/150
上記ページでプラグインに関しての基本が記載されています。
この内容を元に話を進めます。

以後のプラグイン開発と被らないように、プラグインIDをcalendar_sにします。

カレンダープラグインは
/CMSインストールディレクトリ/common/site_include/plugin/calendar/
以下にあります。

/CMSインストールディレクトリ/common/site_include/plugin/calendar_s/
を作って、
/CMSインストールディレクトリ/common/site_include/plugin/calendar/
以下のファイルをすべてコピーします。

コピーできましたら、
/CMSインストールディレクトリ/common/site_include/plugin/calendar_s/calendar.php
/CMSインストールディレクトリ/common/site_include/plugin/calendar_s/calendar_s.php
にリネームします。


/CMSインストールディレクトリ/common/site_include/plugin/calendar_s/calendar_s.php
を開き、
CalendarPlugin
の文字列をすべて、
CalendarSPlugin
に変換します。

const PLUGIN_ID = "calendar";
を探し、
const PLUGIN_ID = "calendar_s";
に変換します。

"name"=>"カレンダープラグイン",
の箇所はわかりやすいようなプラグインの名称にしてください。

これでプラグインの複製は終わりです。
投稿者:齋藤毅  投稿日時:2025-05-02 09:24:19
次に翌日の処理を追加します。
/CMSインストールディレクトリ/common/site_include/plugin/calendar_s/calendar_s.php
を開き、89行目付近にあります
$monthStart = mktime(0,0,0,$month,1,$year);
$monthEnd = mktime(0,0,0,$month+1,1,$year);

$month = (int)$month + 1;
if($month >= 12){
	$year = (int)$year + 1;
	$month = 1;
}
$monthStart = mktime(0,0,0,$month,1,$year);
$monthEnd = mktime(0,0,0,$month+1,1,$year);
にします。

これで翌月分のカレンダーになるはずです。

今回のコードは試していませんので、何らかのエラーは出力された場合はご連絡ください。
投稿者:齋藤毅  投稿日時:2025-05-02 09:27:25
公開側で設置するタグは、cms:id="calendar_s"になります。
投稿者:s_sato  投稿日時:2025-05-02 09:52:06
無事に表示できました!
ありがとうございました。
投稿者:s_sato  投稿日時:2025-05-02 13:52:14
複製はできたのですが、別の問題が出ました。
記事の制作日がカレンダーの日付にリンクされると思うのですが、
クリックすると404になってしまいます。
どこか間違えてるのかと思い、別のサイトでテストしてみましたが
おなじ挙動になりました。
原因はなにが考えられるでしょうか。
投稿者:齋藤毅  投稿日時:2025-05-02 14:32:50
/CMSインストールディレクトリ/common/site_include/plugin/calendar_s/calendar_s.php
の下の方に
switch($count){
	case 0:
		$text = $j;
		break;
	case 1:
		if(!is_null($entryLink) && isset($entryIdsOnDate[$date_text])){
			$text = '<a href="' . $entryLink.$entryIdsOnDate[$date_text] . '">'.$j.'</a>';
			break;
		}
	default:
		$text = '<a href="'.$monthLink.$date_text.'">'.$j.'</a>';
}
の箇所にリンクの生成のコードがあります。
この箇所で存在するURLになるように修正すれば良さそうです。

どのように修正すれば良いかの確認の余力がありません。
投稿者:s_sato  投稿日時:2025-05-02 14:40:28
お忙しいところありがとうございます。
まだラフ段階なので、とりあえずこのままにしておき、
あとで考えようと思います。
ありがとうございました。
ログインして投稿する