Страница 1 из 2
Временные переменные
Добавлено: Пн дек 08, 2014 10:02 pm
Bagir
При работе кода нужно где то временно сохранить нужные записи. Потом, при следующих запусках этого кода, или вообще другого кода, нужно их прочитать и стереть.
Другими словами, при выполнении кода нужно создать переменную с указанным именем, а потом получить ее значение, если она существует, и уничтожить (либо обнулить) ее.
Таких переменных мне требуется много и с разными уникальными именами. Думал припахать сюда registerEvent, и в детали писать свои значения. Но как потом прочитать эти детали? Я нашел только функцию registeredEventTime чтобы получить время. Есть ли способ получить детали, или придется за ними слазать в базу данных?
А может кроме Event есть еще кармашек?
Re: Временные переменные
Добавлено: Пн дек 08, 2014 10:36 pm
Bagir
Пока что выбрал вариант с registerEvent($eventName, $details='мои детали', $expire_in=1); Создаю событие сроком на 1 день. Для моей задачи этого достаточно. Пишу в него нужные данные, а потом мне потребуется получить эти данные по имени события. Для этого напишу функцию registeredEventDetails($eventName) по аналогии с registeredEventTime($eventName). И еще registeredEventErase($eventName)
Если я сбился с пути истинного и ушел в дебри дремучие, пожалуйста направьте на дорогу правильную )))
Re: Временные переменные
Добавлено: Пн дек 08, 2014 11:18 pm
sergejey
На самом деле, работа с событиями как-то недописаной выглядит

указанные функции будут вполне к месту и я внесу их в общую ветку, как только будут написаны.
Re: Временные переменные
Добавлено: Пн дек 08, 2014 11:23 pm
Bagir
Вот набросок для получения деталей. Работает, куда он денется. Вот только надо подумать, может сделать одну общую функцию, которая будет получать все одним массивом, а не только детали или время. Пока что для эксперимента с временными переменными я остановился на этом варианте.
Код: Выделить всё
// Получить детали события по его имени
function registeredEventDetails($eventName) {
$even=SQLSelectOne("SELECT * FROM events WHERE EVENT_NAME='".$eventName."'");
if (is_array ($even )) {
return $even['DETAILS'];
} else {
return false;
}
}
Сейчас проверю его в своей задаче. По ходу дела будет видно на сколько он удобен.
Re: Временные переменные
Добавлено: Вт дек 09, 2014 3:03 am
Bagir
Все вполне удобно. Из полезного у событий я нашел не так много данных, чтобы получать их массивом. Время уже есть, и не хватало разве что деталей. Так что registeredEventDetails($eventName) вполне достаточно. Если добавлять ее в штат, то может стоит разве что подумать над строчкой return false; Мне показалось так будет удобно. Главное , чтобы функция вела себя так же как и остальные. Я использовал SQLSelectOne() для подстраховки. Выборка идет по Имени. А оно не может повториться.
Еще пригодится функция удаления. Поменять в запросе SELECT на DELETE несложно, но SQLSelectOne() как бы тут не кстати. Как лучше?
Re: Временные переменные
Добавлено: Пт сен 30, 2016 1:57 am
xor
Ещё бы хорошо в комплект функций для Ивентов добавить проверялку времени существования.
Очень удобно
Код: Выделить всё
//возвращает EXPIRE как timestamp
//ex: date('Y-m-d H:i:s',registeredEventExpire('myEvent'))
function registeredEventExpire($eventName){
$even=SQLSelectOne("SELECT UNIX_TIMESTAMP(EXPIRE) t FROM events WHERE EVENT_NAME='".$eventName."'");
if (is_array ($even )) {
return $even['EXPIRE'];
} else {
return false;
}
}
// Удалить событие по его имени
function registeredEventDelete($eventName) {
$fn = SQLExec("DELETE FROM events WHERE EVENT_NAME='".$eventName."'");
return $fn;
}
ЗЫ. Кто не знает, Expired задается в днях, соответственнно, если нужен интервал меньше, нужно указывать долю от суток.
10 минут --> 1/24/6=0,0069444444444444
Код: Выделить всё
registerEvent($eventName, $details='',0.0069);
Re: Временные переменные
Добавлено: Пт фев 16, 2018 11:31 am
Vovix
sergejey писал(а):На самом деле, работа с событиями как-то недописаной выглядит

