getSiteStatsForAdmins() (Файлы модулей: "callback.class.php"), по умолчанию нацелено на часовой пояс 0:
$today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));Из за этого статистика может быть неточной.
У меня наконец то дошли руки до этого и сейчас расскажу, как я добился, чтобы статистика записей учитывала часовой пояс.
Для определения времени с учётом часового пояса пользователя, в PHPFox есть метод:
convertToGmt(), в библиотеке date (Файл: "include/library/phpfox/date/date.class.php"). Однако функция может работать только с типом переменной int, то есть принимает только цифру (Метка времени). А я хочу ей отправлять строку midnight. Для этого я слегка правлю метод convertToGmt(), добавив в начало метода:
// Конвертирование строки в Unix-timestamp (Например: 'midnight')
if (!is_numeric($time))
{
$time = strtotime($time);
}С этим разобрались! Теперь в функцию можно "посылать" строки вида:
midnight, today, yesterday, и так далее.Следующая задача - это в файлах "callback.class.php", каждого модуля, что участвует в статистике, заменить:
$today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));На:
$today = phpfox::getLib('date')->convertToGmt('midnight');Например, модуль blog: файл: "module/blog/include/service/callback.class.php":
public function getSiteStatsForAdmins()
{
$today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
return [
'phrase' => phpfox::getPhrase('blog.blogs'),
'value' => $this->database()
->select('COUNT(*)')
->from($this->database()->table('blog'))
->where('time_stamp >= ' . $today)
->execute('getSlaveField')
];
}Меняем на:
public function getSiteStatsForAdmins()
{
$today = phpfox::getLib('date')->convertToGmt('midnight');
return [
'phrase' => phpfox::getPhrase('blog.blogs'),
'value' => $this->database()
->select('COUNT(*)')
->from($this->database()->table('blog'))
->where('time_stamp >= ' . $today)
->execute('getSlaveField')
];
}Заменив во всех модулях код, статистика будет отображать верно. На этом работа по исправлению часового пояса в статистике записей закончена.
Кстати, в мой движок не учитывал статистику добавленных ссылок и страниц. Исправил. Добавил метод статистики добавленных ссылок (Файл: "module/link/include/service/callback.class.php"):
public function getSiteStatsForAdmins()
{
$today = phpfox::getLib('date')->convertToGmt('midnight');
return [
'phrase' => phpfox::getPhrase('link.links'),
'value' => $this->database()
->select('COUNT(*)')
->from($this->database()->table('link'))
->where('time_stamp >= ' . $today)
->execute('getSlaveField')
];
}И количество созданных страниц (Файл: "module/pages/include/service/callback.class.php"):
public function getSiteStatsForAdmins()
{
$today = phpfox::getLib('date')->convertToGmt('midnight');
return [
'phrase' => phpfox::getPhrase('pages.pages'),
'value' => $this->database()
->select('COUNT(*)')
->from($this->database()->table('pages'))
->where('time_stamp >= ' . $today)
->execute('getSlaveField')
];
}После добавления данного кода, необходимо почистить кэш движка.
Обращаю ваше внимание, что название моих переменных и методов/функций может отличаться от вашего. Если будите следовать моим правкам исправляйте на свои названия, чтобы избежать ошибок. Либо пришлите свою функцию мне, в своём комментарии, я её исправлю учитывая ваши названия.