форум vBSupport.ru > vBulletin > Вопрос — Ответ
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
liner
Эксперт
 
liner's Avatar
Default Удаление хака из стиля
1

Хочу облегчить стиль (снизить на грузку на отдельный стиль) путем удаления из него некоторых хаков.
Как правильно удалять хак из шаблонов стиля?

Например, хак "Кто посетил наш форум сегодня". Нужно сделать так, чтобы он не загружался в одном стиле, и загружался в другом.
Нашел его код в шаблоне FORUMHOME.

Вопрос: если грохнуть код частично, не полностью, скрипт будет продолжать грузиться, только с ошибкой, т.е. мы не добьемся цели?
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
Cybermama
Эксперт
 
Cybermama's Avatar
Default
0

я думаю что если просто из шаблона удалить - ошибок не должно быть, но хак будет работать, просто не будет выводить результат - это надо в коде хака или плагина в начале ставить условие if ($styleid!='номер исключаемого стиля') {выполнение кода хака} чтобы он при этом стиле вообще не выполнялся... правда если хак не в плагине - то наверное переменную $styleid надо глобально объявлять... а может и как-то по другому её брать...
А вообще идея стиля с отключенными примочками мне нравится...
 
 
liner
Эксперт
 
liner's Avatar
Default
0

усложняем примочку
а если нужно отключить не все?
М.б. написать такой хак типа
хак 1 => работает / отключить в стиль 1 => работает / отключить стиль 2
хак 2 => работает / отключить в стиль 1 => работает / отключить стиль 2
хак 3 => работает / отключить в стиль 1 => работает / отключить стиль 2

задача хака - именно прекращать выполнение => нагрузку на конкретный стиль?
 
 
kerk
k0t
 
kerk's Avatar
Default
0

вряд ли получится сделать универсальный хак, т.к. ID стилей у всех разные
они добавляются/удаляются и идентификатор меняется
если только попробовать как то собрать инфо обо всех установленных модулях и выдрать из этой инфы ID каждого, то можно привязать настройки к каждому стилю (исключая мастер стиль, естессно =))
 
 
liner
Эксперт
 
liner's Avatar
Default
0

выборочно почистить шаблоны стилей не удалось - сносит хак сразу из всех стилей.

liner добавил 22.09.2009 в 11:57
Quote:
Originally Posted by kerk View Post
вряд ли получится сделать универсальный хак, т.к. ID стилей у всех разные
они добавляются/удаляются и идентификатор меняется
если только попробовать как то собрать инфо обо всех установленных модулях и выдрать из этой инфы ID каждого, то можно привязать настройки к каждому стилю (исключая мастер стиль, естессно =))
не у всех стили удаляются - меняются
Кто на стиле vBulletin всю жизнь сидит, а кто-то пару за несколько лет добавит.
м.б. попробуете?

+ еще просьбы

1. хак отключения хаков (извините за тавтологию) из стилей
2. хак вывода в стиле только определенных категорий, разделов. Например стиль "технический" - видишь только технические темы. Перешел в стиль "поболтать" - видишь болталку. Если, конечно имеет смысл это делать.
Хак игнорирования разделов работает сразу на все стили, вот в чем проблема.

liner добавил 22.09.2009 в 12:07
Апдейт.
Получилось удалить из одного стиля, оставив в другом.

Last edited by liner : 09-22-2009 at 01:07 PM. Reason: Добавлено сообщение
 
 
kerk
k0t
 
kerk's Avatar
Default
1

Quote:
Originally Posted by liner View Post
2. хак вывода в стиле только определенных категорий, разделов. Например стиль "технический" - видишь только технические темы. Перешел в стиль "поболтать" - видишь болталку. Если, конечно имеет смысл это делать.
это делается стандартными средствами в настройках разделов => выбор стиля раздела
можно хоть для каждого сделать индивидуальный стиль
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
2

Quote:
Originally Posted by liner View Post
хак отключения хаков (извините за тавтологию) из стилей
это возможно, но достаточно проблематично. если есть несколько продуктов, каждый из которых вешает свой модуль на, скажем, хук "cache_templates", то все эти модули воблой на самом деле собираются в один php-код, который хранится в datastore и выбирается оттуда для выполнения. т.о. требуется изменить систему сохранения модулей и экспорта продуктов, чтобы при сохранении/добавлении модулей в datastore записывался не только сам текст модуля, но и команды проверки необходимости его выполнения в зависимости от текущего стиля. имхо, оптимальнее будет не ставить толпу продуктов, вместо того, чтобы писать еще один для их опционального поведения на разных стилях.

