форум vBSupport.ru > vBSupport.ru > Гурушник > Кодер
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'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Yoskaldyr
Специалист
Exclamation Перехват класса vB_Database
0

Булка очень хорошо расширяется благодаря систему хуков, одна проблема - они есть не везде. Также одна из типичных проблем при написании хаков - это исправление существующих sql-запросов (не добавление, а именно исправление), которое обычно не сделать без исправления оригинальных файлов. А исправление оригинальных файлов - это совсем не айс при обновлении форума, особенно когда их много этих исправлений.

Поэтому есть задумка сделать вспомогательный продукт расширяющий класс vB_Database (переменные $vbulletin->db / $db и т.п.). Т.е. это позволит исправлять любые sql-запросы в булке на лету, а также использовать систему-хуков до и после любых sql запросах не зависимо от того есть в коде булки рядом хуки или нет.

Поэтому несколько вопросов ко всем кто пишет хаки под булку:

А надо ли это вообще?

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

1. Простая правка добавление хуков в несколько файлов class_core.php class_database_explain.php class_database_slave.php (конечно там не просто добавление, а еще и проверка на наличие класса хуков, но в общем простое добавление кода)

2. Использование полностью своего полноценного класса БД, наследуемого от стандарных классов булки, но тогда придется править init.php на предмет работы с произвольным классом БД, редактировать это:
PHP Code:
    // this is not implemented fully yet
    //    $db = 'vB_Database_' . $vbulletin->config['Database']['dbtype'];
    //    $db =& new $db($vbulletin);
        
die('Fatal error: Database class not found'); 
3. Использование полностью своего полноценного класса БД, с подменой переменных $db / $vbulletin->db уже после инициализации стандартного класса булки. Плюс этого метода, что все можно сделать без правки оригинальных файлов, минус - больший расход памяти при работе скрипта (в памяти держится 2 объекта для работы с БД одновременно)

4. Использование полностью своего фейкового (прокси) класса БД, с подменой переменных $db / $vbulletin->db перед запросом и последующим возвратом оригинальных переменных после хука (кстати именно так сделали в последних версиях vboptimize). Плюс метода, аналогичен как у предыдущего метода - не нужны правки оригинальных файлов, но вот минусы - это довольно легкое полное прибитие переменной $db (в 99% случаев для ускорения работы и экономии памяти этот объект передается в булке по ссылке, поэтому для определения того как именно подменить переменную в конкретном месте надо перелопатить довольно много кода, чтобы определить как именно надо подменять эту переменную, хотя для разовых случаев такой способ работает неплохо - vboptimize типичный пример, хотя и там конечно можно было избавится от постоянного пересоздания объектов - ну не сильно быстро это в пхп)

5. Использование переменных функций в стандартном классе БД. ($this->functions). Плюсы - при работе с базой через mysql - не нужна правка оригинальных файлов, минус если используется mysqli, то придется править файл class_core.php. Также плюс этого метода, что не нужны никакие доп.хуки - все можно сделать в стандартных хуках булки - например в init_startup всего лишь надо описать новую функу и подменить ей нужную функу в $db->functions. Пример того что надо исправить в оффтопе:Оффтоп

Вот кажется все способы как можно подменить работу с базой в булке на свой код.

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

ммм идея здравая - иногда действительно не хватает хуков в нужных местах и приходится городить костыли
в качестве вариантов.. во-первых смотря под какую ветку.. в 3.8 не так страшно - немного файликов поправить, например как в первом варианте в 4-рке это будет более геморройно.

Quote:
5. Использование переменных функций в стандартном классе БД. ($this->functions). Плюсы - при работе с базой через mysql - не нужна правка оригинальных файлов, минус если используется mysqli, то придется править файл class_core.php. Также плюс этого метода, что не нужны никакие доп.хуки - все можно сделать в стандартных хуках булки - например в init_startup всего лишь надо описать новую функу и подменить ей нужную функу в $db->functions.
Вообще вот этот вариант кажется симпатичным. Не знаю какой процент юзает mysqli но почему-то кажется что не очень большой.
Но ощущается подводный камень... насчёт бесконфликтности с другими хаками.
 
 
netwind
Гуру
 
netwind's Avatar
Default
1

бредятина. в булке практически ничего нельзя сделать с запросами - они в массе хорошие, либо написаны так как есть для совместимости с mysql 4.1.
только "обманное кеширование". но это уже не улучшение, а потеря интерактивности.
Кому это нужно, кроме сеонизаторов?
 
 
Yoskaldyr
Специалист
Default
0

