форум vBSupport.ru > vBulletin > vBulletin 3.8.x > Вопросы по vBulletin 3.8
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'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
DJ Kukstyler
Модератор темы
 
DJ Kukstyler's Avatar
Lightbulb Справочник проблем с решениями и доработок
7

Всем привет, друзья.

Решил создать данную тему, да бы указать встретившиеся мне проблемы и их решения.
Я сам из сферы IT, в прошлом программист, но не php и вообще не Веб. По-этому сразу хочу сказать, что некоторые решения могут быть хоть и рабочими, но не элегантными или методически неправильными.
Далеко не одну из проблем с которыми я сталкивался (решения которых опубликую), решили уважаемыми Гуру данного форума, которым ещё раз хочу выразить свою благодарность. Другие решения нашёл сам, методом тыка и разобравшись малёк в языке php.

Если Админы не против, данная тема мне видится как некий "сжатый справочник" по конкретным проблемам и их конкретным решениям, без преамбул и долгих описаний. Что бы если кому понадобилось, смог придти сюда и сразу найти ответ.

У меня версия 3.8.7, по-этому весь материал от меня будет про 3-ую линейку, но скорее всего не для всех версий. Хотя недавно вручную сделал откат с 4.2.5 на 3.8.7, о чём может быть тоже отпишусь по-подробнее, тема интересная.


Всех желающих внести свой вклад - милости просим!



И так, поехали.

Проблема: Rebuild Thumbnails/Human Verification Manager Тут их 2, а решение одно!

Проблема 1: Админка -> "Rebuild Thumbnails" (воссоздание миниатюр) - ошибка при создании миниатюры с картинками типа JPEG
Проблема 2: Админка -> "Human Verification Manager" - при установке опции библиотеки GD картинки не отображаются

Решение:
B файле class_image.php ищем:
PHP Code:
imagejpeg($image''$quality); 
Меняем на:
PHP Code:
imagejpeg($imagenull$quality); 



Проблема: Как скрыть что-то от гостей/Как показать что-то только гостям Не буду говорить о том, как найти кусок кода, который хотим скрыть или показать.

Для того, что бы скрыть что-то от гостей, но показывать всем группам зарегистрированный пользователей:

1. Ищем в шаблоне блок кода который хотим скрыть. Например, хотим скрыть от гостей следующий блок кода:
HTML Code:
<div class="smallfont"><strong>Что такое терапевт? 1024 Гигапевта.</strong></div>
2. Обёртываем данный блок кода в следующий IF:
HTML Code:
<if condition="$show['member']">
    <div class="smallfont"><strong>Что такое терапевт? 1024 Гигапевта.</strong></div>
</if>

Для того, что бы показать что-то только гостям (незарегистрированным пользователям), механизм тот же, только меняется условие:

1. Ищем в шаблоне блок кода который хотим показать только гостям. Например следующий блок кода:
HTML Code:
<div class="smallfont"><strong>Что такое терапевт? 1024 Гигапевта.</strong></div>
2. Обёртываем данный блок кода в следующий IF:
HTML Code:
<if condition="$show['guest']">
    <div class="smallfont"><strong>Что такое терапевт? 1024 Гигапевта.</strong></div>
</if>
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
kerk
k0t
 
kerk's Avatar
Default
2

ну отлично =)
ждем продолжения...
 
 
DJ Kukstyler
Модератор темы
 
DJ Kukstyler's Avatar
Default
3

Проблема: в некоторых случаях (поиск, перемещение/удаление темы и т.д.) появляется сообщение об ошибке, текст которого "Your submission could not be processed because a security token was missing." (невозможно сделать то-то т.к. не хватает security token).
Данная проблема встречается (как я заметил) только в нестандартных стилях.