Ghost добавил 22.09.2009 в 12:29
посмотрел сейчас init.php -- проблема уже в том, что хук 'init_startup' вызывается раньше, чем определяется значение переменной $styleid... т.е. как минимум модули на одном хуке будут выполняться независимо от стиля.

Last edited by Ghost : 09-22-2009 at 01:29 PM. Reason: Добавлено сообщение
 
 
liner
Эксперт
 
liner's Avatar
Default
0

Оффтоп

аскеты сидят в лайт-версии, PDA или просто текстовом стиле. А я не хочу, например.
Возникает конфликт.
 
 
Ghost
Гуру
 
Ghost's Avatar
Default
3

продукт такой писать не буду, но расскажу как можно это сделать.

итак, первое, что требуется сделать, это создать настройку. пусть это будет настройка с именем "product_in_style", к которой можно будет обратиться "$vbulletin->options['product_in_style']" и содержимым следующего типа:
Code:
стиль1:продукт1,продукт2
стиль2:продукт1,продукт3,продукт4
стиль3:продукт2
т.е. здесь мы в каждой строке указываем через двоеточие ID стиля и список через запятую идентификаторов продуктов, модули которых нужно в этом стиле отключить.

далее в файле "includes/functions.php" создаем функцию, которая бы проверяла, можно ли запускать модули указанного продукта на текущем стиле. выглядеть эта функция должна как-то так:
PHP Code:
function productInStyle($product)
{
    global 
$vbulletin$styleid;        // подключаем объект $vbulletin и переменную $styleid
    
$vboptions =& $vbulletin->options;    // короткий алиас для опций

    
$return true;    // по умолчанию функция возвращает "истина", т.е. запускать можно

    
if (is_int($styleid) AND isset($vboptions['product_in_style']))
    { 
// если $styleid -- целое число и существует опция отключения продуктов в стилях
        
$pis =& $vboptions['product_in_style'];    // создаем короткий алиас для данной опции

        
if (!is_array($pis))
        { 
// обрабатываем опцию, если она еще не обработана, т.е. не является массивом
            
$temp = array();
            foreach (
explode(PHP_EOL$pis) as $styleinfo)
            {
                list(
$style$products) = explode(':'trim($styleinfo));
                
$temp[intval($style)] = explode(','$products);
            }
            
$pis $temp;
        }

        if (isset(
$pis[$styleid]) AND in_array($product$pis[$styleid]))
        { 
// если для текущего стиля имеются отключаемые продукты и переданный в функцию продукт входит в их число
            
$return false;    // меняем возвращаемое значение на "ложь"
        
}
    }

    return 
$return;

остается последнее -- добавить проверку указанной функции перед выполнением каждого модуля. для этого придется править файл "includes/class_hook.php". ищем в этом файле следующие строки:
PHP Code:
        $plugins $dbobject->query_read("
            SELECT plugin.*,
                IF(product.productid IS NULL, 0, 1) AS foundproduct,
                IF(plugin.product = 'vbulletin', 1, product.active) AS productactive
            FROM " 
TABLE_PREFIX "plugin AS plugin
            LEFT JOIN " 
TABLE_PREFIX "product AS product ON(product.productid = plugin.product)
            WHERE plugin.active = 1
                AND plugin." 
"phpcode <> ''
            ORDER BY plugin.executionorder ASC
        "
);
        while (
$plugin $dbobject->fetch_array($plugins))
        {
            if (
$plugin['foundproduct'] AND !$plugin['productactive'])
            {
                continue;
            }
            else if (!empty(
$adminlocations["$plugin[hookname]"]))
            {
                
$admincode["$plugin[hookname]"] .= "$plugin[phpcode]\r\n";
            }
            else
            {
                
$code["$plugin[hookname]"] .= "$plugin[phpcode]\r\n";
            }
        }
        
$dbobject->free_result($plugins); 
этот код выбирает все модули и помещает их в массив, слепляя несколько модулей на одном хуке в один код. здесь перед строкой
PHP Code:
            $code["$plugin[hookname]"] .= "$plugin[phpcode]\r\n"
вставляем еще одну строчку:
PHP Code:
            $plugin['phpcode'] = 'if(productInStyle(\'' $plugin['product'] . '\')){' $plugin['phpcode'] . '}'
которая как раз и добавит требуемую проверку.

вот как-то так... можешь по этим инструкциям попробовать накидать свой продукт.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 07:35 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.