Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
не работает Файловый менеджер - Некорректный ответ сервера. Данные отсутствуют

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

Ответов: 3
Просмотров: 4051
Последний ответ 30 Ноября 2018, 16:44:45
от MrUnless
как узнать id заказа (корзины) с которой работает покупатель

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

Ответов: 6
Просмотров: 5250
Последний ответ 22 Августа 2013, 22:57:57
от atach
Почему-то не работает edit-in-place для одного из полей

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

Ответов: 2
Просмотров: 3114
Последний ответ 16 Сентября 2014, 03:38:31
от Veinard
Опции товара - почему не работает код взятый с вики?

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

Ответов: 0
Просмотров: 1342
Последний ответ 09 Августа 2017, 12:07:14
от Canekt
Скрипт не работает при подключении Edit-in-Place

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

Ответов: 3
Просмотров: 3532
Последний ответ 20 Марта 2012, 12:01:52
от diii3

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

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Не работает событие активности
« : 01 Сентября 2014, 14:50:28 »
UMI.CMS Commerce
Версия системы   2.9.1
Ревизия   2215

Тип данных "новость" в "новостная лента".
Устанавлиаю Дату публикации, начала и окончания активности. Но материал в лучшем случае не скрывается, в худшем - даже не появляется. Активность включалась на RUS версии, на ENG даже это не работает.
В чём может быть причина. Утверждают, что ранее это работало. С тех пор обновлений не было и не могло быть ввиду окончания срока лицензии.

Настройки макроса: %news lastlist(/actions/,npc_index_actions,3,1,0,1)%

Контроль актуальности поставил, продублировал тамвремя снятия с публикации - вижу только,что меняется сортировка,но активность не снимается.

UPD: До этого контроль актуальности не был включен, уверяли, что работало и так. С ним на публикацию не отправляет, но иногда снимает,а иногда нет.
UPD2:Крон стоит на 59мин. Менял на шустрее, не вышло. Главное, чтоб включал новости.
« Последнее редактирование: 01 Сентября 2014, 17:39:39 от sinneren »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #1 : 01 Сентября 2014, 19:25:04 »
механизм простой.

1. по крону запускается event
$onCronActivateNews = new umiEventListener("cron", "news", "cronActivateNews");
проверьте его в файле /classes/modules/news/events.php

2. данный event выполняет функцию в файле /classes/modules/news/class.php
public function cronActivateNews() {
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('news', 'item');
$pages->where('is_active')->notequals(true);
$pages->where('begin_time')->eqless(time());
foreach ($pages as $page){
$page->setIsActive(true);
$page->commit();
}
}
Её тоже проверьте

P.S. попробуй запустить вручную cron события через http://site.ru/cron.php

Возможно, есть какой-то еще event, который возвращает fatal errore и не дает выполниться тому, что идет после него. То есть, посмотри что перед твоим event'ом и попробуй отключить эти event (просто найди их в файлах системы и закомментируй). Если при ручном запуске http://site.ru/cron.php станут активные новости? которые были выключены, но имели begin_time меньше текущего времени, значит что-то с запуском cron

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #2 : 02 Сентября 2014, 12:42:18 »
1.
	
$onCronNewsRead = new umiEventListener("cron", "news", "feedsImportListener");
$onCronActivateNews = new umiEventListener("cron", "news", "cronActivateNews");
new umiEventListener("cron", "news", "cronDeactivateNews");
2.Немного отличается
public function cronActivateNews() {
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('news', 'item');
$pages->where('is_active')->notequals(true);
$pages->where('begin_time')->eqless(time());
foreach ($pages as $page){


if(strtotime($page->getValue("end_time")) <= time()){
$page->setIsActive(false);
} else {
$page->setIsActive(true);
}

$page->commit();
}
}

