Писать хаки для vBulletin в окошечке 450x150 без подсветки. Тратить по пол-минуты на вставку фразы через веб-интерфейс, а потом обнаружить, что похожая уже есть. Получасовая халтура (оцененная соответствующе) растягивается на несколько дней. Заказчик и его гениальные идеи, конечно, супер, но с этим ничего не поделать. А вот утомительное программирование в браузере (хуже только IDE для фортрана) вполне можно перенести в любимый редактор. Хак в global_start, приоритет выполнения 1:
$PRODUCT = file_get_contents(DIR . '/PRODUCT.php'); if (preg_match("#PHRASES\s*\{(.*)(\r|\n|\r\n)\}#isU", $PRODUCT, $matches)) { foreach (explode("\n", $matches[1]) as $match) { $match = trim($match); if ($match != "") { list ($phraseName, $phraseValue) = explode(" ", $match, 2); $vbphrase[trim($phraseName)] = preg_replace("#\{([0-9]+)\}#", "%\$1\$s", trim($phraseValue)); } } } $vBulletinHook = vBulletinHook::init(); if (preg_match_all("#HOOK\((.*)\)\s*\{(.*)(\r|\n|\r\n)\}#isU", $PRODUCT, $matches)) { foreach ($matches[0] as $k => $_) { $vBulletinHook->pluginlist[trim($matches[1][$k])] .= $matches[2][$k]; } }
Ну и дальше, очевидно, создаём PRODUCT.php в корне форума:
<?php PHRASES { playing_chess Играем в шахматы: до конца света осталось {1} дней } HOOK(global_start) { $vbulletin->options['bbtitle'] = construct_phrase($vbphrase['playing_chess'], round((mktime(0, 0, 0, 12, 21, 2012) - time()) / 86400, 0)); }
Хаки init_startup, cache_templates и, может быть, ещё какие-нибудь, выполняться не будут, код без отступов не пройдёт, а в остальном классно. Инсталлятор этого добра на форум выложу в комментарии позже. Сначала нужно доделать работу 
Обещанный вставлятель:
query_write(fetch_query_sql(array(
'languageid' => '-1',
'varname' => $phraseName,
'fieldname' => 'global',
'text' => $phraseValue,
'product' => PRODUCT
), 'phrase'));
}
}
}
$vBulletinHook = vBulletinHook::init();
if (preg_match_all("#HOOK\((.*)\)\s*\{(.*)(\r|\n|\r\n)\}#isU", $PRODUCT, $matches))
{
foreach ($matches[0] as $k => $_)
{
$hookName = trim($matches[1][$k]);
$hookCode = $matches[2][$k];
$db->query_write(fetch_query_sql(array(
'title' => $hookName,
'hookname' => $hookName,
'phpcode' => $hookCode,
'product' => PRODUCT,
'active' => '1',
'executionorder'=> '5',
), 'plugin'));
}
}php
define('PRODUCT', 'private_threads');
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE & ~8192);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'PRODUCT-INSERT');
// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();
// get special data templates from the datastore
$specialtemplates = array();
// pre-cache templates used by all actions
$globaltemplates = array();
// pre-cache templates used by specific actions
$actiontemplates = array();
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################
$PRODUCT = file_get_contents(DIR . '/PRODUCT.php');
if (preg_match("#PHRASES\s*\{(.*)(\r|\n|\r\n)\}#isU", $PRODUCT, $matches))
{
foreach (explode("\n", $matches[1]) as $match)
{
$match = trim($match);
if ($match != "")
{
list ($phraseName, $phraseValue) = explode(" ", $match, 2);
$phraseName = trim($phraseName);
$phraseValue = trim($phraseValue);
$db-?Coming soon: группы фраз, шаблоны
Доступные тэги: <b>, <i>, <s>, <u>, <a href="">, <img src="" /> (загрузить), <pre>, <quote>
- themylogin › Самое дорогое в жизни Вчера, 02:19
- ramwoolf › Am I not always be wanting this? (x8) 16 мая, 23:08
- anonymous › Написание «не» с различными частями речи 16 мая, 16:06
- anonymous › A Tragedy in the Air 15 мая, 18:24
- themylogin › Итоги 2011 15 мая, 12:10
- themylogin › На гелике езжу 13 мая, 16:24
- anonymous › Waking up at ten 13 мая, 13:16
- themylogin › Жук 12 мая, 11:55
- themylogin › Давайте шутки из твиттера продолжим развивать здесь 7 мая, 11:03
- anonymous › Шевченко лох 6 мая, 14:02
