Статья написана эксклюзивно для vBSupport.org
Общие положения:
Если с налёту не получилось - перечитайте РидМи
Если что-то "не показывается" в установленном стиле - переключитесь на стиль дефолт
Удалили или безвозвратно переделали стиль дефолт?
|____|____|____|____|__
___|____|_бицца_|____|____|
|____|____|_башкой_|____|__
___|____|_здеся_|_____|
|____|____|____|____|__
Если хак должен автоматически добавить кнопку в постбит, или строку в мемберинфо под аватар, или ссылку в навбар; но после установки этого не произошло, причина, по большому счёту, одна: Ваш стиль какой-то деталью принципиально отличается от дефолта.
Все хаки пишутся под стиль дефолт, тестируются на дефолте и отнюдь не обязаны одинаково работать на всех кастомных стилях.
- Ну, хорошо, я это понимаю. Чё делать-то?
- Что делать? Вникать...
Вникать, потому что здесь нет единого универсального рецепта, куда пойти и что нажать, чтобы всё сразу стало "зашибись"
Но несколько общих методик мы с вами постараемся рассмотреть
С конкретными примерами, с использованием достаточно известных хаков.
Но начнём издалека
Вольный пересказ разговора с одного форума:
Quote:
ххх: у меня кнопка "Спасибо" добавилась после всех кнопок, как поставить её первой?
ууу: открой postbit_legacy, найди $template_hook[postbit_controls] и удали, а потом код кнопки поставь, куда хочешь
ххх: спасибо, всё получилось!
|
Диалог с клиентом:
Quote:
я: куда делись все шаблонные хуки? Стиль стандартный, они должны быть на месте
клиент: что такое шаблонный хук?
я: то, что начинается с $template_hook...
клиент: а, это я убрал, код какой-то непонятный. Но ничего же не поменялось?
|
$template_hook[какие-то_буквы_нерусские] - нЕ украшение, и совсем нЕ лишний код в шаблоне. И если для Вас он непонятен - задайте вопрос, либо своему техадмину, либо здесь, на форуме
template - шаблон
hook -
http://translate.google.com/?hl=ru&tab=mT#en|ru|hook
крюк, крючок, зацепка, зацеплять
Так вот, $template_hook[какие-то_буквы_нерусские] - это тот самый "крючок", на который вешается вывод кнопки/ссылки/чего-то-ещё в разных шаблонах.
Вот теперь мы можем переходить к конкретным примерам
Начнём с самого простого. Если не добавляется кнопка "Фуу" - отлично, вы уже сами догадались, если читали внимательно - нужно открыть postbit/postbit_legacy и посмотреть, а $template_hook[postbit_controls] присутствует? или его удалили, когда ставили "Спасибо"?
Ни сейчас, ни далее, я не буду рассказывать, что-конкретно-куда добавить
у каждого из вас всегда под рукой
основной стиль, или так называемый
мастер-стиль
Подсказка: чтобы иметь доступ к мастер-стилю, установите
Debug Mode From AdminCP [vB 3.5.x - 3.8.x]
Если Вы уже пользуетесь дебагом и внесли кучу изменений в мастер... ну...
|____|____|____|____|__
___|____|_бицца_|____|____|
|____|____|_башкой_|____|__
___|____|_здеся_|_____|
|____|____|____|____|__
Как узнать, к какому хуку цепляется продукт для вывода своей информации?
открываем xml продукта блокнотом, вбиваем в поиск $template_hook и внимательно читаем, что к чему.
Пример: всем известный Cyb-Advanced Forum Rules
поиск $template_hook даст одну строку:
Code:
$template_hook[navbar_buttons_left] .= $cyb_frules_link;
нам останется только сравнить код навбара нашего стиля с дефолтным, если он присутствует, или с основным(мастером), если с дефолтом уже проблемы, и вернуть хук на место.
Отдельно следует сказать пару слов про стили, где навбар сильно переписан, а навигация вынесена в хедер. Именно в таких стилях почему-то частенько отсутствуют хуки навбара
Решение: сравнивайте навбар дефолта с хедером своего стиля
глазами сравнивайте... сидите и читайте, универсальных ответов тут нет, ибо неизвестно, что автор стиля имел в виду
Найдёте соответствия - поймёте, куда ставить хуки
Я открыл xml продукта, но поиск $template_hook не дал результатов.
Это второй распространённый случай. Если в нужном месте шаблона отсутствует штатный хук, разработчикам продукта приходится идти в обход.
И варианты могут быть разные.
РидМи изучили? Там не предлагается ручная правка шаблонов? Ручная правка шаблонов может включать в себя либо добавление своего хука, либо своей переменной (это что-то коротенькое, начинается с $), либо добавление нужного кода целиком.
Так вот, точно прочитали РидМи и там точно ничего такого нет?
Хорошо...
На примере vBFavorites, этот хак установлен здесь и все видят, что где он выводит
1. Не добавилась ссылка в посте
идём продукты и модули - управление модулями
видим список модулей:
очевидно, нам нужен модуль vBFavorites: Inject Into Post ('showthread')
открываем и читаем
Спокойно! Без паники! Букв не много и они не страшные, не китайский и не клингонский
если с кодингом - никак, а с инглишем совсем туго, Гугл-переводчик в помощь, попереводите комментарии
комментарии - это то, что начинается с двух наклонных чёрточек (или с диеза #, или с наклонной чёрточки со звёздочкой)
например,
// switch link type
или
// inject into postbit templates
о, уже теплее, тут что-то про шаблон и про постбит
или
// process replacements
кстати, это как раз то место, которое мы ищем, replacements = замены
смотрим, что там написано дальше
читаем и вникаем
if ($vbulletin->options['legacypostbit'])
если в опциях - постбит_легаси
правда, не сложно?
мы прекрасно понимаем, о чём речь!
дальше:
Code:
$find_string = compile_template('<if condition="$show[\'postcount\']">#<a href="showpost.php?$session[sessionurl]p=$post[postid]&postcount=$post[postcount]" target="new" rel="nofollow" id="postcount$post[postid]" name="$post[postcount]"><strong>$post[postcount]</strong></a></if>');
$add_string = fetch_template('vbfavorites_postbit');
спокойствие, мы почти у цели! Разберём это место и можно будет писать мемуары в теме
Моя первая победа над воблой
так что тут написано?
найти строку в откомпилированном шаблоне - далее идёт, что искать, '<if condition="$show[\'postcount\']">тра-ля-ля...</if>'
и добавить строку fetch_template('vbfavorites_postbit')
О!!!
мы увидели, что именно ищет хак для того, чтобы добавить свой кусок
далее нам потребуется блокнот и терпение
берём этот кусок
Code:
<if condition="$show[\'postcount\']">#<a href="showpost.php?$session[sessionurl]p=$post[postid]&postcount=$post[postcount]" target="new" rel="nofollow" id="postcount$post[postid]" name="$post[postcount]"><strong>$post[postcount]</strong></a></if>
копируем его в блокнот
поскольку ранее мы прочитали, что упоминается постбит_легаси - туда и идём
Но искать строку целиком - бессмысленно, правда? хак её не нашёл, значит, она в шаблоне не такая
Кроме того - Внимание! - в модуле экранированы кавычки - "$show[\'postcount\'], в шаблоне этих экранов (косых чёрточек) не будет
поищем кусочек, который точно присутствует, допустим, id="postcount$post[postid]"
ой, что-то нашлось...
берём всю строку, от иф до иф, копируем и отправляем в блокнотик, под тот текст, который ищет хак
например, стиль mwa08 (восточная экзотика, жесть)) эту строку имеет в таком варианте:
Code:
<if condition="$show['postcount']"># : <a href="showpost.php?$session[sessionurl]p=$post[postid]&postcount=$post[postcount]" target="new" rel="nofollow" id="postcount$post[postid]" name="$post[postcount]">
даже при беглом взгляде видно, что отличий - много
ещё пример, один из моих любимый стилей, Палетт, та же строка:
Code:
<if condition="$show['postcount']"><a href="showpost.php?$session[sessionurl]p=$post[postid]&postcount=$post[postcount]" target="new" rel="nofollow" id="postcount$post[postid]" name="$post[postcount]">post <strong>#$post[postcount]</strong></a></if>
увидели отличия? Для Палетт это наличие/отсутствие # и слова post
но достаточно несовпадения всего одного-единственного символа, чтобы узнавания не произошло
ОК, мы разобрались, почему конкретно этот продукт не смог в этих двух стилях добавить свою ссылку в постбит_легаси
что делать?
два варианта:
- поставить всё вручную
- привести этот кусок постбита в соответствие с дефолтом
второй вариант предпочтительнее по ряду причин
если стиль используется всего один и других стилей не планируется, есть ещё вариант: отредактировать не шаблон, а модуль, скормить ему тот текст, который реально в шаблоне присутствует. Про экранирование не забудьте)
2. На примере того же vBFavorites: не добавилась ссылка в навбар.
Мы посмотрели список модулей, мы видим что-то про inject into пост, тред, мембер профиль... но ни слова про навбар
Читаем список модулей. Кеш темплейтс - это кеширование шаблонов, всевозможные Delete нас тоже не интересуют.. о! vBFavorites: Initialize - давайте посмотрим, что тут
открываем модуль на редактирование и вбиваем в поиск в браузере слово navbar - по-простому.
Что мы видим? комментарий
// inject into the navbar
очень хорошо!
теперь мы знаем, куда смотреть дальше
$find_string = compile_template - да-да-да, что продукт ищет?
Code:
<td class="vbmenu_control"><a href="usercp.php$session[sessionurl_q]">$vbphrase[user_cp]</a></td>
а у нас установлен GreenSmooth, и никакого $vbphrase[user_cp] в навбаре не наблюдается... зато в хедере поиском по $vbphrase[user_cp] находится вот такое:
Code:
<td class="navbarmenu"><a href="usercp.php$session[sessionurl_q]">$vbphrase[user_cp]</a></td>
Ситуация понятна? варианты, что делать, уже описаны для первого примера.
Добавлю только, что если Вы решили скормить продукту текст из своего шаблона, не поленитесь опустить глаза и прочесть в модуле буквально следующую строку:
Code:
$add_string = compile_template('<td class="vbmenu_control" id="vbfavorites"><a href="usercp...
обратите внимание на класс, td class="vbmenu_control" - и не забудьте заменить его на свой, в моём примере это td class="navbarmenu"
Здесь уместно будет ещё раз обратить внимание начинающих администраторов на следующий важный момент. Если вам говорят
Quote:
Originally Posted by Luvilla
если вы не понимаете, что это за кусок кода в шаблоне - ну не трогайте вы его!!!!
Не трогайте лишний раз даже комментарии в шаблонах, ибо есть хаки, которые цепляются именно к комментариям. Это не говоря уж о том, что комменты написаны там не от балды, а для облегчения понимания...
|
значит, нужно прислушиваться!
потому что вот он, живой пример, здесь, в этом модуле vBFavorites: Initialize мы видим:
$find_string = '<!-- / NAVBAR POPUP MENUS -->';
продукт ищет шаблонный комментарий и к нему добавляет свой блок
= = =
Если Вы дочитали до этого места и у Вас испуг в глазах - ну что ж... выпейте водочки и знайте: на этом форуме Вам всегда с удовольствием помогут, если Вы грамотно сформулируете вопрос.
Убедительная просьба: все вопросы из серии "что-то не добавилось" задавать
только в этой теме. Обязательны: ссылка на стиль и ссылка на хак.