Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

ivan23

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Нашел, что для всех новостей можно показывать календарик на сайте через %news calendar()%
http://www.umi-cms.ru/support/forum/razrabotka_sajtov/integraciya_java_skripta/?p=1
Даты с новостями на календаре отмечаются и ставится гиперссылка на новость или на число, если новостей несколько.

сам календарь находится с версии 2.8 здесь: \classes\modules\news\calendar.php
чтобы его могли посмотреть все - достаточно разрешить его показ в permissions.custom.php
<?php
   $permissions = Array("view" => Array('calendar'));
?>
Вывод осуществляется в шаблоне %news calendar()%

При этом этом календарь показывает только текущий месяц, а мне нужно вывести сразу три календаря текущий месяц, следующий, после следующего.

Посоветуйте откуда начать рыть?
В службе поддержки помочь не смогли.

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
немного модифицировал макрос %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

*

ivan23

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Спасибо! Помогло.
Прописал в 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)
В кодинге не силен. Подскажите пожалуйста.

*

ivan23

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Что-то странное творится. Когда на локалпаке незалогинен - все работает, только стоит залогиниться - локалпак повисает, броузер пишет:
The connection was reset
The connection to the server was reset while the page was loading.
Перезапускаю апач - тоже самое.

А когда незалогинен - все работает.

Возвращаю назад к первоначальному виду __custom.php - могу залогиниться, но календари, что логично, пропадают.

Видимо где-то с правами какая-то засада :(

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
скорее всего это из-за 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)% - последующий месяц

код не проверял, может где неточности

*

ivan23

  • *
  • 20
  • +0/-0
    • Просмотр профиля
что интересно прописал include('/classes/modules/news/calendar.php');
теперь обратная ситуация - в залогиненном броузере - показывает календари, в незалогиненном ложит апач.
include_once - не помогает. Как быть?

вывод месяцев +1, +2 - работает, спасибо!

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
костыль конечно, но сделай так, вместо строки
include('calendar.php');

вставь
$lib_path = "classes/modules/news/calendar.php";
$lib_path = CURRENT_WORKING_DIR . "/" . $lib_path;

if(file_exists($lib_path)) require $lib_path;

*

ivan23

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Все то же самое, залогиненный лежит, незалогиненный показывает.

*

ivan23

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Помогииииите пожалуйстаааа :)

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
проверил у себя все работает, единственное что еще не упоминал, кодировка в файлах должна быть utf-8
прикладываю оба своих файла сюда

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
попробуй с моими файлами и еще напиши у тебя локал umi какой? сам устанавливал сборку или ставил локалпак от umi который?

*

ivan23

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Re:Вывод нескольких календарей при использ
« Ответ #11 : 02 Августа 2011, 13:20:11 »
Да вы правы, все нормально. Спасибо!
Поставил новый чистый локалпак с офсайта - ничего не падает.
Видимо где-то в моей системе конфликт, может из-за обновления, может еще из-за чего.
:(
Буду разбираться.

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
если разберешься, напиши в чем дело было

*

ivan23

  • *
  • 20
  • +0/-0
    • Просмотр профиля
У меня была закомментирована старая строчка вызова календаря (не кастомного - стандартного) в темплейте:
<!--%news calendar()%-->
Как только ее убрал - все заработало.
Этож надо какая umi.cms въедливая, даже комменты разбирает.
Фух!

*

admin

  • *****
  • 2416
  • +171/-1
    • Просмотр профиля
она текстом все парсит, без учета html тегов если есть конструкция вида %xxxxx% , то она пытается  его интерпретировать его как макрос, так что даже в комментах делай пробел после первого %