Форматировнаие заголовка блока.(РЕШЕНО)

Прислано: cpu

пн, 22/12/2008 - 09:10

Другие статьи по теме:

Такой вот вопрос:
Есть блок "Вход в систему".
Заголовок - Вход в систему.
Заказчику потребовалось, что бы (не смейтесь) предлог "в" был белого цвета.А остальные слова черного.
Как-нибудь можно форматировать заголовок?

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано HIgor1968 в пн, 22/12/2008 - 09:27.

Вход <span class="belaya_b">в</span> систему.

Типа так. А класс в CSS описать.


Опубликовано cpu в пн, 22/12/2008 - 12:45.

Пробовал, итог такой-

"Вход <span class="belaya_b">в</span> систему"

Пока текст такой вставил в виде картинки.


Опубликовано HIgor1968 в пн, 22/12/2008 - 13:10.

Цитирую:

Тег <SPAN> предназначен для определения встроенных элементов документа.
В отличие от блочных элементов, таких как <TABLE>, <P> или <DIV>,
с помощью тега <SPAN> можно выделить часть информации внутри
других тегов и установить для нее свой стиль. Например,
внутри параграфа (тега <P>) можно изменить цвет и размер 
первой буквы, если добавить начальный и конечный тег <SPAN> 
и определить для него стиль текста. Чтобы не описывать каждый 
раз стиль внутри тега, можно выделить стиль во внешнюю таблицу 
стилей, а для тега добавить параметр class или id с именем селектора.
 
.....

Курите HTML на ночь


Опубликовано seaji в пн, 22/12/2008 - 13:30.

Вся фишка в том, что заголовки блоков являются заголовками H в разметке обычно третьего уровня H3. А использование других тегов в заголовках запрещено это раз. А два это то, что Друпал сам фильтрует вывод текста в заголовки дабы нам не получить XSS.


Опубликовано seaji в пн, 22/12/2008 - 13:37.

Я думаю самый простой способ написать индивидуальный шаблон block.tpl.php к блоку "Вход в систему". Там нужно только лишь имя файла построить определенным образом. Что то типа block-имямодуля-дельта.tpl.php
имямодуля в Вашем случае - user (именно он определяет этот блок)
дельта - это нужно посмотреть, дельта обычно включается в ID блока.

могу ошибаться, поищите сами.


Опубликовано HIgor1968 в пн, 22/12/2008 - 14:55.

Думаю, что если человек уже заменил текст картинкой, то избавится от тегов 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 у меня не получился - делал через модуль - достаточно быстро, просто и понятно.
Изменить в форме можно что угодно.


Опубликовано batbug в пн, 22/12/2008 - 17:07.

HIgor1968, не изобретайте велосипед, seaji уже написал наиболее правильный, друпальский, способ. В друпале каждому блоку можно написать свой шаблон и там написать вместо print $block->title нужную строку. Ваш метод через $_SERVER[REQUEST_URI] создаст для новичка лишь отложенный головняк.

"HIgor1968" написал(а):

Более правильное решение через форм API. Как - чатаем.

Этот метод вообще не подходит сюда, т.к. топикстартеру не нужно менять форму.


Опубликовано neochief в пн, 22/12/2008 - 19:23.

То, что нельзя использовать теги в заголовках — мягко говоря, непроверенная информация. Это не запрещено никакими стандартами. H1-n - обычный блочный тег. Другое дело, что это не желательно семантически или еще как-то. Но это не запрещено.

<h2>Вход </h2><span class="balaya_b">в</span><h2> систему</h2>
<h2>Вход <span class="balaya_b">в</span> систему</h2>


Опубликовано seaji в пн, 22/12/2008 - 22:24.

Ну да, именно это я и имел ввиду.
Основная мысль, все таки, была в том, что если он напишет в админке, в заголовке блока всякие теги, то Друпал их отфильтрует т.к. это уязвимость XSS.


Опубликовано HIgor1968 в вт, 23/12/2008 - 03:12.

А решение все равно осталось то, что я в первом посте и написал ;)
Только не подумал что Вход в систему - обычный блок.
Вывод - чтобы темизировать блок входа делаем файлик block-user.tpl.php в папке темы (можно копированием из block.tpl.php). И строчку

    <h2 class="title"><?php print $block->subject; ?></h2>

Меняем на то - что надо. Хотя бы и на
<h2>Вход <span class="balaya_b">в</span> систему</h2>

Если уважаемый Александр утверждает что такая конструкция не является нарушением. Тег span Друпалом не фильтруется в данном случае.


Опубликовано cpu в вт, 23/12/2008 - 05:37.

Эх, не думал я, что столько монстров Друпала заинтересуются этим вопросом.
Все заработало сразу(удивительно), как обьяснили.
Спасибо!
P.S. Что такое Delta, так и не понял,в темизации блока она действительно есть.Но в других уроках темизации её не встречал, и без неё вроде как все работает.


Опубликовано HIgor1968 в вт, 23/12/2008 - 11:14.

 * - $block->delta: This is a numeric id connected to each module.

Похоже некий номер блока причем не уникальный, я нигде не использовал. Сначала подумал что привязан к региону, но при перемещении блока по регионам этот номер не меняется.


Опубликовано seaji в вт, 23/12/2008 - 12:16.

С дельтой все просто.
Каждый модуль может определять не один блок, а несколько специальным хуком 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;
?>


Опубликовано seaji в вт, 23/12/2008 - 12:20.

Боюсь, что файл block-user.tpl.php затронет все блоки модуля user, а именно "Вход в систему", "Навигация", "Новые пользователи" и "Кто онлайн".


Опубликовано HIgor1968 в вт, 23/12/2008 - 12:37.

Тогда и файл нужен block-user-0.tpl.php
Где 0 - дельта (у меня как раз 0). Можно проверить.
Источники - http://setegnom.com/node/340
http://setegnom.com/node/341


Опубликовано cpu в вт, 23/12/2008 - 13:14.

У Drupal-а функционал поражает.
Думал что придется смирится, что везде будет "Вход В личный кабинет".
Еще раз спасибо.)


Опубликовано neochief в вт, 23/12/2008 - 13:54.

надо было перевод строки поменять да и все


Опубликовано cpu в вт, 23/12/2008 - 15:15.

Не понял, в перевод строки можно теги вставлять?


Опубликовано neochief в вт, 23/12/2008 - 16:22.

В теме было написано "Вход в систему". В предыдущем коменте "Вход В личный кабинет". Я подумал что для этого вы все и устроили :) Да, в переводе тоже можно теги вставлять.


Опубликовано HIgor1968 в вт, 23/12/2008 - 17:23.

Не знал, пригодится.


Новое на сайте

Ссылки партнёров