Quote:
Originally Posted by Cybermama View Post
Не знаю какой процент юзает mysqli
довольно большой, и используют хотя бы из-за того, что mysqli быстрее mysql.
Quote:
Originally Posted by Cybermama View Post
Но ощущается подводный камень... насчёт бесконфликтности с другими хаками.
А какие могут быть конфликты? Если подменять с умом (проверять что именно подменяется), то проблем не должно быть, хотя все конечно от разработчика зависит. С текущими хаками точно проблем не будет, вот если несколько хаков будут одну технологию замены использовать, то есть вероятность что чей-то код не выполнится. Хотя и сейчас много несовместимых между собой хаков.
Quote:
Originally Posted by netwind View Post
в булке практически ничего нельзя сделать с запросами - они в массе хорошие
я же говорю исправление не для улучшения запросов, а именно для исправления. Бывают хаки где их надо именно исправить для функционала хака. Самый типичный пример вложения в сообщении - чтобы получить доп поля таблицы attachments надо или добавлять допзапрос на каждое вложение или делать один сложный запрос в начале или исправить оригинальный файл.
Кеширование один из вариантов применения, но совсем не основной.

Yoskaldyr добавил 12.07.2010 в 18:21
Quote:
Originally Posted by Cybermama View Post
в 3.8 не так страшно - немного файликов поправить, например как в первом варианте в 4-рке это будет более геморройно
работа в базой в 4-ке осталась точно такая-же как и в 3-ке, т.е. исправлять все 1 в 1 что в 4-ке что в 3-ке надо будет

Last edited by Yoskaldyr : 07-12-2010 at 07:21 PM. Reason: Добавлено сообщение
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

Quote:
Originally Posted by Yoskaldyr View Post
Самый типичный пример вложения в сообщении - чтобы получить доп поля таблицы attachments надо или добавлять допзапрос на каждое вложение или делать один сложный запрос в начале или исправить оригинальный файл.
Самообъединение с этой же таблицей attachments под другим именем напиши.
Поля в $hook_query_fields, join $hook_query_joins .
Проблем выдумал на пустом месте. Или тебя SQL пугает?
 
 
Yoskaldyr
Специалист
Default
0

Quote:
Originally Posted by netwind View Post
$hook_query_fields, join $hook_query_joins
а там нет ни хука ни $hook_query_fields, $hook_query_joins, поэтому надо или редактировать код либо делать допзапросы
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

это в где там ? давай конкретнее
attachment.php :
PHP Code:
($hook vBulletinHook::fetch_hook('attachment_start')) ? eval($hook) : false;
...
        
post.visible AS post_visiblethread.visible AS thread_visible
        $hook_query_fields
..
    
LEFT JOIN " . TABLE_PREFIX . "thread AS thread ON (post.threadid thread.threadid)
    
$hook_query_joins 
я допускаю, что где-то их нет, но это лишь значит, что ты избрал совсем редкий никому не нужный запрос. обычно все есть.
 
 
Yoskaldyr
Специалист
Default
0

netwind, attachment.php - это для скачивания вложений, а интересует именно отображение ссылок на вложения и дополнительная информация о них в showthread.php где даже намека на хук нет
PHP Code:
        $attachments $db->query_read("
            SELECT dateline, thumbnail_dateline, filename, filesize, visible, attachmentid, counter,
                postid, IF(thumbnail_filesize > 0, 1, 0) AS hasthumbnail, thumbnail_filesize,
                attachmenttype.thumbnail AS build_thumbnail, attachmenttype.newwindow
            FROM " 
TABLE_PREFIX "attachment
            LEFT JOIN " 
TABLE_PREFIX "attachmenttype AS attachmenttype USING (extension)
            WHERE postid IN (-1" 
$ids ")
            ORDER BY attachmentid
        "
); 
Yoskaldyr добавил 12.07.2010 в 18:58
Quote:
Originally Posted by netwind View Post
я допускаю, что где-то их нет, но это лишь значит, что ты избрал совсем редкий никому не нужный запрос. обычно все есть.
вообще-то таких мест достаточно много, особенно в админке, а многим хакам ведь нужна интеграция и в админке, чтобы стандартные админ функции не переписывали работу хака.

Last edited by Yoskaldyr : 07-12-2010 at 07:58 PM. Reason: Добавлено сообщение
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

Yoskaldyr, в целом понятно. Надо было попытаться пропихнуть хуки в hook request thread.
Но раз уж первый запрос достает почти все поля, то второй почти такой же запрос прочитает все те же данные и сильно тормозить не должен.
И вообще, не понимаю стремления к экономии именно ЧИСЛА запросов любой ценой. Многим просто измерять больше нечего, так как остальные показатели производительности скрыты. Но на практике скорее важна ресурсоемкость запросов, а не их число.
 
 
Yoskaldyr
Специалист
Default
0

Quote:
Originally Posted by netwind View Post
Но на практике скорее важна ресурсоемкость запросов, а не их число.
полностью согласен, но всетаки в данном случае вопрос стоит не о добавлении/убирании запроса, а в исправлении. Может пример с вложениями не самый удачный, но в админке таких примеров очень много - в некоторых скриптах вообще нет ни одного хука. И вопрос больше не в производительности (хотя и она важна), а в изменении функционала по возможности без исправления или с 1-м исправлением только в одном месте, а не в 20 файлах.

Yoskaldyr добавил 13.07.2010 в 16:55
или все кодеры отдыхают или не кому это не надо :(

Last edited by Yoskaldyr : 07-13-2010 at 05:55 PM. Reason: Добавлено сообщение
 


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 08:57 PM.


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