UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: ivan23 от 27 Июля 2011, 18:39:10

Название: Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: ivan23 от 27 Июля 2011, 18:39:10
Нашел, что для всех новостей можно показывать календарик на сайте через %news calendar()%
http://www.umi-cms.ru/support/forum/razrabotka_sajtov/integraciya_java_skripta/?p=1 (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()%

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

Посоветуйте откуда начать рыть?
В службе поддержки помочь не смогли.
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 28 Июля 2011, 08:24:20
немного модифицировал макрос %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
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: ivan23 от 28 Июля 2011, 16:08:48
Спасибо! Помогло.
Прописал в 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)
В кодинге не силен. Подскажите пожалуйста.
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: ivan23 от 28 Июля 2011, 17:11:19
Что-то странное творится. Когда на локалпаке незалогинен - все работает, только стоит залогиниться - локалпак повисает, броузер пишет:
The connection was reset
The connection to the server was reset while the page was loading.
Перезапускаю апач - тоже самое.

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

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

Видимо где-то с правами какая-то засада :(
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 28 Июля 2011, 17:49:25
скорее всего это из-за 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)% - последующий месяц

код не проверял, может где неточности
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: ivan23 от 28 Июля 2011, 18:23:08
что интересно прописал include('/classes/modules/news/calendar.php');
теперь обратная ситуация - в залогиненном броузере - показывает календари, в незалогиненном ложит апач.
include_once - не помогает. Как быть?

вывод месяцев +1, +2 - работает, спасибо!
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 28 Июля 2011, 18:43:02
костыль конечно, но сделай так, вместо строки
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;
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: ivan23 от 28 Июля 2011, 19:17:07
Все то же самое, залогиненный лежит, незалогиненный показывает.
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: ivan23 от 01 Августа 2011, 15:45:46
Помогииииите пожалуйстаааа :)
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 02 Августа 2011, 09:08:42
проверил у себя все работает, единственное что еще не упоминал, кодировка в файлах должна быть utf-8
прикладываю оба своих файла сюда
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 02 Августа 2011, 09:11:37
попробуй с моими файлами и еще напиши у тебя локал umi какой? сам устанавливал сборку или ставил локалпак от umi который?
Название: Re:Вывод нескольких календарей при использ
Отправлено: ivan23 от 02 Августа 2011, 13:20:11
Да вы правы, все нормально. Спасибо!
Поставил новый чистый локалпак с офсайта - ничего не падает.
Видимо где-то в моей системе конфликт, может из-за обновления, может еще из-за чего.
:(
Буду разбираться.
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 02 Августа 2011, 13:43:42
если разберешься, напиши в чем дело было
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: ivan23 от 02 Августа 2011, 14:13:27
У меня была закомментирована старая строчка вызова календаря (не кастомного - стандартного) в темплейте:
<!--%news calendar()%-->
Как только ее убрал - все заработало.
Этож надо какая umi.cms въедливая, даже комменты разбирает.
Фух!
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 02 Августа 2011, 14:25:09
она текстом все парсит, без учета html тегов если есть конструкция вида %xxxxx% , то она пытается  его интерпретировать его как макрос, так что даже в комментах делай пробел после первого %
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: niakriss от 22 Ноября 2012, 11:55:21
Может быть не в тему.. но решила тут тоже написать.. ну очень надо решить эту задачку(( а я даже не знаю с какой стороны подступить? как соединить xslt и js?
у меня есть календарь ui datepicker... мне нужно, чтобы он работал так же как макрос news calendar()... но еще бы подсвечивал все даты в которых есть новости...
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 22 Ноября 2012, 12:09:18
Цитировать
чтобы он работал так же как макрос news calendar()... но еще бы подсвечивал все даты в которых есть новости...

что помимо отметок дат за которые есть новости должен делать календарь, чтобы "работал так же как макрос news calendar()" ?

ui datepicker вам нужен, я так понимаю, чтобы календарь был такой же красивый и выезжал возможно по щелчку на каком-то элементе страницы?
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: niakriss от 22 Ноября 2012, 12:59:16
еще  необходимо ограничение дат.. чтоб календарь листался только от сегодняшнего дня до последней новости... например новость стоит сегодня... а последняя новость 22 декабря 2012 года.. так вот.. чтоб пользователь не мог листать календарь назад, а вперед только до декабря 2012... а для чего именно нужен ui datepicker мне не сказали.. сказали что в тех.задании так... подключай и все...
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: admin от 22 Ноября 2012, 14:23:29
я бы, пожалуй, порыскал в интернете на тему "как выделить определенные даты в datepicker" (3 минутный поиск выдал вот такую статью, выглядит вполне пригодной http://mabp.kiev.ua/2009/08/11/jquery-ui-customized-datepicker/). Дальше делаем вывод всех дат, которые надо этой доработкой выделить, через макрос вывода новостей, только выводим одни лишь даты. И при выборе даты (это уже событие предусмотренное в самом datepicker) делаем js функцию для редиректа на соответствующую ленту и передаем ей параметры ?year, &month и &day (посмотрите в документации http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/novosti/news_lastlist/ в самом низу описано как они работают)

В итоге, в datepicker даты выделены и при выборе редиректят нас на соответствующую ленту, с выведенными новостями за указанный день
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: niakriss от 22 Ноября 2012, 14:45:45
эх... с ума сойти.. буду пытаться разобрать((( я вообще-то раньше никогда с JS не работала(
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: niakriss от 22 Ноября 2012, 16:44:18
а как в переменную запихать дату которую нажимаешь? я пыталась var date = getDate();
не срабатывает(((
Название: Re:Вывод нескольких календарей при использов кастомного календаря %news calendar()%
Отправлено: niakriss от 22 Ноября 2012, 18:00:51
вот получилось так:
var d =  $(this).datepicker('getDate');

Но так он выводит полностью дату.. и с днем недели и месяцем и годом.. а мне только день нужен...

пишут еще про
.datepicker("setDate", date)
 
Устанавливает дату date в качестве выбранной. Параметр date может быть задана или объектом Date или строкой, содержащей дату в формате, определенным в свойстве dateFormat..

Но я не понимаю как ее прописать...
Пишу var d =  $(this).datepicker('setDate');
а что вместо date написать не понимаю.. пробовала new Date(2007, 1 - 1, 26)
но тогда выдает [object Object]

вот.. в  чем может быть проблема?