Страница 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&param2=value2 -- сохранения события с параметрами