public function cronDeactivateNews(){
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('news', 'item');
$pages->where('end_time')->eqless(time());

foreach ($pages as $page){
$page->setValue("test",date("h:i:s"));
$page->setIsActive(false);
$page->commit();
}
}

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #3 : 02 Сентября 2014, 12:43:37 »
Ответ ручного запуска крон. Новость не появилась.
Executed event handlers:
   1. news::cronDeactivateNews (umiEventPoint), priority = 5, not critial
   2. news::feedsImportListener (umiEventPoint), priority = 5, not critial
   3. news::cronActivateNews (umiEventPoint), priority = 5, not critial
   4. news::cronDeactivateNews (umiEventPoint), priority = 5, not critial
   5. dispatches::onAutosendDispathes (umiEventPoint), priority = 5, not critial
   6. emarket::onCronSyncCurrency (umiEventPoint), priority = 5, not critial
   7. config::runGarbageCollector (umiEventPoint), priority = 5, not critial

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #4 : 02 Сентября 2014, 13:05:19 »
Опробовал твой код активации, с режимом контроля публикаций и без. Запускал вручную. Эффекта ноль.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #5 : 02 Сентября 2014, 13:29:17 »
попробуй отрубить cron

Цитировать
1. news::cronDeactivateNews (umiEventPoint), priority = 5, not critial
   2. news::feedsImportListener (umiEventPoint), priority = 5, not critial

если они не глушат (то есть не ломают что-то), то смотри дело остается только в макросе) 

P.S. еще у тебя почему-то 2 раза запускается cronDeactivateNews , причем второй после cronActivateNews , может он его перекрывает))

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #6 : 02 Сентября 2014, 15:31:44 »
А где-то есть еще файл, где пишутся кастомные обработчики, вроде как у битрикса init.php?
В файле class.php один раз объявлена cronDeactivateNews и нигде и ничто к ней не ссылается там.
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('news', 'item');
$pages->where('end_time')->eqless(time());

foreach ($pages as $page){
$page->setValue("test",date("h:i:s"));
$page->setIsActive(false);
$page->commit();
}

Можно полный код стандартного файла получить?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #7 : 02 Сентября 2014, 15:38:23 »
у меня нет макроса cronDeactivateNews  и нет eventlistner который вызывал бы такой макрос (версия 2.9.x)

попробуйте отключить строчку
new umiEventListener("cron", "news", "cronDeactivateNews");

в файлу events.php и снова запустить cron.php

P.S. Это конечно вряд ли, но проверьте у той новости, включение которой вы ожидаете, содержимое полей begin_time и end_time. Не противоречат ли они друг другу? Если можете, приведите сюда их значение.

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #8 : 02 Сентября 2014, 15:46:57 »
Executed event handlers:
   1. news::cronDeactivateNews (umiEventPoint), priority = 5, not critial
   2. news::feedsImportListener (umiEventPoint), priority = 5, not critial
   3. news::cronActivateNews (umiEventPoint), priority = 5, not critial
   4. dispatches::onAutosendDispathes (umiEventPoint), priority = 5, not critial
   5. emarket::onCronSyncCurrency (umiEventPoint), priority = 5, not critial
   6. config::runGarbageCollector (umiEventPoint), priority = 5, not critial

<?php
$onCronNewsRead = new umiEventListener("cron", "news", "feedsImportListener");
$onCronActivateNews = new umiEventListener("cron", "news", "cronActivateNews");
//new umiEventListener("cron", "news", "cronDeactivateNews");
?>

