[SemSem] Visitor Panel

[SemSem] Visitor Panel 1.0.2

Нет прав для скачивания

Skaiman

Проверенные
Сообщения
18,246
Решения
227
Реакции
33,767
Баллы
21,375
Семен Семеныч добавил(а) новый ресурс:

[SemSem] Visitor Panel - Новый виджет панели посетителя

Собрал в плагин :) Панель посетителя с кнопкой на платное повышение и прогресс баром, показывающем сколько есть сообщений/реакций и сколько осталось до следующей группы.
Думаю вопросов возникнет много, так как настраивать прогресс бары надо самим, предугадать какие группы есть и критерии их повышений не могу :) Пытался сделать удобнее, без ковыряния в шаблонах, вынесены в настройки.
Имеются настройки стиля.

Узнать больше об этом ресурсе...

Кое что упустил в настройках стиля, но это вероятно в новой версии, если конечно надо будет обновлять :)
 
Не совсем.
Думаю вопросов возникнет много, так как настраивать прогресс бары надо самим, предугадать какие группы есть и критерии их повышений не могу :)
Система повышений работает через определенную таблицу. Т.е для повышения используется сущность: UserGroupPromotion
Там же содержатся и критерии для повышения. Только вот стоит учесть минусы этого виджета, что повышаться может по критериям и от количества дней и не только. Поэтому делать виджет нужно который распарсил user_criteria и построил бы по ней повышения.
Как движок ищет:
PHP:
public function findUserGroupPromotionsForList()
    {
        return $this->finder('XF:UserGroupPromotion')->order('title');
    }
Как движок обрабатывает и сравнивает повышения:
PHP:
public function updatePromotionsForUser(\XF\Entity\User $user, $userGroupPromotionLogs = null, $userGroupPromotions = null)
    {
        if ($userGroupPromotionLogs === null)
        {
            $userGroupPromotionLogs = $this->getUserGroupPromotionLogsForUser($user->user_id);
        }

        if ($userGroupPromotions === null)
        {
            $userGroupPromotions = $this->getActiveUserGroupPromotions();
        }

        $changes = 0;

        foreach ($userGroupPromotions AS $userGroupPromotion)
        {
            if (isset($userGroupPromotionLogs[$userGroupPromotion->promotion_id]))
            {
                $skip = false;
                switch ($userGroupPromotionLogs[$userGroupPromotion->promotion_id]->promotion_state)
                {
                    case 'manual': // has it, don't take it away
                    case 'disabled': // never give it
                        $skip = true;
                }
                if ($skip)
                {
                    continue;
                }
                $hasPromotion = true;
            }
            else
            {
                $hasPromotion = false;
            }

            $userCriteria = $this->app()->criteria('XF:User', $userGroupPromotion->user_criteria);
            $userCriteria->setMatchOnEmpty(false);
            if ($userCriteria->isMatched($user))
            {
                if (!$hasPromotion)
                {
                    $userGroupPromotion->promote($user);
                    $changes++;
                }
            }
            else if ($hasPromotion)
            {
                $userGroupPromotion->demote($user);
                $changes++;
            }
        }

        return $changes;
    }
Вот так разбирает критерии для повышения.
Да и за подобный жс по рукам бить надо.
 
Последнее редактирование:
Я когда-то давно занимался разработкой виджета, который как раз парсил user_criteria и выводил, что нужно для повышения. Но в один прекрасный момент мне стало лень.
Надо найти, где оно лежит, и мб допилить.
 
535345334.PNG
Версия xenforo v2.0.1.2
 
Семен Семеныч обновил(а) ресурс [SemSem] Visitor Panel новой записью:

Обновление до версии 1.0.2

  • Добавил в настройках стиля изменения размера аватара
  • Добавил в настройки стиля выбор вида кнопки платного повышения, кнопкой или ссылкой
  • Залил goalProgress.js локально

Узнать больше об этом обновлении...
 
Почему прогресс-бар не обновляется? Пользователь переходит в след. группу, заполняет прогресс бар, а вместо того, чтобы он обновился до следующего,то есть нового прогресс-бара, начинает продолжать заполняться старый.
 
area15, потому что там надо настроить прогресс бары по группам, в описании написано, в настройках тоже.
 
  • Мне нравится
