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

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

Для точного пересчёта счётчика каких либо записей, буду использовать функцию: 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 есть ещё один вариант обновления счётчика, который просто добавляет единицу, либо отнимает единицу, от количества записей. Допустим, задача та же, обновления счётчика комментов у фотографии....

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

Данная строчка кода, внутри одного контроллёра, включает другой контроллёр, что будет указан:
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 содержит в себе массив, что мы передали с другого контролёра....

Как выводить ошибку 404 (Not Found)

Чтобы сообщить пользователю, что страницы или файла не существует, то есть отдать ему 404 ошибку, мы будем использовать родной метод setController, библиотеки module. Вот так:
phpfox::getLib('module')->setController('error.404')

Допустим мы получаем какие либо данные, и в случае, если нужная запись не найдена, выводим 404 ошибку:
		if ($editID = $this->request()->getInt('id'))
		{
			if (!($row = phpfox::getService('ad')->getAd($editID)))
			{
				// В случае ненайденной записи выводим 404 ошибку
				return phpfox::getLib('module')->setController('error.404');
			}

			// Тут код при успешно найденной записи
		}

URL страницы останется именно таким, каким на него перешли. А если надо отправить пользователя по адресу: "site/error.404/", делаем так:
phpfox::getLib('url')->send('error.404');

На мой взгляд, первый вариант лучше....

Модульное окно для вложенных изображений (ThickBox)

Оказывается, не все вложенные картинки, по клику открываются в модульном окне, по размеру самого файла (ThickBox), например, превью для опроса. Изначально, по клику на превью опроса, в ленте новостей, открывается новая вкладка со страницей опросом. Мне захотелось, чтобы в ленте новостей, по клику на превью, открывалось окошко с фото опроса. Ниже расскажу, как я это сделал.

Открываю: "module/poll/include/service/callback.class.php", нахожу метод getActivityFeed, где в массив $return добавляю строку:
'no_target_blank' => true,

Получается так:
		$return = [
			'feed_title'       => $row['question'],
			'feed_link'        => phpfox::permalink('poll', $row['poll_id']),
			'feed_content'     => !empty($row['description']) ? $row['description'] : null,
			'total_comment'    => $row['total_comment'],
			'feed_total_like'  => $row['total_like'],
			'feed_is_liked'    => $row['is_liked'],
			'feed_icon'        => phpfox::getLib('image.helper')->display(['theme' => 'module/poll.png',
...