XF 2.2 Помощь в доработки плагина

Версия XenForo
2.2.4

Skaiman

Проверенные
Сообщения
17,610
Решения
201
Реакции
32,931
Баллы
18,475
Хочу добавить функции в плагин [SVG] Forum Statistics Below Nodes, конкретно, блок статистики всех ресурсов форума, всех медиа галереи и всех статей AMS. Так то вывести, вывел:
PHP:
<?php

namespace SVG\ForumStatisticsBelowNodes\Widget;

use XF\Widget\AbstractWidget;

class Forumstatistics extends AbstractWidget
{
    public function render()
    {
        $db = \XF::db();
        $resourcesStatistics = $db->fetchOne("
        SELECT COUNT(resource_id)
        FROM xf_rm_resource
        ");       
        $viewParams = [
            'forumStatistics' => $this->app->forumStatistics,
            'articleStatistics' => $this->app->simpleCache()['XenAddons/AMS']['statisticsCache'],
            'resourcesStatistics' => $resourcesStatistics,
            'galleryStatistics' => $this->app->simpleCache()->XFMG->statisticsCache
        ];     
        return $this->renderer('svg_fsbn', $viewParams);
    }

    public function getOptionsTemplate()
    {
        return null;
    }
}
Но в этом случае, если не установлен какой то из плагинов, Article Management System, XenForo Media Gallery или XenForo Resource Manager, будет ошибка.
Есть настройка включения блоков (svg_fsbn_block_enable), чекбоксы, с помощью шаблона:
Код:
<xf:checkboxrow rowclass="{$rowClass}"
    label="{$titleHtml}"
    hint="{$hintHtml}"
    explain="{$property.description}">

    <xf:option name="{$formBaseKey}[threads]" selected="{$property.property_value.threads}">
        {{ phrase('threads') }}
    </xf:option>
    <xf:option name="{$formBaseKey}[messages]" selected="{$property.property_value.messages}">
        {{ phrase('messages') }}
    </xf:option>
    <xf:option name="{$formBaseKey}[articles]" selected="{$property.property_value.articles}">
        {{ phrase('xa_ams_articles') }}
    </xf:option>
    <xf:option name="{$formBaseKey}[resources]" selected="{$property.property_value.resources}">
        {{ phrase('xfrm_resources') }}
    </xf:option>
    <xf:option name="{$formBaseKey}[media]" selected="{$property.property_value.media}">
        {{ phrase('xfmg_media') }}
    </xf:option>
    <xf:option name="{$formBaseKey}[members]" selected="{$property.property_value.members}">
        {{ phrase('members') }}
    </xf:option>
    <xf:option name="{$formBaseKey}[latest_member]" selected="{$property.property_value.latest_member}">
        {{ phrase('latest_member') }}
    </xf:option>
</xf:checkboxrow>
Прошу помочь привязать настройку к php файлу виджета, что бы если выключен блок, то и обращение из файла не будет.
 
Решение
PHP:
<?php

namespace SVG\ForumStatisticsBelowNodes\Widget;

use XF;
use XF\Widget\AbstractWidget;

class Forumstatistics extends AbstractWidget
{
    public function render()
    {
        $enabledBlocks = XF::options()->svg_fsbn_block_enable;

        if (
                $enabledBlocks['threads'] && $enabledBlocks['messages']
                && $enabledBlocks['members'] && $enabledBlocks['latest_member']
        )
        {
            $viewParams['forumStatistics'] = $this->app->forumStatistics;
        }
        if (XF::isAddOnActive('XFRM') && $enabledBlocks['resources'])
        {
            $viewParams['resourceCount'] = $this->app->simpleCache()['SVG/ForumStatisticsBelowNodes']->statisticsCache;
        }
        if...
OFFTOP

Atikin, Я же без претензий ))) Просто в его первом посте именно стандартная стата визуально переделанная.Насчёт логики, у всех разная ))) Как по мне вполне логично вывести всю статистику в одном месте, тем более выполняется проверка на наличие плагинов, есть плагин, дополнилась стата, нет плагина, осталась в дефолте.

 
DimmmCom, смысл в том, что если вы записали в тот кеш данные, то будьте добры их удалять из него при деинсталляциию. Анинсталлера вы не предоставили, следовательно, делаю вывод - вы на него забили. 4 байта конечно погоды не сделают, но немного некрасиво получается.
 
Всем спасибо, сделал так:
PHP:
<?php

namespace SVG\ForumStatisticsBelowNodes\Widget;

use XF;
use XF\Widget\AbstractWidget;

class Forumstatistics extends AbstractWidget
{
    public function render()
    {
        if (XF::isAddOnActive('XFRM'))
        {   
            $db = \XF::db();
            $resourcesStatistics = $db->fetchOne("
            SELECT COUNT(resource_id)
            FROM xf_rm_resource
            ");
        }           
        {
            $viewParams['forumStatistics'] = $this->app->forumStatistics;
        }
        if (XF::isAddOnActive('XFRM'))
        {
            $viewParams['resourcesStatistics'] = $resourcesStatistics;
        }
        if (XF::isAddOnActive('XFMG'))
        {
            $viewParams['galleryStatistics'] = $this->app->simpleCache()->XFMG->statisticsCache;
        }
        if (XF::isAddOnActive('XenAddons/AMS'))
        {
            $viewParams['articleStatistics'] = $this->app->simpleCache()['XenAddons/AMS']->statisticsCache;
        }
      
        return $this->renderer('svg_fsbn', $viewParams);
    }
}
отказался от настроек, оставил только активные плагины, но вот если в настройках включат блок :)
2021-04-12_193347.png
то конечно будет ошибка :) но написано же :)
 
Нет все равно ошибка темплейтера, если нет плагинов. Лан надо отвлечься, надоело :)
Не правильно вызываешь метод XF::isAddOnActive
Обратный слэш потерял \XF::isAddOnActive
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу