Такой вот вопрос:
Есть блок "Вход в систему".
Заголовок - Вход в систему.
Заказчику потребовалось, что бы (не смейтесь) предлог "в" был белого цвета.А остальные слова черного.
Как-нибудь можно форматировать заголовок?
Тег <SPAN> предназначен для определения встроенных элементов документа.
В отличие от блочных элементов, таких как <TABLE>, <P> или <DIV>,
с помощью тега <SPAN> можно выделить часть информации внутри
других тегов и установить для нее свой стиль. Например,
внутри параграфа (тега <P>) можно изменить цвет и размер
первой буквы, если добавить начальный и конечный тег <SPAN>
и определить для него стиль текста. Чтобы не описывать каждый
раз стиль внутри тега, можно выделить стиль во внешнюю таблицу
стилей, а для тега добавить параметр class или id с именем селектора.
Вся фишка в том, что заголовки блоков являются заголовками 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] создаст для новичка лишь отложенный головняк.
"HIgor1968" wrote:
Более правильное решение через форм API. Как - чатаем.
Этот метод вообще не подходит сюда, т.к. топикстартеру не нужно менять форму.
То, что нельзя использовать теги в заголовках — мягко говоря, непроверенная информация. Это не запрещено никакими стандартами. H1-n - обычный блочный тег. Другое дело, что это не желательно семантически или еще как-то. Но это не запрещено.
Ну да, именно это я и имел ввиду.
Основная мысль, все таки, была в том, что если он напишет в админке, в заголовке блока всякие теги, то Друпал их отфильтрует т.к. это уязвимость XSS.
А решение все равно осталось то, что я в первом посте и написал
Только не подумал что Вход в систему - обычный блок.
Вывод - чтобы темизировать блок входа делаем файлик block-user.tpl.php в папке темы (можно копированием из block.tpl.php). И строчку
Эх, не думал я, что столько монстров Друпала заинтересуются этим вопросом.
Все заработало сразу(удивительно), как обьяснили.
Спасибо!
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;
?>
В теме было написано "Вход в систему". В предыдущем коменте "Вход В личный кабинет". Я подумал что для этого вы все и устроили Да, в переводе тоже можно теги вставлять.
Комментарии
Типа так. А класс в CSS описать.
Пробовал, итог такой-
Пока текст такой вставил в виде картинки.
Цитирую:
В отличие от блочных элементов, таких как <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] создаст для новичка лишь отложенный головняк.
Этот метод вообще не подходит сюда, т.к. топикстартеру не нужно менять форму.
То, что нельзя использовать теги в заголовках — мягко говоря, непроверенная информация. Это не запрещено никакими стандартами. 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). И строчку
Меняем на то - что надо. Хотя бы и на
Если уважаемый Александр утверждает что такая конструкция не является нарушением. Тег span Друпалом не фильтруется в данном случае.
Эх, не думал я, что столько монстров Друпала заинтересуются этим вопросом.
Все заработало сразу(удивительно), как обьяснили.
Спасибо!
P.S. Что такое Delta, так и не понял,в темизации блока она действительно есть.Но в других уроках темизации её не встречал, и без неё вроде как все работает.
Похоже некий номер блока причем не уникальный, я нигде не использовал. Сначала подумал что привязан к региону, но при перемещении блока по регионам этот номер не меняется.
С дельтой все просто.
Каждый модуль может определять не один блок, а несколько специальным хуком 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-а функционал поражает.
Думал что придется смирится, что везде будет "Вход В личный кабинет".
Еще раз спасибо.)
надо было перевод строки поменять да и все
Не понял, в перевод строки можно теги вставлять?
В теме было написано "Вход в систему". В предыдущем коменте "Вход В личный кабинет". Я подумал что для этого вы все и устроили Да, в переводе тоже можно теги вставлять.
Не знал, пригодится.