Решение:
1. Включаем отображение названий шаблонов в HTML коде: Админка -> Общие настройки -> Add Template Name in HTML Comments
2. Заходим на страничку где вылетает ошибка, и включаем Дебаг утилиту браузера (обычно клавиша F12, если нет, Гуглить для вашего браузера).
3. В утилите, нажимаем на кнопку "курсор в квадрате", затем тыкаем на кнопку/ссылку кликая по которым вылетает ошибка
4. Скролим повыше пока не дойдём до названия шблона (формат комментарий в HTML, то есть: <!-- название шаблона -->. Находим, например <!-- postbit_legacy -->
5. Через Админку, заходим в шаблон, ищем кнопку/ссылку кликая по которым вылетает ошибка. Оно всегда находится в блоке кода form
6. Найдя соответствующий блок кода "form", в нём ищем <input type="hidden" name="s" value="$session[sessionhash]" />
7. Сразу после добавляем <input type="hidden" name="securitytoken" value="$bbuserinfo[securitytoken]" />
8. Сохраняем отредактированный шаблон, перезагружаем страничку и проверяем

Last edited by DJ Kukstyler : 02-02-2025 at 02:00 AM. Reason: Добавлено сообщение
 
 
DJ Kukstyler
Модератор темы
 
DJ Kukstyler's Avatar
Default
6

Проблема: установленный хак не отображается.
Решение: приведённое решение НЕ является универсальным, ибо каждый хак может иметь собственные косяки, несовместимости с вашей версией движка или другими хаками. Но, первым делом надо проверить следующие причины.

1. У многих хаков есть функционал по правам, то есть не все могут всё. И далеко не всегда права на доступ к тому, что делает хак, активированы по-умолчанию. Особенно, если у вас ID групп нестандартные.
2. Плагины хаков, обычно, автоматически вставляются в существующий код движка одним из следующих способов:
А. Находя в коде некую цепь символов являющихся частью кода шаблона (это может быть HTML комментарий, блок кода или название PHP переменной)
Б. Используя механизм "хуков" (~крючков).


И так надо пройтись по каждому вышеуказанному пунтку.

1. Это самое простое, первым делом проверяем права: Аминка -> Группы пользователей -> Администратор групп. Выбираем сначала группу Админов (по-умолчанию id=6). Скролим вниз и смотрим, есть ли там новый подраздел по правам новоустановленного хака и и активированы ли права. Если нет - активируем, сохраняем и проверяем заработало ли.

2. Если предыдущий пункт проблему не решил, то пора переходить к анализу кода.
Итак. Админка-> Продукты и Плагны -> Администратор плагинов. Ищем название продукта, далее в списке плагинов, ищем интересующий нас плагин...
Как ищем? Ответ неоднозначный: по названию плагина хотя частенько у кодеров всех мастей патологический дебилизм по называнию модулей, переменных и т.д..., если название не особо говорящее, то смотрим колонку Nº2, где указаны некие "метки", то есть места куда подключается данный плагин.

Например наш хак показывает нечто в сообщениях (постах), значит нас интересует postbit (отображение постов). Значит "метка" должна содержать строку "postbit".
Каждый плагин подключается по одной метке. Но меток много, и насколько я понял они связаны с событиями. Поэтому на тот же postbit есть несколько меток (postbit_display_start, postbit_display_complete и т.д.). Но это для общего понимания, в данном случае не суть.

Найдя интересующий нас плагин, редактируем (заходим) данный плагин, скролим вниз. Смотрим последние строчки кода плагина. Тут может быть 2 варианта:
2.А. Если последняя (или одна из последних) строчка содержит $vbulletin->templatecache['НАЗВАНИЕ_ШАБЛОНА'] = str_replace то хак ищет какой-то текст, и заменяет его на него-же + код плагина.
В данном случае, надо убедиться, что в шаблоне указанном в $vbulletin->templatecache действительно присуствует строка, которую он ищет. Если её там нет, то проблема найдена.

Тут либо добавить искомый текст в шаблон, либо заменить искомый текст на какой-либо что действительно есть в шаблоне.
Кстати тем же способом можно переместить отображение функционал хака (кнопки, поля и т.д.).

2.Б Если же последняя (или одна из последних) строчка содержит eval('$template_hook[какойтотекст] .= " ' . fetch_template( ... это значит, что в шаблоне должно тоже присутствовать $template_hook[какойтотекст]. Если нет, то получается то же что и в предыдущем пункте - плагин не находит куда подключиться. В таком случае заходим в шаблон и вставляем там где надо точь в точь как в плагине: $template_hook[какойтотекст]


Есть ещё одно: убедитесь, что плагин не цепляется там, где код сидит в условии (IF), а если да, то что данное условие удовлетворяется (действительно).. Иногда так бывает. А если оно так, а условие недействительно, то и хак не отображается.
Пример: у вас отключены аватарки, а хак вставляет свой код сразу после аватарки. Получается код хака оказывается тоже в кондиции "показываем ли аватарки".


Накатал, однако, тексту....

Last edited by DJ Kukstyler : 02-03-2025 at 03:52 PM.
 
 
Лис
Эксперт
 
Лис's Avatar
Default
2

Иногда хак не отображается, потому что он не в той кодировке.
Такое вот часто у новичков бывает.
Поменять кодировку можно в любом текстовом редакторе.
Неплохо бы сперва почитать о кодировках.

@DJ Kukstyler, спасибо, интересно. Продолжайте.
 
 
kerk
k0t
 
kerk's Avatar
Default
3

Quote:
Originally Posted by DJ Kukstyler View Post
Поэтому на тот же postbit есть несколько меток
эмс...
ремарка =)
в коде пхп, это те же самые хуки (крючки), к которым "цепляется" код хаков/модулей
нужно еще смотреть на строку "порядок исполнения кода" (по умолчанию 5)
к примеру, кодер подключает свой код, к какому то хуку в коде воблы, который может отменить действие другого кода от другого хака (сталкивался неоднократно), подключенного к тому же хуку
и если хак "почему то" не работает, нужно смотреть код модулей, подключенных к одному хуку и порядок их выполнения
Quote:
Originally Posted by DJ Kukstyler View Post
частенько у кодеров всех мастей патологический дебилизм по называнию модулей
я видимо, тоже в этой "когорте"
у меня все названия модулей начинаются с названия хука, к которому подключается модуль
так его легче искать впоследствии (по названию хука, поиск по странице в браузере)
есть предложения, как называть модули?
 
 
Лис
Эксперт
 
Лис's Avatar
Default
0

Quote:
Originally Posted by kerk View Post
у меня все названия модулей начинаются с названия хука, к которому подключается модуль
Меня устраивает как именно ты их называешь.
Потому что я считаю что придумать "недебильное" технические-простое название для хака довольно непросто.
 
 
DJ Kukstyler
Модератор темы
 
DJ Kukstyler's Avatar
Default
4

Quote:
Originally Posted by kerk View Post
ремарка =)
Важное замечание! Забыл о нём упомянуть, и признаюсь и не знал, что если у 2-х плагинов в одном и том же хуке одинаковые номера порядка исполнения, то один может "аннулировать" другой. (Не уверен, правильно ли я понял). Я думал, это чисто для ORDER BY в запросе, как бы, символически.

Quote:
Originally Posted by kerk View Post
у меня все названия модулей начинаются с названия хука, к которому подключается модуль
так его легче искать впоследствии (по названию хука, поиск по странице в браузере)
Так наоборот, получается мы с Вами в одной компании. Так и надо!

Я, вот на пример, про этот "шедевр" (и ему подобные):


С культурой/конвенциями php не знаком. Хорошо знаком с Си, Java, даже с Cobol... тот же Bash. Но некий общий здравый смысл в программировании вездесущ и распространяется на все языки (ну кроме сугубо математических, и то я не совсем согласен).
Одно из основных правил программирования в целом: называй переменные, функции, модули и т.д. "говорящими" названиями, да бы другой прогер, (которому со-временем придётся возиться с твоим кодом) не проклинал твои последующие 18 реинкарнаций.
Когда переменные называются "а1", "а3", а модули "Модуль1", "Модуль2"... а кода на несколько тысяч линий... Я думаю самый искусный мат и гремучие проклятия придумали именно программисты, сидя за подобным кодом.

DJ Kukstyler добавил 07.02.2025 в 21:56
Quote:
Originally Posted by Лис View Post
придумать "недебильное" технические-простое название для хака довольно непросто.
Есть маленькое и рабочее правило: называть функции и модули так, что бы было ясно ЧТО они делают (за что ответственны), а не КАК они это делают.

Пример (псевдо-код):
Code:
фунцкия_"мэйн" {
    вызов функция_добытьСписокЮзеров();
    вызов функция_послатьРассылку();
    вызов функция_уведомитьЮзеров();
}
Ты приходишь и сразу видишь, что тут делается. Если тут есть то, что тебе надо модифицировать, то уже идёшь в соответствующую функцию и смотришь, как именно оно сделано.

Таким образом тебе не надо лазить по сему коду. Чего не скажешь о следующем коде:
Code:
фунцкия_"мэйн" {
    вызов функция_1();
    вызов функция_2();
    вызов функция_3();
}
В общем и вкратце, как-то так. Можно долго ещё об этом говорить (что у каждого "своя логика", что если речь о сущностях (ооп), то дело уже немного меняется и т.д.). Но по-сути, стараясь соблюдать это небольшое правило, код становится более чем читабельным, а багфиксы и патчинги в разы быстрее.

Last edited by DJ Kukstyler : 02-07-2025 at 10:56 PM. Reason: Добавлено сообщение
 
 
Лис
Эксперт
 
Лис's Avatar
Default
0

Quote:
Originally Posted by DJ Kukstyler View Post
Есть маленькое и рабочее правило: называть функции и модули так, что бы было ясно ЧТО они делают (за что ответственны), а не КАК они это делают
Ну это логично да. Просто я как копирайтер считаю что это не все могут. Просто не дано и все.
 
 
DJ Kukstyler
Модератор темы
 
DJ Kukstyler's Avatar
Default
2

Задача: во время регистрации забанить все домены электронной почты кроме некоторых по собственному выбору

Решение: вроде как существует хак для этого, может и не один. Я решил эту проблему следующим образом:

1. редактируем register.php
2. находим следующий код:
PHP Code:
    // check for matching email addresses                           
    
if ($vbulletin->GPC['email'] != $vbulletin->GPC['emailconfirm'])       
    {
        
$userdata->error('emailmismatch');
    } 
3. сразу после добавляем:
PHP Code:
    if (!strpos(strtolower($vbulletin->GPC['email']), '@gmail.')   AND
        !
strpos(strtolower($vbulletin->GPC['email']), '@hotmail.') AND
        !
strpos(strtolower($vbulletin->GPC['email']), '@outlook.')) 
    {
        
$userdata->error('emailinvaliddomain');
    } 
В данном случае блокируются все домены кроме соответственно gmail, hotmail и outlook. Можно заменить/добавить домены.
4. Добавляем новую фразу emailinvaliddomain : Админка -> язики и фразы -> Администратор фраз
5. Нажимаем на кнопку "Создать фразу", тип фразы "Фразы ошибок (Error Messages)", в списке "Продукт" выбираем vBulletin, в поле "Название переменной" вставляем emailinvaliddomain, в поле "Текст" записываем текст ошибки по типу "Домен не разрешён на этом форуме...".
6. Также редактируем фразу "укажите свой e-mail" да бы заранее предупредить юзера о разрешённых доменах: Админка -> язики и фразы -> искать фразу
7. В поле искать вставляем enter_valid_email_address и выбираем опцию поиска по имени переменной (а не по содержимому) и нажимаем на кнопку "Искать"
8. Под уже существующим текстом, добавляем текст предупреждения о разрешённых доменах, можно использовать HTML, то есть цвет/размер текста и т.д.
9. Сохраняем и проверяем.

Last edited by DJ Kukstyler : 02-20-2025 at 01:20 PM.
 

Tags
лайфхаки vb3


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 11:20 PM.


Powered by vBulletin® Version Frozen Edition
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.