Была раньше проблема (видимо так и не решена) - когда заполнены и классовый метод OnNewHour и метод объекта ClockChime.OnNewHour - один из них почему-то не хотел работать...
Решалось тем что весь код переносился в 1 место...я всё давным давно перенес в классовый, и удалил к фигам метод объекта ClockChime. Ваш модуль его "воскресил", и вписал туда код обновления =D.
Ну и собственно по-этому же снова перестал отрабатывать классовый (видимо так и не решена проблема =( )
В системе существует замечательное событие HOURLY которое совершается раз в час.
Модуль на него подписывается 1 строчкой в функции install
Чтобы отписаться при удалении в uninstall соответственно
Код: Выделить всё
unsubscribeFromEvent($this->name, 'HOURLY');
Ну и в основном модуле код, который вы запихиваете в OnNewHour
Код: Выделить всё
function processSubscription($event_name, $details='') {
if ($event_name=='HOURLY') {
//тут ваш код, который будет выполняться ежечасно (из OnNewHour прямо можете скопировать)
}
}
Сразу решится 3 проблемы:
- засирание OnNewHour (когда там много всего - система туповато отрабатывает)
- не потребуется вообще никакого кода в методах -> пользователь их не сломает
- при удалении модуля он сам отпишется от события, следов не останется.
По поводу объектов/методов - система (из панели по крайней мере вручную) запрещает создавать одинаковые объекты. Так что такого не должно быть...
Предлагаю, как минимум что нить по-оригинальнее для объекта избрать. ExchangeRate_info к примеру...такой объект врят ли у кого в системе найдется до вашего модуля)))
Цбр - тему искать лень, вот скрипт, который в полне себе работает.
Код: Выделить всё
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));
if (!$file){
DebMes("CBR error");
return;
}
// USD
$xml = $file->xpath("//Valute[@ID='R01235']");
$valute = strval($xml[0]->Value);
$this->setProperty('USD', round(str_replace(",",".",$valute)*100)/100);
// EUR
$xml = $file->xpath("//Valute[@ID='R01239']");
$valute = strval($xml[0]->Value);
$this->setProperty('EUR', round(str_replace(",",".",$valute)*100)/100);
$this->setProperty("uptime",date("d m Y H:i:s",time()));