Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Статистика аттачей на главной странице

Подниму тему. Подскажите, а как вывести в статистике главной страницы кол-во залитых на форум аттачей? Не могу отыскать по ключу...

Рекомендованные сообщения

Статистика аттачей не введется.

  • Автор

Я думал, раз у вложений есть id, то и можно как-то вывести их статистику. Спасибо.

У всех сущностей в бд есть id, на статистику он не влияет. Это уникальный идентификатор записи в таблице. Статистика вложений форумом не ведется, чтобы ее вывести нужно подсчитать количество строк в самой таблице - это +1 sql запрос.

Если интересен сам запрос:

 

Всего аттачей: {parse expression="( $row = $this->DB->buildAndFetch( array('select' => 'COUNT(*) as count', 'from' => 'attachments') ) ) ? $row['count'] : 0"}

При желание результат можно кешировать и обновлять раз в 30 минут, час.

 

<php>
if( $this->settings['show_totals'] )
{
if( ! isset( $stats['total_attachments'] ) OR $stats['update_attachments'] < ( IPS_UNIX_TIME_NOW - 1 * 60 * 60 ) )
{
	$row = $this->DB->buildAndFetch( array('select' => 'COUNT(*) as count', 'from' => 'attachments') );

	$stats['total_attachments'] = $row['count'];
	$this->caches['stats']['total_attachments']  = $stats['total_attachments'];
	$this->caches['stats']['update_attachments'] = IPS_UNIX_TIME_NOW;

	$this->cache->setCache( 'stats', $this->caches['stats'], array( 'array' => 1 ) );
}
}
</php>

Всего аттачей: {$stats['total_attachments']}

 

Шаблон Список форумов -> boardIndexTemplate

  • Автор

Решил задачу немного иначе.

В boardIndexTemplate сделал вот так:

 

<li class='clear'>
			<span
class='value'>{$this->caches['stats']['total_attachments']}</span>
			{$this->lang->words['total_attachments']}
		</li>

, предварительно в Языки добавив строку:

 

Приложение: Форумы
Набор слов: public_boards
Ключ: total_attachments
Текст по умолчанию: Аттачей

 

Вот только при прикреплении аттачей, порядковый номер 30000 с небольшим, а в статистике на главной 28212... странно... :huh:

  • Автор

Может потому что удалял некоторые вложения?

Вот только при прикреплении аттачей, порядковый номер 30000 с небольшим, а в статистике на главной 28212... странно...

Почитайте про автоинкремент.

Решил задачу немного иначе.

Я бы вообще перенес php в задачу, предварительно создав ее в планировщике. Дальше, если будет нужно, можно добавлять другие статистики.

  • Автор

@newbie, хм, а ведь верно говорите. Благодарствую!

Решил задачу немного иначе.

{$this->caches['stats']['total_attachments']}

Никак не могу понять как именно иначе, если используете тот же самый ключ кеша, а значит и пример который я приводил выше. То как оформили блок в шаблоне это уже дело вкуса и верстки шаблона.

  • Автор

Ну я собственно так и понял.

Только вот остался один вопрос!

Создал я файл в /admin/applications/forums/tasks/total_attachments.php и создал задачу с подобным путём и представленным выше php-кодом в планировщике. Но задача не запускается. Сижу копаю, пытаюсь разобраться в чем дело. Может неправильный пишу ключ в задаче?

Изменено пользователем Одмин

Ну я собственно так и понял.

Вы не правильно поняли. Никакую задачу создавать не нужно. Просто вставляете указанный php код в шаблоне, и в нужном месте выводите статистику аттачей, он сам будет обновлять кеш раз в один час.

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

  • Автор

@siv1987, о, теперь вроде всё работает! Сделал так:

 

<php>
if( $this->settings['show_totals'] )
{
   if( ! isset( $stats['total_attachments'] ) OR $stats['update_attachments'] < ( IPS_UNIX_TIME_NOW - 1 * 60 * 60 ) )
   {
       $row = $this->DB->buildAndFetch( array('select' => 'COUNT(*) as count', 'from' => 'attachments') );

       $stats['total_attachments'] = $row['count'];
       $this->caches['stats']['total_attachments']  = $stats['total_attachments'];
       $this->caches['stats']['update_attachments'] = IPS_UNIX_TIME_NOW;

       $this->cache->setCache( 'stats', $this->caches['stats'], array( 'array' => 1 ) );
   }
}
</php>
<li class='clear'>
			<span
class='value'>{$this->caches['stats']['total_attachments']}</span>
			{$this->lang->words['total_attachments']}
		</li>

Создал я файл в /admin/applications/forums/tasks/total_attachments.php и создал задачу с подобным путём и представленным выше php-кодом в планировщике. Но задача не запускается. Сижу копаю, пытаюсь разобраться в чем дело. Может неправильный пишу ключ в задаче?

Если надумаете, то https://www.invisionpower.com/support/guides/_/advanced-and-developers/application/tasks-r202

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.