Русская поддержка phpFox 3
Русская поддержка phpFox 3

Статистика записей текущего дня не учитывает часовой пояс

Давно заметил, что статистика записей за текущий день, что отображается в Админ панели, считает начало дня, не учитывая часовой пояс. Это потому что, во всех методах 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))
	    {
	   
...

Как обновлять счётчик записей

Для точного пересчёта счётчика каких либо записей, буду использовать функцию: updateCount библиотеки: database.

Допустим, нам необходимо пересчитать количество комментариев у фотографии. Делаем так:
$this->database()->updateCount(
	'comment',
	'parent_id = 0 AND type_id = \'photo\' AND item_id = ' . (int) $photo['photo_id'],
	'total_comment',
	'photo',
	'photo_id = ' . (int) $photo['photo_id']
);

Функция имеет пять параметров:
  1. Название таблицы, в которой будет пересчитывать записи.
  2. Строка запроса: По каким параметрам считать записи.
  3. Поле: Счётчик, который необходимо обновить.
  4. Название таблицы, где будет обновлён счётчик.
  5. Строка запроса: Счётчик какой записи обновлять.

Тут будет пересчёт всех существующих записей, с указанными параметрами выборки, после чего обновится указанное поле.

В phpFox есть ещё один вариант обновления счётчика, который просто добавляет единицу, либо отнимает единицу, от количества записей. Допустим, задача та же, обновления счётчика комментов у фотографии....

Замена hreh="URL": vanity_url контролёра pages.add

После того, как мы меняем URL своей страницы, в настройках страницы, ссылка "На страницу" может привести нас на 404 ошибку.

Решение: Открыть файл: "module/pages/include/component/ajax/ajax.class.php", найти метод changeUrl, в нём перед строчкой:
					$this->alert(phpfox::getPhrase('pages.successfully_updated_your_pages_url'), phpfox::getPhrase('pages.url_updated'), 300, 150, true);

Добавить:
					$this->call('$(\'.page_section_menu_link:first\').attr(\'href\', \'' . phpfox::getService('pages')->getUrl($this->get('id'), $vals['title'], $newTitle) . '\');');

Внимание: Названия переменных могут отличаться от Ваших, меняйте на свои....

Как установить в контроллёре другой контроллёр

Данная строчка кода, внутри одного контроллёра, включает другой контроллёр, что будет указан:
phpfox::getLib('module')->setController('module.controller');

В phpFox довольно часто можно встретить включение контроллёра в контроллёре, например, для вывода ошибки 404:
		if ($error)
		{
			return phpfox::getLib('module')->setController('error.404');
		}

В случае вывода ошибки 404, перед строкой включения контроллёра необходимо писать return (Как в примере выше), чтобы не продолжать выполнять код текущего контроллёра. Если есть необходимость выполнения кода сразу в двух контроллёрах, return не нужен....

Как передавать параметры в блок или контроллёр

Из контроллёра можно передавать параметры в блок или другой контроллёр. Для этого в движок введены два метода:
  • setParam() - Служит для установки / передачи параметров.
  • getParam() - Служит для получения установленных параметров.

Допустим нам необходимо передать массив, каких либо данных, пишем в контроллёре (Из которого передаём):
		$this->setParam('paramArray', [
				'key-1' => 'val-1',
				'key-2' => 'val-2'
			]
		);

В блоке или контроллёре, что должен принять данный массив, пишем следующее:
		$paramArray = $this->getParam('paramArray');

Теперь переменная $paramArray содержит в себе массив, что мы передали с другого контролёра....