Форматировнаие заголовка блока.(РЕШЕНО)
Прислано: cpu
пн, 22/12/2008 - 09:10
Такой вот вопрос:
Есть блок "Вход в систему".
Заголовок - Вход в систему.
Заказчику потребовалось, что бы (не смейтесь) предлог "в" был белого цвета.А остальные слова черного.
Как-нибудь можно форматировать заголовок?
- cpu's blog
- Для комментирования войдите или зарегистрируйтесь
Вход <span class="belaya_b">в</span> систему.
Типа так. А класс в CSS описать.
- Для комментирования войдите или зарегистрируйтесь
Пробовал, итог такой-
"Вход <span class="belaya_b">в</span> систему"
Пока текст такой вставил в виде картинки.
- Для комментирования войдите или зарегистрируйтесь
Цитирую:
Тег <SPAN> предназначен для определения встроенных элементов документа. В отличие от блочных элементов, таких как <TABLE>, <P> или <DIV>, с помощью тега <SPAN> можно выделить часть информации внутри других тегов и установить для нее свой стиль. Например, внутри параграфа (тега <P>) можно изменить цвет и размер первой буквы, если добавить начальный и конечный тег <SPAN> и определить для него стиль текста. Чтобы не описывать каждый раз стиль внутри тега, можно выделить стиль во внешнюю таблицу стилей, а для тега добавить параметр class или id с именем селектора. .....
Курите HTML на ночь
- Для комментирования войдите или зарегистрируйтесь
Вся фишка в том, что заголовки блоков являются заголовками H в разметке обычно третьего уровня H3. А использование других тегов в заголовках запрещено это раз. А два это то, что Друпал сам фильтрует вывод текста в заголовки дабы нам не получить XSS.
- Для комментирования войдите или зарегистрируйтесь
Я думаю самый простой способ написать индивидуальный шаблон block.tpl.php к блоку "Вход в систему". Там нужно только лишь имя файла построить определенным образом. Что то типа block-имямодуля-дельта.tpl.php
имямодуля в Вашем случае - user (именно он определяет этот блок)
дельта - это нужно посмотреть, дельта обычно включается в ID блока.
могу ошибаться, поищите сами.
- Для комментирования войдите или зарегистрируйтесь
Думаю, что если человек уже заменил текст картинкой, то избавится от тегов H он сможет. Хотя ... последующий вопрос поставил меня в тупик.
Как крайний случай если лениво разбираться глубоко, и надо быстро сдавать, то в page.tpl.php можно написать примерно так:
<?php
if ($_SERVER[REQUEST_URI] == '/user'){
$content = str_replace('<h2>Вход в систему</h2>','<h2>Вход </h2><span = "balaya_b">в</span><h2> систему</h2>',$content);
}
?>Соответственно if по странице - по желанию и необходимости чтоб лишнего кода не выполнять там где не надо, content меняем на переменную где требуется замена, и что и на что менять тоже по желанию, настроению и необходимости.
Быстрое решение В ЛОБ.
Более правильное решение через форм API. Как - чатаем.
Только вариант через hook_theme у меня не получился - делал через модуль - достаточно быстро, просто и понятно.
Изменить в форме можно что угодно.
- Для комментирования войдите или зарегистрируйтесь
HIgor1968, не изобретайте велосипед, seaji уже написал наиболее правильный, друпальский, способ. В друпале каждому блоку можно написать свой шаблон и там написать вместо print $block->title нужную строку. Ваш метод через $_SERVER[REQUEST_URI] создаст для новичка лишь отложенный головняк.
Более правильное решение через форм API. Как - чатаем.
Этот метод вообще не подходит сюда, т.к. топикстартеру не нужно менять форму.
- Для комментирования войдите или зарегистрируйтесь
То, что нельзя использовать теги в заголовках — мягко говоря, непроверенная информация. Это не запрещено никакими стандартами. H1-n - обычный блочный тег. Другое дело, что это не желательно семантически или еще как-то. Но это не запрещено.
<h2>Вход </h2><span class="balaya_b">в</span><h2> систему</h2>
<h2>Вход <span class="balaya_b">в</span> систему</h2>
- Для комментирования войдите или зарегистрируйтесь
Ну да, именно это я и имел ввиду.
Основная мысль, все таки, была в том, что если он напишет в админке, в заголовке блока всякие теги, то Друпал их отфильтрует т.к. это уязвимость XSS.
- Для комментирования войдите или зарегистрируйтесь
А решение все равно осталось то, что я в первом посте и написал ;)
Только не подумал что Вход в систему - обычный блок.
Вывод - чтобы темизировать блок входа делаем файлик block-user.tpl.php в папке темы (можно копированием из block.tpl.php). И строчку
<h2 class="title"><?php print $block->subject; ?></h2>
Меняем на то - что надо. Хотя бы и на
<h2>Вход <span class="balaya_b">в</span> систему</h2>
Если уважаемый Александр утверждает что такая конструкция не является нарушением. Тег span Друпалом не фильтруется в данном случае.
- Для комментирования войдите или зарегистрируйтесь
Эх, не думал я, что столько монстров Друпала заинтересуются этим вопросом.
Все заработало сразу(удивительно), как обьяснили.
Спасибо!
P.S. Что такое Delta, так и не понял,в темизации блока она действительно есть.Но в других уроках темизации её не встречал, и без неё вроде как все работает.
- Для комментирования войдите или зарегистрируйтесь
* - $block->delta: This is a numeric id connected to each module.
Похоже некий номер блока причем не уникальный, я нигде не использовал. Сначала подумал что привязан к региону, но при перемещении блока по регионам этот номер не меняется.
- Для комментирования войдите или зарегистрируйтесь
С дельтой все просто.
Каждый модуль может определять не один блок, а несколько специальным хуком hook_block()
Так вот, именно с помощью дельты эти блоки и идентифицируются внутри этого хука.
Например модуль user определяет четыре блока:
<?php
$blocks[0]['info'] = t('User login');
// Not worth caching.
$blocks[0]['cache'] = BLOCK_NO_CACHE;
$blocks[1]['info'] = t('Navigation');
// Menu blocks can't be cached because each menu item can have
// a custom access callback. menu.inc manages its own caching.
$blocks[1]['cache'] = BLOCK_NO_CACHE;
$blocks[2]['info'] = t('Who\'s new');
// Too dynamic to cache.
$blocks[3]['info'] = t('Who\'s online');
$blocks[3]['cache'] = BLOCK_NO_CACHE;
?>- Для комментирования войдите или зарегистрируйтесь
Боюсь, что файл block-user.tpl.php затронет все блоки модуля user, а именно "Вход в систему", "Навигация", "Новые пользователи" и "Кто онлайн".
- Для комментирования войдите или зарегистрируйтесь
Тогда и файл нужен block-user-0.tpl.php
Где 0 - дельта (у меня как раз 0). Можно проверить.
Источники - http://setegnom.com/node/340
http://setegnom.com/node/341
- Для комментирования войдите или зарегистрируйтесь
У Drupal-а функционал поражает.
Думал что придется смирится, что везде будет "Вход В личный кабинет".
Еще раз спасибо.)
- Для комментирования войдите или зарегистрируйтесь
надо было перевод строки поменять да и все
- Для комментирования войдите или зарегистрируйтесь
Не понял, в перевод строки можно теги вставлять?
- Для комментирования войдите или зарегистрируйтесь
В теме было написано "Вход в систему". В предыдущем коменте "Вход В личный кабинет". Я подумал что для этого вы все и устроили :) Да, в переводе тоже можно теги вставлять.
- Для комментирования войдите или зарегистрируйтесь
Не знал, пригодится.
- Для комментирования войдите или зарегистрируйтесь



Комментарии