Реакции: Hope
Семен Семеныч , добрый день. Прошу помочь разобраться.
Screenshot_1.jpg
Код:
<xf:if is="$xf.visitor.isMemberOf(12) AND !in_array($xf.visitor.display_style_group_id, $xf.options.ss_visitorpanel_group)">
    <div class="ss-progress-group">
        <div class="progress-group verified-reaction"></div>
        <div class="progress-group verified-count"></div>
    </div>
</xf:if>   
<xf:if is="$xf.visitor.isMemberOf(8)">
    <div class="ss-progress-group">
        <div class="progress-group adjective-reaction"></div>
        <div class="progress-group adjective-count"></div>
    </div>
</xf:if>
<xf:if is="$xf.visitor.isMemberOf(11)">
    <div class="ss-progress-group">
        <div class="progress-group adjective-reaction"></div>
        <div class="progress-group adjective-count"></div>
    </div>
</xf:if>
<xf:if is="$xf.visitor.isMemberOf(13)">
    <div class="ss-progress-group">
        <div class="progress-group adjective-reaction"></div>
        <div class="progress-group adjective-count"></div>
    </div>
</xf:if>

Код:
// Повышение до группы развивающийся 12
$(document).ready(function() {
    $('.verified-reaction').goalProgress({
        goalAmount: 1,
        currentAmount: {$xf.visitor.reaction_score|number},
        textAfter: '/10'
    });
});
$(document).ready(function() {
    $('.verified-count').goalProgress({
        goalAmount: 1,
        currentAmount: {$xf.visitor.message_count|number},
        textAfter: '/10'
    });
});
// Повышение до опытный 8
$(document).ready(function() {
    $('.adjective-reaction').goalProgress({
        goalAmount: 10,
        currentAmount: {$xf.visitor.reaction_score|number},
        textAfter: '/25'
    });
});
$(document).ready(function() {
    $('.adjective-count').goalProgress({
        goalAmount: 10,
        currentAmount: {$xf.visitor.message_count|number},
        textAfter: '/25'
    });
});
// Знаток 11
$(document).ready(function() {
    $('.adjective-reaction').goalProgress({
        goalAmount: 25,
        currentAmount: {$xf.visitor.reaction_score|number},
        textAfter: '/25'
    });
});
$(document).ready(function() {
    $('.adjective-count').goalProgress({
        goalAmount: 50,
        currentAmount: {$xf.visitor.message_count|number},
        textAfter: '/50'
    });
});
// Эксперт 13
$(document).ready(function() {
    $('.adjective-reaction').goalProgress({
        goalAmount: 50,
        currentAmount: {$xf.visitor.reaction_score|number},
        textAfter: '/50'
    });
});
$(document).ready(function() {
    $('.adjective-count').goalProgress({
        goalAmount: 100,
        currentAmount: {$xf.visitor.message_count|number},
        textAfter: '/100'
    });
});
 
Классы должны быть индивидуальны, ты просто скопировал код для второй группы, а не присвоил свои классы.

потом значения goalAmount и textAfter, одинаковые, начальное указано переменной для визитера

Блин, не, это не для того что бы просто копировать, первое значение с условиями для группы зарегистрированных, писал в описании.
 
потом значения goalAmount и textAfter, одинаковые, начальное указано переменной для визитера
Это понял, исправил.
Классы должны быть индивидуальны, ты просто скопировал код для второй группы, а не присвоил свои классы.
Добавлять в шаблон ss_visitorpanel.less по аналогии, только поменяв название классов?
 
Добавлять в шаблон ss_visitorpanel.less по аналогии, только поменяв название классов?
какой less, нет, аааааааа брось

GrafMishka, подожди немного, напишу как сделать приблизительно

GrafMishka, смотри, в блок для HTML
HTML:
<!-- Для пользователя из группы зарегистрированных, повышение до развивающийся -->
<xf:if is="$xf.visitor.isMemberOf(2) AND !in_array($xf.visitor.display_style_group_id, $xf.options.ss_visitorpanel_group)">
    <div class="ss-progress-group">
        <div class="progress-group developing-reaction"></div>
        <div class="progress-group developing-count"></div>
    </div>
</xf:if>
<!-- Для пользователя из группы развивающийся, повышение до опытный -->
<xf:if is="$xf.visitor.isMemberOf(12)">
    <div class="ss-progress-group">
        <div class="progress-group experimental-reaction"></div>
        <div class="progress-group experimental-count"></div>
    </div>
