VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Хочу облегчить стиль (снизить на грузку на отдельный стиль) путем удаления из него некоторых хаков.
Как правильно удалять хак из шаблонов стиля?
Например, хак "Кто посетил наш форум сегодня". Нужно сделать так, чтобы он не загружался в одном стиле, и загружался в другом.
Нашел его код в шаблоне FORUMHOME.
Вопрос: если грохнуть код частично, не полностью, скрипт будет продолжать грузиться, только с ошибкой, т.е. мы не добьемся цели?
я думаю что если просто из шаблона удалить - ошибок не должно быть, но хак будет работать, просто не будет выводить результат - это надо в коде хака или плагина в начале ставить условие if ($styleid!='номер исключаемого стиля') {выполнение кода хака} чтобы он при этом стиле вообще не выполнялся... правда если хак не в плагине - то наверное переменную $styleid надо глобально объявлять... а может и как-то по другому её брать...
А вообще идея стиля с отключенными примочками мне нравится...
@liner
Эксперт
Join Date: Dec 2008
Location: clubvolvo.ru
Награды в конкурсах:
Posts: 3,985
Версия vB: 4.2.х
Пол:
Reputation:
Expert 2939
Репутация в разделе: 665
Аллея Звезд
0
усложняем примочку
а если нужно отключить не все?
М.б. написать такой хак типа
хак 1 => работает / отключить в стиль 1 => работает / отключить стиль 2
хак 2 => работает / отключить в стиль 1 => работает / отключить стиль 2
хак 3 => работает / отключить в стиль 1 => работает / отключить стиль 2
задача хака - именно прекращать выполнение => нагрузку на конкретный стиль?
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,712
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20257
Репутация в разделе: 8432
0
вряд ли получится сделать универсальный хак, т.к. ID стилей у всех разные
они добавляются/удаляются и идентификатор меняется
если только попробовать как то собрать инфо обо всех установленных модулях и выдрать из этой инфы ID каждого, то можно привязать настройки к каждому стилю (исключая мастер стиль, естессно =))
@liner
Эксперт
Join Date: Dec 2008
Location: clubvolvo.ru
Награды в конкурсах:
Posts: 3,985
Версия vB: 4.2.х
Пол:
Reputation:
Expert 2939
Репутация в разделе: 665
Аллея Звезд
0
выборочно почистить шаблоны стилей не удалось - сносит хак сразу из всех стилей.
liner добавил 22.09.2009 в 11:57
Quote:
Originally Posted by kerk
вряд ли получится сделать универсальный хак, т.к. 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
Join Date: May 2005
Location: localhost
Posts: 28,712
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20257
Репутация в разделе: 8432
1
Quote:
Originally Posted by liner
2. хак вывода в стиле только определенных категорий, разделов. Например стиль "технический" - видишь только технические темы. Перешел в стиль "поболтать" - видишь болталку. Если, конечно имеет смысл это делать.
это делается стандартными средствами в настройках разделов => выбор стиля раздела
можно хоть для каждого сделать индивидуальный стиль
@Ghost
Гуру
Join Date: Feb 2008
Posts: 983
Версия vB: 3.8.1
Reputation:
Гуру 1011
Репутация в разделе: 893
2
Quote:
Originally Posted by liner
хак отключения хаков (извините за тавтологию) из стилей
это возможно, но достаточно проблематично. если есть несколько продуктов, каждый из которых вешает свой модуль на, скажем, хук "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: Добавлено сообщение
оптимальнее будет не ставить толпу продуктов, вместо того, чтобы писать еще один для их опционального поведения на разных стилях.
Не разделяю Вашу точку зрения. Поясню, почему.
во-первых, что есть толпа продуктов?
Учитывая, что лично я считаю себя работником на службе пользователей, а не наоборот, "пользуйтесь МОИМ форумом и не вякайте", vB вообще должен выходить с предустановленными всеми типами хаков, опционально их отключая, оставляя минимум.
Во-вторых, исходя из моего понимания форума и разноплановых требований пользователей, их условно можно разделить на
- тех, у кого с каналами все в порядке и
- тех, у кого все плохо с каналами
- тех, кто привык к функциональности фотосайтов, социальных сейтей и Яндекс-Мэйл-Гуглей
- аскетов, считающих, что форум vB красив и самодостаточен.
Если следовать Вашей логике рассуждений, то мы все - заложники.
аскеты сидят в лайт-версии, PDA или просто текстовом стиле. А я не хочу, например.
Возникает конфликт.
@Ghost
Гуру
Join Date: Feb 2008
Posts: 983
Версия vB: 3.8.1
Reputation:
Гуру 1011
Репутация в разделе: 893
3
продукт такой писать не буду, но расскажу как можно это сделать.
итак, первое, что требуется сделать, это создать настройку. пусть это будет настройка с именем "product_in_style", к которой можно будет обратиться "$vbulletin->options['product_in_style']" и содержимым следующего типа:
т.е. здесь мы в каждой строке указываем через двоеточие 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);
этот код выбирает все модули и помещает их в массив, слепляя несколько модулей на одном хуке в один код. здесь перед строкой