Лицензии у меня нет, так что сапорт распаршивать не могу и официальной документации тоже нет, поэтому что сам наковырял, то и выкладываю
Написано для версии 4.0 и выше
Для понимания всего написаного нужны хотябы основные знания html
1) как найти нужный шаблон, чтобы его исправить
Пример: сместить группу кнопок "отправить сообщение", "расширенный режим", под блоком быстрого ответа
Решение:
Для начала нам надо определить где вообще это все находится. Открывам любую тему в браузере и заглядываем в код (все браузеры имеют опцию просмотра исходного кода страницы). Далее ищем в html названия кнопок "отправить сообщение" и "расширенный режим". Первое у нас попадается часто, а вот второе только в одном месте.
Code:
<div class="blockfoot actionbuttons">
<div class="group">
<input type="submit" class="button" value="Отправить сообщение" accesskey="s" title="(Alt + S)" name="sbutton" tabindex="1" id="qr_submit" onclick="clickedelm = this.value" />
<input type="submit" class="button" value="Расширенный режим" accesskey="x" title="(Alt + X)" name="preview" tabindex="1" id="qr_preview" onclick="clickedelm = this.value" />
<input type="reset" id="qr_cancelbutton" class="button" style="display:none;" value="Отмена" accesskey="c" title="(Alt + C)" name="cancel" tabindex="4" onclick="qr_reset();" />
</div>
</div>
Находим "предложение" которое для этого места может быть уникальным
Code:
name="sbutton" tabindex="1" id="qr_submit"
И производим поиск в шаблонах. В результате мы находим один (если повезет) или несколько шаблонов где это встречается. Из котоых выбираем нужный нам. Круг можно сузить сделав несколько разных запросов и сравнив полученные списки шаблонов.
Вариант второй это поиск по фразе. Заходим в Языки и фразы - поиск во фразах и ищем там "Расширенный режим". Так узнаем какой перемнной принадлежит данная фраза. В нашем случае это "go_advanced". Ищем в шаблонах "{vb:rawphrase go_advanced" и получаем список шаблонов который можно сократить сделав другие запросы.
Далее находим интересующий нас блок и меняем его пока не получим нужный результат... тут уже зависит от того что надо, в нашем случае это замена
Code:
<div class="blockfoot actionbuttons">
на
Code:
<div class="blockfoot" style="text-align:center">
2) принцип построения шаблонов
В 4-ой версии все сделали на div отказавшись от таблиц, я попытаюсь описать основные моменты и отличия данного типа верстки. Дизайнер из меня никудышный, так что как получится
Во первых после тегов <div> и <hr> по умолчанию идет перевод строки и поэтому в таблице стилей для всех этих тегов прописано float:left. В этом случае следующий див или другой элемент или текст будут обтекать этот блок справа. Если вам необходимо всеже перевести строку, то используйте <div class="clear"></div>
Ширина в процентном соотношении учитывается от "родительского блока" (от вышестоящего)
Например
Code:
<div style="width:100px;background-color:#CCCCCC;height:100px;float:left">
<div style="width:10%;background-color:#777777;height:50px">text</div>
</div>
второй блок будет в ширину 10px, и текст не будет увеличивать блок, он будет поверх него. Если мы укажем ширину больше чем у родительского, то это не увеличит родительский блок, а просто наложит поверх него.
Следующий блок будет накладываться поверх имеющихся, если в "иерархии" он стоит выше
Code:
<div style="width:100px;background-color:#CCCCCC;height:100px;float:left">
<div style="width:200px;background-color:#777777;height:50px">text</div>
</div>
<div style="width:100px;background-color:#555500;height:100px;float:left">
text1
</div>
3) Синтаксис шаблонов
Переменные {vb:raw название}
Пример {vb:raw text}
Фразы {vb:rawphrase фраза, ключ1, ключ2}
ключи передавать не обязательно, во фразах это {1}, {2}
Пример
фраза klass="Классный движок {1}"
В шаблоне: {vb:rawphrase klass,'vBulletin'}
Массив {vb:raw массив.элемент} или {vb:raw массив[элемент]} (лучше первый вариант)
Пример {vb:raw post.postid}
Организация цикла
Code:
<vb:each from="массив" key="ключ" value="значение">
</vb:each>
ключ необязателен. Пример:
Фразы:
Code:
Title="Заголовок: <a href='{1}' target='_blank'>{2}</a><br>"
Date="Дата: {1}<br>"
Description="Текст: {1}<br>"
Шаблон:
Code:
<vb:each from="rss" key="rssid" value="rss_value">
{vb:rawphrase Title,{vb:raw rss_value.link},{vb:raw rss_value.title}}
{vb:rawphrase Date,{vb:raw rss_value.date}}
{vb:rawphrase Description,{vb:raw rss_value.description}}
</vb:each>
Условия
Code:
<vb:if condition="условие">
<vb:elseif condition="второе условие" />
<vb:else />
</vb:if>
В условии переменные имеют вид как в php скрипте, т.е. $post[postid], в условии можно пользоваться функциями пхп:in_array, is_array, is_numeric, isset, empty, defined, array
И функциями описанными в движке
boolean is_browser (string $browser, [float $version = 0]) проверяет браузер пользователя
string exec_switch_bg ([integer $alternate = 0]) возвращает имя класса CSS
Пример
Code:
<vb:if condition="!is_browser('ie',6) and is_array($post)">
у нас не IE6 и переменная $post - массив
<vb:elseif condition="!is_browser('ie',6)" />
У нас всеравно не IE
<vb:else />
Блин, у меня не браузер а ослик
</vb:if>
Основные "переменные"
stylevar - содержит массив переменных стиля (список можно посмотреть в таблице stylevar БД)
Может вызываться как {vb:stylevar переменная} или $stylevar[переменная] (последнее в усливях)
vboptions - массив опций форума (список можно посмотреть в таблице settings БД)
Может вызываться как {vb:raw vboptions.опция} или $vboptions[опция] (последнее в усливях)
bbuserinfo - массив с данными о пользователе который смотрит страницу
Генерация ссылок
{vb:link forum, аргумент1, аргумент2, аргумент3, аргумент4} - создает ссылку на страницы форума forumdisplay.php
аргумент1 должен содержать массив в котором есть поля forumid и title
аргумент2 содержит массив из опций передаваемых странице (его можно не указывать или написать null) такие как sort, order
аргумент3 указывает какое поле использовать вместо forumid (не обязателен)
аргумент4 указывает какое поле использовать вместо title (не обязателен)
{vb:link thread, аргумент1, аргумент2, аргумент3, аргумент4} - создает ссылку на страницы форума showthread.php
аргумент1 должен содержать массив в котором есть поля threadid и title
аргумент2 содержит массив из опций передаваемых странице (его можно не указывать или написать null) такие как p, viewfull
аргумент3 указывает какое поле использовать вместо threadid (не обязателен)
аргумент4 указывает какое поле использовать вместо title (не обязателен)
{vb:link member, аргумент1, аргумент2, аргумент3, аргумент4} - создает ссылку на страницe форума member.php
аргумент1 должен содержать массив в котором есть поля username и userid
аргумент2 содержит массив из опций передаваемых странице (его можно не указывать или написать null)
аргумент3 указывает какое поле использовать вместо userid (не обязателен)
аргумент4 указывает какое поле использовать вместо username (не обязателен)
Шаблон в шаблоне подгружается как переменная
Пример {vb:raw headinclude} - подгрузит шаблон headinclude, но если только эта переменная передавалась конкретно этому шаблону
4) переменные и шаблоны в php скриптах
$templater = vB_Template::create('polloption'); - создаем "запрос" к шаблону
$templater->register('option', $option); - регистрируем для этого шаблона переменную names и передаем ей значение
$pollbits = $templater->render(); обрабатываем шаблон
Если надо добавить свою переменную, то находим нужный пхп файл, находим в нем место где формируется нужный шаблон и добавляем туда строчку с регистрацией нужной переменной.
Тут думаю для тех кто знает php понятно что к чему, а кто не знает, то им в общем-то и не надо )