</xf:if>
<!-- Для пользователя из группы опытный, повышение до знаток -->
<xf:if is="$xf.visitor.isMemberOf(8)">
    <div class="ss-progress-group">
        <div class="progress-group adept-reaction"></div>
        <div class="progress-group adept-count"></div>
    </div>
</xf:if>
<!-- Для пользователя из группы знаток, повышение до эксперт -->
<xf:if is="$xf.visitor.isMemberOf(11)">
    <div class="ss-progress-group">
        <div class="progress-group expert-reaction"></div>
        <div class="progress-group expert-count"></div>
    </div>
</xf:if>
в блок для JS
JavaScript:
// Повышение до группы развивающийся
// Реакции
$(document).ready(function() {
    $('.developing-reaction').goalProgress({
        goalAmount: 1,
        currentAmount: {$xf.visitor.reaction_score|number},
        textAfter: '/1'
    });
});
// Сообщения
$(document).ready(function() {
    $('.developing-count').goalProgress({
        goalAmount: 10,
        currentAmount: {$xf.visitor.message_count|number},
        textAfter: '/10'
    });
});
// Повышение до группы опытный
// Реакции
$(document).ready(function() {
    $('.experimental-reaction').goalProgress({
        goalAmount: 25,
        currentAmount: {$xf.visitor.reaction_score|number},
        textAfter: '/25'
    });
});
// Сообщения
$(document).ready(function() {
    $('.experimental-count').goalProgress({
        goalAmount: 10,
        currentAmount: {$xf.visitor.message_count|number},
        textAfter: '/10'
    });
});
// Повышение до группы знаток
// Реакции
$(document).ready(function() {
    $('.adept-reaction').goalProgress({
        goalAmount: 50,
        currentAmount: {$xf.visitor.reaction_score|number},
        textAfter: '/50'
    });
});
// Сообщения
$(document).ready(function() {
    $('.adept-count').goalProgress({
        goalAmount: 25,
        currentAmount: {$xf.visitor.message_count|number},
        textAfter: '/25'
    });
});
// Повышение до группы эксперт
// Реакции
$(document).ready(function() {
    $('.expert-reaction').goalProgress({
        goalAmount: 100,
        currentAmount: {$xf.visitor.reaction_score|number},
        textAfter: '/100'
    });
});
// Сообщения
$(document).ready(function() {
    $('.expert-count').goalProgress({
        goalAmount: 50,
        currentAmount: {$xf.visitor.message_count|number},
        textAfter: '/50'
    });
});
группу эксперт, впрочем как и все, кроме зарегистрированных, можно сделать в исключения
Мог не правильно проставить реакции и сообщения, проверь
 
Последнее редактирование модератором:
  • Мне нравится
Реакции: Hope
Приветствую, может я недоглядел чего, но на всякий случай спрошу. Можно ли добавить размещение более одной кастомной кнопки. Чтобы сверху не плодить свою модификацию. Сейчас я просто дописал свою и получилось что то типо

2019-10-22_01-15-07.png

Если есть возможность допилить, чтобы в настройках можно было прописывать, сколько угодно кнопок?
 
Более одной не предусмотрено :) да и та делается вместо трофеев. Как то не думал, что надо размещать столько информации в этом блоке, да и делалось в основном из за прогресс баров для групп :). Пока не планировал обновлений, так как мыслей по этому поводу нет :) пусть будет модификация, чем плохо :)
 
Приветствую, подскажите пожалуйста, при вот такой прогрузке страницы, как на скриншоте, ЛейзиЛоад что-ли (не знаю даже как назвать)
Безымянный.png
Появляется вот такая проблема, двоиться/троиться/и т.д.
1.png
После нормального обновления страницы по F5, все стает на свои места.
Это что-то я не так настроил, или все же плагин так и должен работать?
И можно ли коим то образом исправить такой недостаток?
 
Последнее редактирование:
Это что-то я не так настроил, или все же плагин так и должен работать?
И можно ли коим то образом исправить такой недостаток?
:) трудно ответить, может не так настроил, может что то влияет из того что установлено, но все же плагин так не должен работать :)
 
Пропала Панель прогресса , в чем проблема может быть?
Удалял полностью плагин с файлами, переустанавливал
 

Вложения

  • 1578769300666.png
    1578769300666.png
    8.4 KB · Просмотры: 43
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу