Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Вывод всех объектов каталога в шаблоне на основе макроса getObjectsList

Автор s.kirillРаздел Шаблоны XSLT

Ответов: 4
Просмотров: 2080
Последний ответ 15 Июня 2017, 17:42:12
от s.kirill
Отказ работы макроса при переходе на другую страницу

Автор SeweryssРаздел Настройка системы и модулей

Ответов: 4
Просмотров: 2775
Последний ответ 02 Декабря 2013, 22:09:51
от Seweryss
как вставить cut в админке для макроса %blogs20 postsList()%

Автор SuilinadРаздел Макросы UMI.CMS

Ответов: 12
Просмотров: 8636
Последний ответ 18 Сентября 2011, 22:24:11
от admin
Вывести результаты работы макроса Search?

Автор muldyРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 1817
Последний ответ 18 Сентября 2013, 17:31:39
от muldy
Кастомная фильтрация на основе существующего макроса?

Автор muldyРаздел Custom макросы

Ответов: 2
Просмотров: 2496
Последний ответ 20 Апреля 2014, 16:35:35
от Vladimir

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

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Обработка кастомного макроса
« : 12 Октября 2012, 10:01:14 »
Здравствуйте. Возникла такая проблема. Мне дали сайт, сделанный не мной и сказали разобраться..  уже несколько дней мучаю. Много для себя нового узнала.. но до истины так и не могу докопаться. Короче... есть кастомный макрос в каталоге. При вызове его, даты туров, занесенные в админке в текстовое поле сортируются и выводятся для каждого тура. Каждый тур - это объект каталога. Необходимо, чтобы те даты, которые в прошлом не выводились. Все вроде сортируется нормально. Но даты все равно выводятся старые. Например сегодня 12.10.2012.. а он выводит августовские даты. Но если в админке я зайду в редактирование объекта и нажму кнопку Сохранить, то эти даты убираются. В чем может быть проблема? почему макрос не срабатывает без пересохранения объекта?

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #1 : 12 Октября 2012, 10:42:12 »
По структуре не понятно куда-чего :-\
В какое текстое поле заносятся даты туров, как они связаны с объектами и т.п.....

Посмотрите через upage или uobject на эти даты ДО редактирования в админке и ПОСЛЕ. Посмотрите, какие изменения происходят и как они должны происходить - может быть через cron каждый час редактируется или просто при каждом запросе через time()


*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #2 : 12 Октября 2012, 11:28:15 »
у меня есть сайт.
Вот одна ветвь структуры:
Туры (Каталог)
 -Тур 1 (Объект каталога)
 -Тур 2 (Объект каталога)
 -Тур 3 (Объект каталога)

Если зайти в редактирования например Тур 1, там можноувидеть кучу полей.
Так вот. Там созадно поле Даты заездов. и на каждой строчке новая дата.
Вот например я заношу:
10.10.2012
11.10.2012
12.10.2012
13.102012
14.12.2012

Макрос выводит только эти:
13.10.2012
14.10.2012

Потому что сегодня 12.10.2012

В фильтре стоит выводить только те даты, которые еще не наступили.

Но если я 13.10.2012 зайду на сайта, то список дат так и останется такой как 12.10.2012. Т.е. 13.10.2012 не исчезнет.

Затем я захожу в админку. Опять редактирую Тур 1. Ничего не изменяю. Просто нажимаю кнопку Сохранить и выйти. Захожу на сайт и вижу что число 13.10.2012 исчезло.

Вот почему оно исчезает не само, а только при пересохранении страницы?

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #3 : 12 Октября 2012, 11:49:19 »
Может быть нужно смотреть в сторону события systemModifyElement, возникающего при редактирования...

Нужно найти где таки обрабатывается это поле и удаляются значения в зависимости от времени....

в cron.php ничего нет ?
Как-то оно должно проверять когда наступил новый день и уже не нужно выводить туры...  Хотя можно это делать при каждом вызове...
« Последнее редактирование: 12 Октября 2012, 11:51:48 от Rodogor »

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #4 : 12 Октября 2012, 12:56:00 »
Во... нашла такую штуку...
в custom_events.php:
 
 $oAddObjectListener = new umiEventListener("systemModifyElement", "catalog", "onSaveObject");
 $oAddObjectListener1 = new umiEventListener("systemCreateElement", "catalog", "onSaveObject");
 $oAddObjectListener2 = new umiEventListener("systemDeleteElement", "catalog", "onDeleteObject");
$onCronNewsRead = new umiEventListener("cron", "catalog", "deleteOldDates");
а в _custom_adm.php(кусок из всех функций):
public function deleteOldDates(){
//114 - тип данных "Дата заезда"

$sel_date = new umiSelection;
$sel_date -> addObjectType(114);

$result_date = umiSelectionsParser::runSelection($sel_date);
$objects = umiObjectsCollection::getInstance();

foreach($result_date as $obj_id){
//собираем уникальные id
$object = $objects->getObject($obj_id);
if(strtotime($object->getValue('date_start')) < time()){
$objects->delObject($obj_id);
}
}

}

пока не соображу как связать с тем, чтобы удалял каждый день... может вы быстрее меня сообразите?)

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #5 : 12 Октября 2012, 13:12:17 »
Я в двух словах объясню, подробно получится только позже. К своему позору с cron вообще никогда не работал, но тоже такая задача сейча стоит.

Итак, мы нашли функцию, которая удаляет текст. Теперь нам надо заставить её выполняться каждый день в 00.00. С часовыми поясами тоже заморочка может быть, но возьмём время сервера (ну и откорректируем на сколько он там различается по часовому поясу).

Далее нужно настроить cron для того, что бы событие срабатывало в нужное время (00.00 каждый день).

Тут уже зависит от хостинга - может быть прям коммандой задание забить, может быть через панель управления... Может быть через техподдержку хостинга, ну или если VDS то может сами...
В инете полно инфы по вопросу..

Так же нужно попутно почитать про umiCron. В двух словах, в файле cron.php описываем событие. Сервис cron выполнит файл в назначенное время.

//А ещё мне очень интересно таки как оно работает с датой туров - я понял, что дата у вас в поле текстовом забита, где каждая дата с новой строки.... А тут в коде вроде как никакой обработки такой нет.... Или тут интересно вышло, что у strtotime берёт первую строчку текста, преобразовывает ко времени ну и profit ? :)

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #6 : 12 Октября 2012, 14:28:13 »
Цитировать
Так же нужно попутно почитать про umiCron. В двух словах, в файле cron.php описываем событие. Сервис cron выполнит файл в назначенное время.
Не совсем так. Необходимые действия задаются как событие в файле custom_events.php указанием в первом параметре  umiEventListener идентификатора "cron". Алгоритм следующий:
- настроить на хостинге выполнение заданий по крону, указав в качестве скрипта cron.php в корне сайта
- крон в заданное время будет дергать этот скрипт cron.php, скрипт исполняет все события с идентификатором "cron"
В сам файл cron.php ничего писать не надо.

Как настроить cron на сервере  должно быть описано в справке хостера, чаще всего в панели управления хостингом есть соотв. пункт меню.
Для тестирования можно просто обратиться к cron.php из браузера.

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #7 : 12 Октября 2012, 14:57:37 »
А если у меня сайт пока локально? то как настроить этот планировщик?

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #8 : 12 Октября 2012, 16:24:50 »
Владимир выше написал, что просто обратившись из браузера к файлу cron.php. Если при обращение всё пошло как надо, то и через cron будет работать правильно.

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

Спасибо Владимиру за корректировку с cron.php, я не правильно описал, просто пробежался по диагонали по докам и не вчитывался...

p.s. у меня была мысль спросить насчёт переноса хостинга в самом начале, но я почему-то не спросил... на локалхосте крона нет, поэтому и не удаляются записи...
« Последнее редактирование: 12 Октября 2012, 16:28:02 от Rodogor »

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #9 : 12 Октября 2012, 17:02:48 »
я запустила
http://мой_сайт/cron.php
Получила это:
This file should be executed by cron only. Please, run it via HTTP for test only.
Notice: maximum priority level can accept values between "1" and "10", where "1" is maximum priority.

Executed event handlers:
1. news::feedsImportListener (umiEventPoint), priority = 5, not critial
2. dispatches::onAutosendDispathes (umiEventPoint), priority = 5, not critial
3. catalog::deleteOldDates (umiEventPoint), priority = 5, not critial
4. emarket::onCronSyncCurrency (umiEventPoint), priority = 5, not critial
5. config::runGarbageCollector (umiEventPoint), priority = 5, not critial

И все... ничего не произошло... даты не стерлись(((

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #10 : 12 Октября 2012, 18:16:45 »
Крон написал
Executed event handlers:
3. catalog::deleteOldDates (umiEventPoint), priority = 5, not critial

Значит, скрипт отработал и обработчик события был вызван.
Давайте тогда восстановим историю.
1) Почему сайт на локальном сервере? Он хоть когда-то работал в реальном интернете?
2) Если работал, там тоже не удалялись даты по расписанию? Смысл вопросов - это сломалось что-то или просто никогда и не работало.

Как вариант для опытов - перенесите deleteOldDates из _custom_adm.php в _custom.php или продублируйте. Посмотрите что будет с кроном.
посмотрите какие права на этот метод - ведь крон же не авторизуется и работает анонимно.

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #11 : 13 Октября 2012, 02:03:03 »
сайт реально существует в интернете... копия локально есть... мне сказали разобраться с этим локально... получится локально - перенесем в сеть изменения...
теперь в понедельник все это гляну еще раз и отпишусь чего да как)

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #12 : 13 Октября 2012, 11:15:36 »
Тогда делюсь своим опытом. Локальная версия и серверная работают по-оазному. Иногда даже очень сильно по-разному, и всегда локальная дает больше ошибок.  Я не могу утверждать, что так везде и у всех будет, но мне не везло ни разу. Поэтому имйте ввиду такую возможность: если что-то совсем не получается, возможно, это просто косяк локальной копии.

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:Обработка кастомного макроса
« Ответ #13 : 15 Октября 2012, 09:34:44 »
перенесла в custom.php и все заработало..))