Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

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

Опубликовано:

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

Опубликовано:
  • Автор

Я думал, раз у вложений есть 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

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

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.