указанные функции будут вполне к месту и я внесу их в общую ветку, как только будут написаны.
Сергей, наберусь наглости напомнить!
... и функции уже написаны выше, уважаемыми
xor и
Bagir
А именно:
к настоящему времени в системе есть функции (имеющие отношения к Event по имени) -
registerevent
registeredeventtime
subscribetoevent - не знаю(предполагаю тока) что делает!?
unsubscribefromevent - не знаю(предполагаю тока) что делает!?
И не хватает:
registeredEventDetails, registeredEventExpire и registeredEventDelete
хотя возможно две имеющиеся, но не имеющие описания, в какой-то степени могут быть использованы
Re: Временные переменные
Добавлено: Пт фев 16, 2018 11:37 am
nick7zmail
Vovix писал(а):
subscribetoevent - не знаю(предполагаю тока) что делает!?
unsubscribefromevent - не знаю(предполагаю тока) что делает!?
хотя возможно две имеющиеся но имеющие описания в какой-то степени могут быть использованы
Эти функции работают только для модулей. Это подписка и отписка на разные ивэнты (HOURLY, SAY) модулей. В модуле в свою очередь есть функция (processSubscription вроде, или как то так), вызываемая при любых ивэнтах, и в неё передаётся имя ивэнта.
Re: Временные переменные
Добавлено: Пт фев 16, 2018 11:51 am
Vovix
nick7zmail писал(а):Vovix писал(а):
subscribetoevent - не знаю(предполагаю тока) что делает!?
unsubscribefromevent - не знаю(предполагаю тока) что делает!?
хотя возможно две имеющиеся но имеющие описания в какой-то степени могут быть использованы
Эти функции работают только для модулей. Это подписка и отписка на разные ивэнты (HOURLY, SAY) модулей. В модуле в свою очередь есть функция (processSubscription вроде, или как то так), вызываемая при любых ивэнтах, и в неё передаётся имя ивэнта.
Тем более наверно нужны эти (
собрал их вместе, это не моё творчество):
Код: Выделить всё
/**
* Комплект из трех функций работы с событиями Event
*
* @param string $eventName имя события (Event'а)
* @return
* 1) registeredEventDetails ($eventName)
* $even['DETAILS'] || Boolean: false
* 2) registeredEventExpire ($eventName)
* $even['EXPIRE'] || Boolean: false
* 3) registeredEventDelete($eventName)
* результат попытки удаления из таблицы бызы данных
*/
// Получить детали события по его имени
function registeredEventDetails($eventName) {
$even=SQLSelectOne("SELECT * FROM events WHERE EVENT_NAME='".$eventName."'");
if (is_array ($even )) {
return $even['DETAILS'];
} else {
return false;
}
}
//возвращает EXPIRE как timestamp
//ex: date('Y-m-d H:i:s',registeredEventExpire('myEvent'))
function registeredEventExpire($eventName){
$even=SQLSelectOne("SELECT UNIX_TIMESTAMP(EXPIRE) t FROM events WHERE EVENT_NAME='".$eventName."'");
if (is_array ($even )) {
return $even['EXPIRE'];
} else {
return false;
}
}
// Удалить событие по его имени
function registeredEventDelete($eventName) {
$fn = SQLExec("DELETE FROM events WHERE EVENT_NAME='".$eventName."'");
return $fn;
}
Re: Временные переменные
Добавлено: Вс фев 18, 2018 9:31 am
sergejey
Тут небольшая путаница возникает с событиями... Просто их два типа. Один тип, это системная шина событий, которая используюется модулями и ядром для инициализации каких-либо действий (функции subscribeToEvent, processSubscriptions и обработчики в модулях типа propertySetHandle). Второй тип событий никак не связан с первым и представляет собой универсальный приёмник и обработчик пользовательских событий. В админке это раздел События и указанные в предыдущем сообщении функции. В модуле событий, кстати, можно связать их поступление с каким-нибудь объектом, вывести в виде дерева, а для отправки событий можно использовать API вида:
Код: Выделить всё
/api/events/<PATH/TO/EVENT>?param1=value1¶m2=value2 -- сохранения события с параметрами