カンマ区切りにしたい理由が分かりませんが、年と月のデータ(入力)を分離し、reflectで年だけを対象にアーカイブ出力させるのでよければ、以下のような手はどうでしょう。(ぱっと考えた案なのでもっとスマートな方法がきっとあると思います。コードはサクっと作ったのでバグがあるかもしれません。)
1.テンプレート変数
1.1 開催年(holdingYear)
入力タイプ : DropDown List Menu
入力時のオプション値 : @EVAL return $modx->runSnippet(’makeYearList’);
1.2 開催月(holdingMonth)
入力タイプ : DropDown List Menu
入力時のオプション値 : @EVAL return $modx->runSnippet(’makeMonthList’);
2.スニペット
2.1 makeYearList
スニペット名 : makeYearList ※ご随意に
説明 : 年(西暦)の選択リストを出力(値はタイムスタンプ)
コード :
/* -- usage --
* [[makeYearList? &start=`2008` &end=`2020`]]
* start : 開始年
* end : 終了年
*/
( isset($start) ) ? $start: $start=date("Y") ; // 開始年の規定値:今年
( isset($end) ) ? $end: $end=date("Y")+20-1 ; // 終了年の規定値:20年後
$rtnstr = '' ;
for ($y = $start; $y <= $end; $y++) {
if (strlen($rtnstr)!=0) {
$rtnstr .= '||' ;
}
$rtnstr .= $y . '年' . '==' . mktime(0,0,0,1,1,$y) ;
}
unset($start, $end, $y) ;
return $rtnstr ;
出力サンプル : [[makeYearList? &start=`2008` &end=`2020`]] の場合は・・・
2008年==1199113200||2009年==1230735600||2010年==1262271600||2011 年==1293807600||2012年==1325343600||2013年==1356966000||2014 年==1388502000||2015年==1420038000||2016年==1451574000||2017 年==1483196400||2018年==1514732400||2019年==1546268400||2020年==1577804400
2.2 makeMonthList
スニペット名 : makeMonthList ※ご随意に
説明 : 月の選択リストを出力
コード :
/* -- usage --
* [[makeMonthList? &start=`1` &end=`12`]]
* start : 開始月
* end : 終了月
*/
( isset($start) ) ? $start: $start=1 ; // 開始月の規定値:1月
( isset($end) ) ? $end: $end=12 ; // 終了月の規定値:12月
$rtnstr = '' ;
for ($m = $start; $m <= $end; $m++) {
if (strlen($rtnstr)!=0) {
$rtnstr .= '||' ;
}
$rtnstr .= $m . '月' . '==' . $m ;
}
unset($start, $end, $m) ;
return $rtnstr ;
出力サンプル : [[makeMonthList]] の場合は・・・
1月==1||2月==2||3月==3||4月==4||5月==5||6月==6||7月==7||8月==8||9月==9||10月==10||11月==11||12月==12
3.ページ出力
3.1 reflect(ナビ)
[[Reflect? &getDocuments=`1` &id=`myDittoCall` &dateSource=`holdingYear` &dittoSnippetParameters=`parents:講演会フォルダID` &showItems=`0` &tplMonth=`dummy`]]
3.2 Ditto(一覧)
[!Ditto? &parents=`講演会フォルダID` &extenders=`dateFilter` &id=`myDittoCall` &dateSource=`holdingYear` !]