Дата публикации - 2014-09-02 15:38:00
Дата начала активности - 2014-09-02 15:46:00
Дата окончания активности - 2014-09-02 15:49:00

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #9 : 02 Сентября 2014, 15:54:34 »
Добавление новости, может что тут
<?php
public function addNewsItem() {
$hierarchy = umiHierarchy::getInstance();
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();
$objectTypes = umiObjectTypesCollection::getInstance();
$cmsController = cmsController::getInstance();

$parent_id = (int) getRequest('param0');
$object_type_id = (int) getRequest('param1');
$title = htmlspecialchars(trim(getRequest('title')));

$parentElement = $hierarchy->getElement($parent_id);
$tpl_id = $parentElement->getTplId();
$domain_id = $parentElement->getDomainId();
$lang_id = $parentElement->getLangId();

$hierarchy_type_id = $hierarchyTypes->getTypeByName("news", "item")->getId();
if(!$object_type_id) {
$object_type_id = $objectTypes->getBaseType("news", "item");
}

$object_type = $objectTypes->getType($object_type_id);
if($object_type->getHierarchyTypeId() != $hierarchy_type_id) {
$this->errorNewMessage("Object type and hierarchy type doesn't match");
$this->errorPanic();
}

$element_id = $hierarchy->addElement($parent_id, $hierarchy_type_id, $title, $title, $object_type_id, $domain_id, $lang_id, $tpl_id);

$users = $cmsController->getModule("users");
if($users instanceof def_module) {
$users->setDefaultPermissions($element_id);
}

$element = $hierarchy->getElement($element_id, true);

$element->setIsActive(true);
$element->setIsVisible(false);
$element->setName($title);

$element->commit();
$parentElement->setUpdateTime(time());
$parentElement->commit();

if($is_xslt) {
return Array("node:result" => "ok");
} else {
$this->redirect($referer_url);
}
}
?>

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #10 : 02 Сентября 2014, 16:05:44 »
есть еще custom_events.php с
new umiEventListener("cron", "news", "cronDeactivateNews");
может потому дважды в отчете крона идет

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #11 : 02 Сентября 2014, 16:09:31 »
Добавление новости, может что тут
<?php
public function addNewsItem() {
$hierarchy = umiHierarchy::getInstance();
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();
$objectTypes = umiObjectTypesCollection::getInstance();
$cmsController = cmsController::getInstance();

$parent_id = (int) getRequest('param0');
$object_type_id = (int) getRequest('param1');
$title = htmlspecialchars(trim(getRequest('title')));

$parentElement = $hierarchy->getElement($parent_id);
$tpl_id = $parentElement->getTplId();
$domain_id = $parentElement->getDomainId();
$lang_id = $parentElement->getLangId();

$hierarchy_type_id = $hierarchyTypes->getTypeByName("news", "item")->getId();
if(!$object_type_id) {
$object_type_id = $objectTypes->getBaseType("news", "item");
}

$object_type = $objectTypes->getType($object_type_id);
if($object_type->getHierarchyTypeId() != $hierarchy_type_id) {
$this->errorNewMessage("Object type and hierarchy type doesn't match");
$this->errorPanic();
}

$element_id = $hierarchy->addElement($parent_id, $hierarchy_type_id, $title, $title, $object_type_id, $domain_id, $lang_id, $tpl_id);

$users = $cmsController->getModule("users");
if($users instanceof def_module) {
$users->setDefaultPermissions($element_id);
}

$element = $hierarchy->getElement($element_id, true);

$element->setIsActive(true);
$element->setIsVisible(false);
$element->setName($title);

$element->commit();
$parentElement->setUpdateTime(time());
$parentElement->commit();

if($is_xslt) {
return Array("node:result" => "ok");
} else {
$this->redirect($referer_url);
}
}
?>

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

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

<?php
$onCronNewsRead = new umiEventListener("cron", "news", "feedsImportListener");
$onCronActivateNews = new umiEventListener("cron", "news", "cronActivateNews");
//new umiEventListener("cron", "news", "cronDeactivateNews");
?>

Дата публикации - 2014-09-02 15:38:00
Дата начала активности - 2014-09-02 15:46:00
Дата окончания активности - 2014-09-02 15:49:00

я правильно понял, что вы вначале заккоментировали event в файле events.php (код которого вы привели 2 блоком)
потом вы запустили cron.php (код которого вы привели 1 блоком)

при этом строчка
Цитировать
1. news::cronDeactivateNews (umiEventPoint), priority = 5, not critial
показывает что у вас где-то еще срабатывает event деактивации новости.

Если яправильно понял ваше сообщение, то поищите по другим модулям в файлах events.php или custom_event.php

Второй момент, у вас поставлен очень маленький диапазон времени между begin и end time, а что есть time() в функции активации новости, возвращает время сервера, у которого другая time_zone (особенно если хостинг за раничный). Проверьте, что возвращает вам php функция time(). Может стоить скорректировать begin_time?

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #12 : 02 Сентября 2014, 16:14:21 »
Так... по порядку. Код добавления я привел просто кстати, чтоб посмотерть может там какая лишняя обработка.

Сначала я закомментировал umiEventListener,потом вручную запустил крон.пхп.

Строчка news::cronDeactivateNews исчезла,когда закомментировал строку в файле custom_event.php

*

sinneren

  • *
  • 21
  • +0/-0
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #13 : 02 Сентября 2014, 16:15:52 »
Текущее время сервера 16:14:54 (1409660094). Реальное совпадает.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Не работает событие активности
« Ответ #14 : 02 Сентября 2014, 16:17:51 »
просто ради интереса, запустите udata://news/cronActivateNews на вашем сайте. чтобы без всякого крона убедиться работает ли активация новости, а потом уже копать в сторону крона или events