немного модифицировал макрос %news calendar()% и вот что у меня получилось в файле /classes/modules/news/__custom.php
<?php
include('calendar.php');
abstract class __custom_news {
//TODO: Write here your own macroses
public function calendarCustom($month=NULL, $year=NULL)
{
//def_module::__loadLib("calendar.php");
//def_module::__implement("calendar");
if(!$year) $year = getRequest('year') ? (int) getRequest('year') : date('Y');
if(!$month) $month = getRequest('month') ? (int) getRequest('month') : date('m');
$calendar = new Calendar();
$lang_id = cmsController::getInstance()->getCurrentLang()->getId();
$lang = langsCollection::getInstance()->getLang($lang_id);
if ($lang->getPrefix() == "ru")
{
$calendar->setMonthNames(array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"));
$calendar->setDayNames(array("Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"));
$calendar->setStartDay(1);
}
$result = $calendar->getMonthView($month, $year);
return $result;
}
};
?>
тепер прописав в шаблоне
%news calendarCustom(7)%
%news calendarCustom(8)%
%news calendarCustom(9)%
я получу вывод календаря да июль, август и сентябрь
P.S. Не забываем про права на скрипт, которые надо прописать в permissions.custom.php
Спасибо! Помогло.
Прописал в permissions.custom.php
<?php
$permissions = Array("view" => Array('calendar'));
$permissions = Array("view" => Array('calendarCustom'));
?>
Подскажите а как сделать, чтобы в шаблоне вместо %news calendarCustom(7)% прописать ТЕКУЩИЙ месяц, примерно как-то так %news calendarCustom(current_month)%
вместо %news calendarCustom(8)% как-то %news calendarCustom(current_month+1)%
а вместо %news calendarCustom(9)% как-то %news calendarCustom(current_month+2)%
Что-то мне подсказывает, что нужно юзать datagetproperty systemconvertdate (m)
В кодинге не силен. Подскажите пожалуйста.
скорее всего это из-за include('calendar.php'); пути на локале по другому определяются.
насчет отсчет от текущего месяца надо сделать так
<?php
include('calendar.php');
abstract class __custom_news {
//TODO: Write here your own macroses
public function calendarCustom($month=NULL, $year=NULL)
{
//def_module::__loadLib("calendar.php");
//def_module::__implement("calendar");
if(!$year) $year = getRequest('year') ? (int) getRequest('year') : date('Y');
else $year=date('Y')+$year;
if(!$month) $month = getRequest('month') ? (int) getRequest('month') : date('m');
else $month=date('m')+$month;
$calendar = new Calendar();
$lang_id = cmsController::getInstance()->getCurrentLang()->getId();
$lang = langsCollection::getInstance()->getLang($lang_id);
if ($lang->getPrefix() == "ru")
{
$calendar->setMonthNames(array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"));
$calendar->setDayNames(array("Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"));
$calendar->setStartDay(1);
}
$result = $calendar->getMonthView($month, $year);
return $result;
}
};
?>
а в параметрах вызова макроса указывать
%news calendarCustom()% - текущий месяц
%news calendarCustom(-1)% - предыдущий месяц
%news calendarCustom(1)% - последующий месяц
код не проверял, может где неточности
костыль конечно, но сделай так, вместо строки
вставь
$lib_path = "classes/modules/news/calendar.php";
$lib_path = CURRENT_WORKING_DIR . "/" . $lib_path;
if(file_exists($lib_path)) require $lib_path;