parser

faqfaq
авторыавторы
документациядокументация

в действиив действии
куда говоритькуда говорить
жаргонжаргон

скачатьскачать

примерыпримеры
форумфорум

Графический счетчик.

Рассмотрена работа операторов ^gif_template, ^save, ^unlink.

Автор — Кирилл Березин

 @inc_host
 # Увеличиваем значение хостов сегодня
 	^var[hosts_today;+;1]
 	^save[hosts_today.cfg;^var[hosts_today]]
 @/inc_host
 
 
 @time
 # Разница между ^var[curr_time] и временем возвращаемым ^stat, вычисляется так: 4*3600 = 14400
 	^var[offset;14400]
 
 # Время в секундах, прошедшее с 1970  по 2000 года, вычисляется так: (31*365 + 8)*24*3600 = 978307200
 	^var[seconds;978307200]
 
 # Время в секундах, прошедшее с 1 января 1970 года с 00:00:00 до текущего времени
 	^eval[^var[seconds] + (^date[%j] - 1)*24*3600 + ^date[%H]*3600 + ^date[%M]*60 + ^date[%S] - ^var[offset]]
 @/time
 
 @time_today
 # Время в секундах, прошедшее сегодня с 00:00:00 и до текущего момента
 	^eval[^date[%H]*3600 + ^date[%M]*60 + ^date[%S]]
 @/time_today
 
 @check_first_visit_today
 # Проверяем первый ли это заход сегодня
 ^if[^eval[^macro[time] - ^stat[mtime;_hosts_today.cfg]] > ^macro[time_today];
 	^unlink[_hosts_today.cfg]
 ]
 
 ^if[^eval[^macro[time] - ^stat[mtime;hits_today.count]] > ^macro[time_today];
 	^unlink[hits_today.count]
 ]
 @/check_first_visit_today
 
 @counter_GIF
 ^macro[check_first_visit_today]
 
 ^context[host;
 	^ifdef[^-f[_hosts_today.cfg];
 		^load[hosts_today.cfg]
 		^var[hosts_today;^item[0]]
 	;
 		^save[hosts_today.cfg;0]
 		^var[hosts_today;0]
 	]
 ]
 
 
 # Проверяем уникальный ли это заход сегодня
 ^ifdef[^cookie[counter_cookie];
 	^eq[^cookie[counter_cookie];^date[%d.%m.%Y];;
 		^cookie[counter_cookie;^date[%d.%m.%Y]]
 		^macro[inc_host]			
 	]
 ;
 	^cookie[counter_cookie;^date[%d.%m.%Y]]
 	^macro[inc_host]
 ]
 
 # Увеличиваем значения хитов (всего/сегодня)
 ^var[hits_all;^counter[hits_all]]
 ^var[hits_today;^counter[hits_today]]
 
 ^macro_new[font;digits.gif
 8
  0123456789
 ]
 
 # Вычисляем координаты вывода надписи (значение общего количества хитов) на изображение
 ^var[x;^eval[88-3-^length[^var[hits_all]]*7]]
 ^var[y;3]
 
 # Загружаем изображение из файла bg.gif и наносим на него значение hits_all, результат сохраняем во временном файле tmp.gif
 ^gif_template[bg.gif;
 7	^var[x]	^var[y]	^var[hits_all]
 ;tmp.gif]
 
 # Вычисляем координаты вывода надписи (значение количества хитов сегодня) на изображение
 ^var[x;^eval[88-3-^length[^var[hits_today]]*7]]
 ^var[y;14]
 
 # Загружаем изображение из файла tmp.gif и наносим на него значение hits_today, результат сохраняем во временном файле tmp1.gif
 ^gif_template[tmp.gif;
 7	^var[x]	^var[y]	^var[hits_today]
 ;tmp1.gif]
 
 # Вычисляем координаты вывода надписи (значение количества хостов сегодня) на изображение
 ^var[x;^eval[88-3-^length[^var[hosts_today]]*7]]
 ^var[y;22]
 
 # Загружаем изображение из файла tmp1.gif и наносим на него значение hosts_today. В результате получаем изображение со всеми тремя показаниями счетчика  - файл counter.gif
 ^gif_template[tmp1.gif;
 7	^var[x]	^var[y]	^var[hosts_today]
 ;counter.gif]
 
 # Стираем временные (промежуточные) файлы
 ^unlink[tmp.gif]
 ^unlink[tmp1.gif]
 
 # Выводим полученное изображение на страницу
 <img src="counter.gif" width=88 height=31 border=0 alt="Counter_GIF">
 @/counter_GIF
 
 @main[]
 	^macro[counter_GIF]
 @/main

Результат работы макроса:
Counter_GIF

E-mail: mailbox@parser.ruCopyright © 1997-2001 Студия Артемия Лебедева