VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Пишу свою модификацию для булки. Возник ряд вопросов.
0
В общем не программер. Не то чтобы совсем не программер, но достаточно далек от профразработки. Исходные данные:
Сопровождается булка 3.8.9 Patch Level 1
Захотелось доработать ряд моментов направленных на упрощение работы модераторов ну и пользователей в итоге тоже.
Знания в HTML и PHP на уровне уверенного ламера.
Знание структуры булки на уровне неуверенного ламера.
Упертость в направлении решения задачи на уровне барана 80-го левела. Что получилось:
Изучением скриптов самой булки и скриптов написанных уважаемым Kerk, в частности kr_thread_up удалось частично создать нужное мне дополнение. Точнее сказать получилось все что нужно чтобы дополнение делало, но пока не вышло сделать так чтобы дополнение делало это так как мне хочется.
Что нужно от многоуважаемого all:
1. Я так и не смог понять как в булке делается модификации шаблонов. (термин из ксены) То есть мне надо чтобы моё дополнение при установке модифицировало один из стандартных шаблонов булки. Если я верно понимаю, то модифицировать надо шаблон SHOWTHREAD. Хотя и не факт что надо править именно этот шаблон.
В частности мне надо чтобы дополнение добавляло в список меню "Опции темы">"Опции Администрирования" пару-тройку пунктов. Или создать еще одно меню которое бы было видно только указанным в настройках группам. (Как это сделать прямой правкой шаблонов булки я примерно знаю. Но как я понимаю, это не правильно.)
2. Я не понимаю смысл того что делает модуль привязанный к cache_templates. Вот код модуля:
3. На сколько я понимаю, в модуле привязанном к showthread_complete вместо
PHP Code:
require_once('./ant127closethreadcheck.php');
можно просто вписать вставить содержимое указанного файла и сам файл вообще не создавать. Я верно понимаю?
Но тогда как модифицировать в шаблоне вот этот код чтобы он не пытался искать файл php?
1. Я так и не смог понять как в булке делается модификации шаблонов. (термин из ксены) То есть мне надо чтобы моё дополнение при установке модифицировало один из стандартных шаблонов булки. Если я верно понимаю, то модифицировать надо шаблон SHOWTHREAD. Хотя и не факт что надо править именно этот шаблон.
В частности мне надо чтобы дополнение добавляло в список меню "Опции темы">"Опции Администрирования" пару-тройку пунктов. Или создать еще одно меню которое бы было видно только указанным в настройках группам. (Как это сделать прямой правкой шаблонов булки я примерно знаю. Но как я понимаю, это не правильно.)
Штатной системы модифицирования шаблонов в vBulletin 3.8 нет. Есть несколько вариантов:
1. Поиск и замена (например с помощью str_replace) в массиве $vbulletin->templatecache;
2. Установка аддона TMS (Template Modification System), который по сути делает тоже самое;
3. Ручная правка шаблонов.
Если аддон делаете для себя, то ручная правка шаблона это вполне приемлемый вариант.
Quote:
Originally Posted by Roro
2. Я не понимаю смысл того что делает модуль привязанный к cache_templates. Вот код модуля:
Добавляет шаблон ant127_close_thread_check_form в массив кешируемых шаблонов на странице showthread.php при условии, что опция ant127_close_thread_check_enable возвращает true.
Quote:
Originally Posted by Roro
На сколько я понимаю вот этот код, находящийся в php файле модуля, делает то-же самое или я не прав?
Нет. Данный код перезаписывает массив $globaltemplates, что делать нельзя. Если вам необходимо добавить свой шаблон в массив кешируемых шаблонов, то это можно сделать так, как вы указали выше либо так:
можно просто вписать вставить содержимое указанного файла и сам файл вообще не создавать. Я верно понимаю?
Верно.
Quote:
Originally Posted by Roro
Но тогда как модифицировать в шаблоне вот этот код чтобы он не пытался искать файл php?
Писать свой обработчик формы (либо скопировать его из указанного вами файла) и разместить его в модуле на хуке misc_start (например).
@Roro
Простоузер
Join Date: Dec 2016
Posts: 23
Версия vB: 3.8.x
Reputation:
Novice 5
Репутация в разделе: 0
0
Quote:
Originally Posted by OldEr
Штатной системы модифицирования шаблонов в vBulletin 3.8 нет.
Подозревал что это так. Но спасибо что окончательно это подтвердили. А то не очень приятно искать то чего нет и не было.
Quote:
Originally Posted by OldEr
Есть несколько вариантов:
1. Поиск и замена (например с помощью str_replace) в массиве $vbulletin->templatecache;
2. Установка аддона TMS (Template Modification System), который по сути делает тоже самое;
3. Ручная правка шаблонов.
То есть фактически или 1 или 3. И оба варианта как-бы правильные с точки зрения идеологии булки.
Quote:
Originally Posted by OldEr
Если аддон делаете для себя, то ручная правка шаблона это вполне приемлемый вариант.
Ну в общем-то для себя конечно, но хочется сделать по науке, а не как попало лишь бы работало.
Quote:
Originally Posted by OldEr
Добавляет шаблон ant127_close_thread_check_form в массив кешируемых шаблонов на странице showthread.php при условии, что опция ant127_close_thread_check_enable возвращает true.
Нет. Данный код перезаписывает массив $globaltemplates, что делать нельзя. Если вам необходимо добавить свой шаблон в массив кешируемых шаблонов, то это можно сделать так, как вы указали выше либо так:
То есть фактически и то и другое добавляют шаблон в массив $globaltemplates? Просто второй вариант написан не правильно? То есть можно одну из двух конструкций убрать без вреда для конечного результата? Меня этот вопрос интересует просто потому что в плагине керка thread_up и то и другое присутствует одновременно. И именно в том виде в котором у меня это написано. (Только имя формы другое) Вот я и хочу понять почему это так написано и имеет ли какой-то смысл? Или это просто ошибка которую забыли убрать и которая на результат просто не влияет по стечению обстоятельств.
Quote:
Originally Posted by OldEr
Верно.
Писать свой обработчик формы (либо скопировать его из указанного вами файла) и разместить его в модуле на хуке misc_start (например).
А можно чуточку подробнее об этом? Просто хочется понять имеет ли смысл заморачиваться с уходом в плагине от файлов php в пользу модулей или это не вызовет ничего кроме лишнего геморроя? Просто пишу плагин в терминале в обычном текстовом редакторе который открыт на удаленном сервере. Мне было бы удобнее не открывать терминал только ради правки кода плагина. Но какие будут издержки при этом?
OldEr
Специалист
Join Date: Jun 2007
Награды в конкурсах:
Posts: 4,731
Версия vB: 3.8.x
Пол:
Reputation:
Мастер 4230
Репутация в разделе: 2624
0
Quote:
Originally Posted by Roro
То есть фактически и то и другое добавляют шаблон в массив $globaltemplates? Просто второй вариант написан не правильно? То есть можно одну из двух конструкций убрать без вреда для конечного результата? Меня этот вопрос интересует просто потому что в плагине керка thread_up и то и другое присутствует одновременно. И именно в том виде в котором у меня это написано. (Только имя формы другое) Вот я и хочу понять почему это так написано и имеет ли какой-то смысл? Или это просто ошибка которую забыли убрать и которая на результат просто не влияет по стечению обстоятельств.
А можно чуточку подробнее об этом? Просто хочется понять имеет ли смысл заморачиваться с уходом в плагине от файлов php в пользу модулей или это не вызовет ничего кроме лишнего геморроя? Просто пишу плагин в терминале в обычном текстовом редакторе который открыт на удаленном сервере. Мне было бы удобнее не открывать терминал только ради правки кода плагина. Но какие будут издержки при этом?
Принципиальной разницы нет. С точки зрения оптимизации будет быстрее, если код будет непосредственно в модуле. С точки зрения удобства разработки удобнее в файле (на мой взгляд), можно подключить VCS и так далее.
Не хочу показаться нудным, но мне всё-таки хочется разобраться почему это именно так оказалось во вполне рабочем плагине.
Вот код оригинального плагина написанного kerk и прекрасно работающего у меня на форуме.
php файл.
PHP Code:
function krtup_parse_settings()
{
global $vbulletin;
$settings = array();
if(!empty($vbulletin->options['kr_thread_up_time']))
{
$tmp = preg_split("#(\r\n|\n|\r)#s", $vbulletin->options['kr_thread_up_time'], -1, PREG_SPLIT_NO_EMPTY);
foreach($tmp AS $lines)
{
$line = explode('|', $lines);
$tmp_groups = array();
$line_groups = array_map('intval', explode(',', str_replace(' ', '', $line[0])));
foreach($line_groups AS $index => $ugroupid)
{
// Guests are not allowed
if($ugroupid > 1 AND isset($vbulletin->usergroupcache["$ugroupid"]))
{
$tmp_groups[] = $vbulletin->usergroupcache["$ugroupid"]['usergroupid'];
}
}
if(!empty($tmp_groups) AND $interval = intval($line[1]))
{
$usergroups = implode(',', $tmp_groups);
$settings["$usergroups"] = $interval;
}
unset($tmp_groups);
}
}
return $settings;
}
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'krthreadup');
define('CSRF_PROTECTION', true);
Я убрал кое что несущественное на мой взгляд для понимания сути моего вопроса из кода.
Quote:
Originally Posted by OldEr
Принципиальной разницы нет. С точки зрения оптимизации будет быстрее, если код будет непосредственно в модуле. С точки зрения удобства разработки удобнее в файле (на мой взгляд), можно подключить VCS и так далее.
Ну мне то как раз удобнее с точки зрения разработки запихать всё в модуль и не лезть непосредственно на хост. Но я хотел спросить о другом. Вы писали:
Quote:
Originally Posted by OldEr
Писать свой обработчик формы (либо скопировать его из указанного вами файла) и разместить его в модуле на хуке misc_start (например).
Я не силен в вопросах разработки. Сильно не силен. Все что пишу, пишу в основном по аналогии изучая чужой код и эксперементируя с ним. Вы могли бы уточнить что значит "Писать свой обработчик формы"? А если скопировать из файла, то какая часть файла (ну допустим из приведенного мной примера выше) есть этот самый обработчик формы? В общем если Вас не затруднит, поясните на пальцах как избавиться от использования пхп файла и всё сделать внутри модуля?
OldEr
Специалист
Join Date: Jun 2007
Награды в конкурсах:
Posts: 4,731
Версия vB: 3.8.x
Пол:
Reputation:
Мастер 4230
Репутация в разделе: 2624
0
Quote:
Originally Posted by Roro
Не хочу показаться нудным, но мне всё-таки хочется разобраться почему это именно так оказалось во вполне рабочем плагине.
Вот код оригинального плагина написанного kerk и прекрасно работающего у меня на форуме.
Смотря, в каком месте исполняется данный код. Если это происходит в в модуле на хуке cache_templates, то необходимо добавлять название шаблона в массив $globaltemplates, если же в самостоятельном скрипте, то необходимо объявлять массив $globaltemplates с перечнем необходимых шаблонов.
Quote:
Originally Posted by Roro
Я не силен в вопросах разработки. Сильно не силен. Все что пишу, пишу в основном по аналогии изучая чужой код и эксперементируя с ним. Вы могли бы уточнить что значит "Писать свой обработчик формы"? А если скопировать из файла, то какая часть файла (ну допустим из приведенного мной примера выше) есть этот самый обработчик формы? В общем если Вас не затруднит, поясните на пальцах как избавиться от использования пхп файла и всё сделать внутри модуля?
PHP Code:
if ($_REQUEST['do'] == 'test_handler') { \\ Код обработчика из файла. Код ниже - в качестве примера. echo 'Обработчик test_handler'; exit(); }
После чего обработчик формы будет доступен по адресу misc.php?do=test_handler.
@Roro
Простоузер
Join Date: Dec 2016
Posts: 23
Версия vB: 3.8.x
Reputation:
Novice 5
Репутация в разделе: 0
0
Quote:
Originally Posted by OldEr
PHP Code:
if ($_REQUEST['do'] == 'test_handler') {
\\ Код обработчика из файла. Код ниже - в качестве примера.
echo 'Обработчик test_handler';
exit();
}
После чего обработчик формы будет доступен по адресу misc.php?do=test_handler.
Очень спасибо. Кажется сообразил. Проверю как понял и если понял не правильно, попробую еще уточнить.
Roro добавил 06.09.2018 в 18:45
Quote:
Originally Posted by OldEr
Смотря, в каком месте исполняется данный код. Если это происходит в в модуле на хуке cache_templates, то необходимо добавлять название шаблона в массив $globaltemplates, если же в самостоятельном скрипте, то необходимо объявлять массив $globaltemplates с перечнем необходимых шаблонов.
В плагине thread_up, написанном kerk, к этому вопросу имеют отношение два модуля.
Первый висящий на cache_templates имеет код
Из за которой собственно и весь вопрос возник. Все это относится к одному продукту/плагину.
Вот и вопрос собственно в том не является ли код из модуля висящего на cache_templates и код $globaltemplates = array('kr_thread_up_form'); из файла ./krthreadup.php дублирующими друг друга? А если нет, то если не трудно поясните для какой цели нужен в файле этот код?
Last edited by Roro : 09-06-2018 at 07:45 PM.
Reason: Добавлено сообщение
OldEr
Специалист
Join Date: Jun 2007
Награды в конкурсах:
Posts: 4,731
Версия vB: 3.8.x
Пол:
Reputation:
Мастер 4230
Репутация в разделе: 2624
0
Содержимое файла krthreadup.php я не вижу, но могу предположить, что он используется и как самостоятельный скрипт и как файл, который содержит код для исполнения на странице showthread.php, поэтому строка:
хочется сделать по науке, а не как попало лишь бы работало
"по науке" И "для себя" - как раз, самый правильный вариант, это редактирование шаблона
т.к. все телодвижения с "поиск/замена" в шаблонах, может негативно сказаться на производительности движка
==
в шаблонах воблы есть "шаблонные" хуки, к которым можно прицепить свой шаблон и/или кусок кода (сгенерированного в каком то своем пхп скрипте)
но довольно часто бывает так, что в нужном месте как раз и не оказывается такого хука
@Roro
Простоузер
Join Date: Dec 2016
Posts: 23
Версия vB: 3.8.x
Reputation:
Novice 5
Репутация в разделе: 0
0
Quote:
Originally Posted by OldEr
Содержимое файла krthreadup.php я не вижу,
Блок php кода после слов php файл. вот в этом сообщении. Это и есть файл krthreadup.php.
Quote:
Originally Posted by OldEr
но могу предположить, что он используется и как самостоятельный скрипт и как файл, который содержит код для исполнения на странице showthread.php,
Вероятно да. Потому что вызывается он только из темплейта встроенного в showthread, а точнее даже из $ad_location[ad_showthread_beforeqr]
Нужна для кеширования шаблона на странице krthreadup.php, а строки:
Фактически никакой страницы krthreadup.php не существует. Скрипт в этом файле выполняет только преобразование данных для страницы showthread и правит базу данных форума. Как таковое отображение он не производит вообще все отображение производится при вызове showthread.php. krthreadup.php вызывает только стандартный редирект.
Quote:
Originally Posted by OldEr
для кеширования
Я вот еще что хотел спросить, если не использовать кэширование, (закомментить строки которые за кэштрование отвечают) то на сколько я понимаю на работоспособности скрипта это никак не отразится? Только на скорости исполнения отразится?
Roro добавил 06.09.2018 в 22:04
Quote:
Originally Posted by kerk
"по науке" И "для себя" - как раз, самый правильный вариант, это редактирование шаблона
Ну не то чтобы на 100% для себя. Возможно еще на один форум будет поставлено сиё приложение. Так что я еще подумаю как сделать. Через инструкцию по правке шаблонов или через поиск/замену.
Quote:
Originally Posted by kerk
т.к. все телодвижения с "поиск/замена" в шаблонах, может негативно сказаться на производительности движка
А вот это АРГУМЕНТ! Спасибо.
Quote:
Originally Posted by kerk
в шаблонах воблы есть "шаблонные" хуки, к которым можно прицепить свой шаблон и/или кусок кода (сгенерированного в каком то своем пхп скрипте)
А можно пару примеров названий таких хуков? А то я изучаю булку исключительно на уровне изучения кусков чужого кода и любая информация мне будет крайне полезна.
Quote:
Originally Posted by kerk
но довольно часто бывает так, что в нужном месте как раз и не оказывается такого хука
Ну это как всегда.
В основном я пишу то что мне надо ориентируясь на код твоего плагина thread_up. Как то давно купил его у тебя. А по скольку основная масса моего писательства скриптов ограничена /bin/bash, то с php и булкой мне достаточно трудно. А ничего даже отдаленно напоминающего то что мне нужно в инете просто нет. Ну или я сильно хреново искал.
Last edited by Roro : 09-06-2018 at 11:04 PM.
Reason: Добавлено сообщение