2)вообще меняем стили (удаляем старые и в шаблоне через иф подлючаем новые или обратно старые)
в темплейт.пхп
<?php
function theme_preprocess_page(&$vars) { $css = $vars['css']; unset($css['all']['module']['путь до стиля который удаляем']); $vars['styles'] = drupal_get_css($css); }
?>
В друпале ты можешь использовать сколько угодно css файлов, главное чтоб он о них знал. т.е. что б они были прописаны в .../sites/all/themes/[название темы]/[название темы].info - файл.
А если тебя интересует переписать правила которые подхватываются для этой страницы из другого css файла, тогда тут на помощь классы, которые добавляются к тегу body.
Cozmi а можешь просветить что происходит в таком способе при включенном кешировании и агрегации css файлов? создаются несколько версий css файла для разных страниц?
думаю, если добавить все стили в [название темы].info, потом удалить их в preprocess_page, чтоб не мешались, то все будет окей.я не знаю, как организовано кэширование в друпал
sergip прописываешь нужный css файл в .info файл и в нем определяешь нужный блок через тег body, для страниц пользователей это будет body.page-user а блок с классом content будет доступен так:
body.page-user div.content{...}
Cozmi я это просто к тому, что если этот способ с агрегацией не дружит, это плохо.
Стати Cozmi спс, но стили не подключились на странице профиля
что значит не подключились? новый link не появился в коде?... или появился, но стили не работают?
если второе -- стили не работают из-за того, что вы неправильно их прописываете в css, попробуйте более точный отлов элемента
имя_элемента_отец.класс_элемента_отец имя_элемента_сынуля.класс_элемента_сынуля {}
или ваше
body.page-user div.tabs { /*запись означает, что свойства будут изменяться у боди с классом пайдж-юзер, а наврятли вы придумываете классы для боди*/
padding: 15;
margin: 15;
}
замените на
body div.page-user div.tabs {
padding: 15;
margin: 15;
}
ну вы поняли..
sergip как выше сказано, Firebug-ом глянь что у тебя там и как с css классами.
bsyomov способов можно найти много, в моем способе не создаются при агрегации доп .css файлы которые надо отдельно качать (не велико дело конечно, но все-же)
ИМХО вилки и ложки используются в разных случаях хотя и тем и тем едят. drupal_add_css() для модулей для тем специально создан .info файл в который подключаются .css и .js файлы. Лично я привык разбивать css стиль по разным файлам в зависимости от файла шаблона к тематизации которого касаются таблицы (для удобства). Или предлагаешь отдельно в каждый шаблон вписывать drupal_add_css() ?
Для таких специфичиских задач как у ТС в друпале по моему и существуют body classes.
А проблемы у ТС могут быть либо из-за отсутствия в теме body classes, по причине что тема своя с нуля, и не знанию о полезности body classes в тематизации, либо из-за не правильных идентификаторов. если первое, то в шаблон просто надо в классы к тегу body добавить <?php print $body_classes; ?>
пособов можно найти много, в моем способе не создаются при агрегации доп .css файлы которые надо отдельно качать (не велико дело конечно, но все-же)
А против вашего способа я ничего не имею - прочтите мой пост внимательнее. Так и делается.
Речь как раз была о том, что неверно прописывать линк на стиль в шаблоне и если уж почему-то это надо, то надо использовать соответствующие средства.
И я вообще не предлагаю дополнительные стили подключать, наоборот рекомендую правильно пользоваться селекторами css.
"Cozmi" wrote:
2bsyomov, поясните, что тут плохого..?
CSS первого примера не будет агрегироваться. Никто никогда не догадается, что вы подключаете его там - соответственно проблемы с дальнейшей поддержкой и.т.п.
По второму примеру - а зачем? Обычно требуется только правильно перекрыть часть стилей какого-либо модуля, а не избавиться от них. Возможна ситуация, когда новые стили перекроют не всё и всё будет ломаться. Т.е. имхо плохая практика. Несколько сот байт заархивированного css того не стоит.
еще б загвоздок небыло задавать селекторы которые используются далеко не только в табах. а проблема ведь банальная. добавьте перед ul div.tabs и никаких проблем.
Или предлагаешь отдельно в каждый шаблон вписывать drupal_add_css() ? :)
а чего тут смешного? css нужен под некий html. Если шаблон на странице используется, соответственно и css для него тоже. Например некоего блока видимого только на определенных страницах.
А ты предлагаешь все имеющиеся css подключать на всех страницах, нужны/не нужны, без разницы?
Для общих задач, где немного css можно использовать общий style.css. Закешируется браузером и ладно.
<liclass="active"><ahref="/admin/content/node-type/blog/fields"class="active">Управлять полями</a></li> <li><ahref="/admin/content/node-type/blog/display">Показать поля</a></li> <li><ahref="/admin/content/node-type/blog/conditional">Conditional fields</a></li> </ul> </div> <formaction="/admin/content/node-type/blog/fields"accept-charset="UTF-8"method="post"id="content-field-overview-form"> <div><div>
Add fields and groups to the content type, and arrange them on content display and input forms.<br>You can add a field to a group by dragging it below and to the right of the group.<br>Note: Installing the <atarget="_blank"class="ext"href="http://drupal.org/project/advanced_help">Advanced help</a><spanclass="ext"></span> module will let you access more and better help.</div>
CSS:
.tabs{ font-size:12px; } .tabs a { font-weight:normal; line-height:2.2em; } .tabs ul { padding:0; margin:0; padding-left:5px; border-bottom:solid0px#ffffff; margin-bottom:10px; } .tabs ul li { float:left; } .tabs ul li a { margin:0px; padding:4px10px; background:#ffffff; border:solid1px#e8f7fd; } .tabs ul li a:hover{ text-decoration:underline; background:#EDF7F9; border:solid1px#e8f7fd; } .tabs ul li a.active,.tabs ul li.active a { color:#ffffff; background:url(bg-bar-lite.png)repeat-xcentercenter; border:solid1px#cbebfb; } .tabs ul li a.active:hover{ text-decoration:underline; background:url(bg-bar.png)repeat-xcentercenter; border:solid1px#a84d4d; }
ul.secondary{ }
ul.secondary li { font-size:11px; margin:0; padding:0; border:solid0px#ffffff; }
ul.secondary li a { margin:0; padding:2px4px; margin-right:2px; margin-left:0px; border:solid1px#f3e7e7; }
Куда только не пихаю float: left; все равно текст выравнивается вместе с табами и находится с ним на одном уровне!!! что очень плохо
sergip еслиб у меня была подобная проблема помог-бы сразу, а так мне даже не на чем проверить свои мысли. Как понять
"sergip" wrote:
И текст все равно в одну строчку с табами.
они одной высоты или что? или они не переносятся на следующую строку (из-за чего как я понял и весь сыр-бор?) если последнее то то решение которое ты взял, хреновое - это мягко сказано! учим css стили и учимся пользоваться firebug-ом!
надо было переписать одну строчку системного правила, и стока шума, я б тут вообще забил на body classes и отдельные css файлы и вписал это для всей системы.
Комментарии
Как вариант
1)..в шаблоне подключаем дополнительные стили
<?php
if (preg_match('~^user/.*~Ui', $_GET['q'], $cozmi)) {
print '<link rel="stylesheet" href="'.$base_path.$directory.'/style.css" type="text/css" media="screen, projection" />';
}
?>
2)вообще меняем стили (удаляем старые и в шаблоне через иф подлючаем новые или обратно старые)
в темплейт.пхп
<?php function theme_preprocess_page(&$vars)
{
$css = $vars['css'];
unset($css['all']['module']['путь до стиля который удаляем']);
$vars['styles'] = drupal_get_css($css);
} ?>
далее пункт 1) + добаляем else
В друпале ты можешь использовать сколько угодно css файлов, главное чтоб он о них знал. т.е. что б они были прописаны в .../sites/all/themes/[название темы]/[название темы].info - файл.
stylesheets[all][] = css/page.css
stylesheets[all][] = css/node.css
stylesheets[all][] = css/block.css
stylesheets[all][] = css/comment.css
stylesheets[all][] = css/style.css
вот так у меня секция с css файлами выглядит.
А если тебя интересует переписать правила которые подхватываются для этой страницы из другого css файла, тогда тут на помощь классы, которые добавляются к тегу body.
Cozmi а можешь просветить что происходит в таком способе при включенном кешировании и агрегации css файлов? создаются несколько версий css файла для разных страниц?
vitok а как для отдельных страниц это использовать?
думаю, если добавить все стили в [название темы].info, потом удалить их в preprocess_page, чтоб не мешались, то все будет окей.я не знаю, как организовано кэширование в друпалsergip прописываешь нужный css файл в .info файл и в нем определяешь нужный блок через тег body, для страниц пользователей это будет body.page-user а блок с классом content будет доступен так:
body.page-user div.content{...}
Cozmi я это просто к тому, что если этот способ с агрегацией не дружит, это плохо.
vitok Хочу это использовать только в профилях, чтобы убрать таблы профиля вылезающие за экран.
Решение беру из http://forum.drupal.ru/node/11253
В css пишу так
body.page-user div.tabs {
padding: 15;
margin: 15;
}
body.page-user ul.secondary {
clear: both;
width: 100%;
padding: 15;
margin: 15;
}
body.page-user ul.primary li {
display: inline;
float: left;
padding: 15;
margin: 15;
}
Чтот не выходит.
Дополнительные css подключаются с помощью drupal_add_css()
1- Совсем плохой вариант.
2 - Тоже смысла мало.
Можно в page_preprocess добавлять по соотв. критериям, но не нужно.
Нужно просто правильно воспользоваться css классами. Firebug вам в помощь!
Еще вариант: css injector
Стати Cozmi спс, но стили не подключились на странице профиля
что значит не подключились? новый link не появился в коде?... или появился, но стили не работают?
если второе -- стили не работают из-за того, что вы неправильно их прописываете в css, попробуйте более точный отлов элемента
имя_элемента_отец.класс_элемента_отец имя_элемента_сынуля.класс_элемента_сынуля {}
или ваше
body.page-user div.tabs { /*запись означает, что свойства будут изменяться у боди с классом пайдж-юзер, а наврятли вы придумываете классы для боди*/
padding: 15;
margin: 15;
}
замените на
body div.page-user div.tabs {
padding: 15;
margin: 15;
}
ну вы поняли..
2bsyomov, поясните, что тут плохого..?
sergip как выше сказано, Firebug-ом глянь что у тебя там и как с css классами.
bsyomov способов можно найти много, в моем способе не создаются при агрегации доп .css файлы которые надо отдельно качать (не велико дело конечно, но все-же)
ИМХО вилки и ложки используются в разных случаях хотя и тем и тем едят. drupal_add_css() для модулей для тем специально создан .info файл в который подключаются .css и .js файлы. Лично я привык разбивать css стиль по разным файлам в зависимости от файла шаблона к тематизации которого касаются таблицы (для удобства). Или предлагаешь отдельно в каждый шаблон вписывать drupal_add_css() ?
Для таких специфичиских задач как у ТС в друпале по моему и существуют body classes.
А проблемы у ТС могут быть либо из-за отсутствия в теме body classes, по причине что тема своя с нуля, и не знанию о полезности body classes в тематизации, либо из-за не правильных идентификаторов. если первое, то в шаблон просто надо в классы к тегу body добавить
<?php print $body_classes; ?>
А против вашего способа я ничего не имею - прочтите мой пост внимательнее. Так и делается.
Речь как раз была о том, что неверно прописывать линк на стиль в шаблоне и если уж почему-то это надо, то надо использовать соответствующие средства.
И я вообще не предлагаю дополнительные стили подключать, наоборот рекомендую правильно пользоваться селекторами css.
CSS первого примера не будет агрегироваться. Никто никогда не догадается, что вы подключаете его там - соответственно проблемы с дальнейшей поддержкой и.т.п.
По второму примеру - а зачем? Обычно требуется только правильно перекрыть часть стилей какого-либо модуля, а не избавиться от них. Возможна ситуация, когда новые стили перекроют не всё и всё будет ломаться. Т.е. имхо плохая практика. Несколько сот байт заархивированного css того не стоит.
Теперь понял, что 1 и 2 - это к php коду относится... А я то думал пошумим
Спасибо всем. Подключения работают. НО.
еще б загвоздок небыло задавать селекторы которые используются далеко не только в табах. а проблема ведь банальная. добавьте перед ul div.tabs и никаких проблем.
а чего тут смешного? css нужен под некий html. Если шаблон на странице используется, соответственно и css для него тоже. Например некоего блока видимого только на определенных страницах.
А ты предлагаешь все имеющиеся css подключать на всех страницах, нужны/не нужны, без разницы?
Для общих задач, где немного css можно использовать общий style.css. Закешируется браузером и ладно.
vitok написал так:
div.tabs ul.primary li{
display: underline;
float: left;
padding: 1px;
margin: 1px;
}
И текст все равно в одну строчку с табами.
Может кто поможет.
Исходный код страницы
<div class="breadcrumb"><a href="/">Главная</a> » <a href="/admin">Администрирование</a> » <a href="/admin/content" title="Управление содержанием сайта.">Содержание</a> » <a href="/admin/content/node-type/blog">Запись в блоге</a></div> <table class="pagetitle" border="0" cellpadding="0" cellspacing="0">
<tbody><tr>
<td class="pagetitle-l"></td>
<td class="pagetitle-c">
<h1>Запись в блоге</h1>
</td>
<td class="pagetitle-r"></td>
</tr>
</tbody></table>
<div class="tabs"><ul class="tabs primary">
<li><a href="/admin/content/node-type/blog">Редактировать</a></li>
<li class="active"><a href="/admin/content/node-type/blog/fields" class="active">Управлять полями</a></li>
<li><a href="/admin/content/node-type/blog/display">Показать поля</a></li>
<li><a href="/admin/content/node-type/blog/conditional">Conditional fields</a></li>
</ul>
</div>
<form action="/admin/content/node-type/blog/fields" accept-charset="UTF-8" method="post" id="content-field-overview-form">
<div><div>
Add fields and groups to the content type, and arrange them on content display and input forms.<br>You can add a field to a group by dragging it below and to the right of the group.<br>Note: Installing the <a target="_blank" class="ext" href="http://drupal.org/project/advanced_help">Advanced help</a><span class="ext"></span> module will let you access more and better help.</div>
CSS:
font-size: 12px;
}
.tabs a {
font-weight: normal;
line-height: 2.2em;
}
.tabs ul {
padding: 0;
margin: 0;
padding-left: 5px;
border-bottom: solid 0px #ffffff;
margin-bottom: 10px;
}
.tabs ul li {
float: left;
}
.tabs ul li a {
margin: 0px;
padding: 4px 10px;
background: #ffffff;
border: solid 1px #e8f7fd;
}
.tabs ul li a:hover {
text-decoration: underline;
background: #EDF7F9;
border: solid 1px #e8f7fd;
}
.tabs ul li a.active, .tabs ul li.active a {
color: #ffffff;
background: url(bg-bar-lite.png) repeat-x center center;
border: solid 1px #cbebfb;
}
.tabs ul li a.active:hover {
text-decoration: underline;
background: url(bg-bar.png) repeat-x center center;
border: solid 1px #a84d4d;
}
ul.secondary {
}
ul.secondary li {
font-size: 11px;
margin: 0;
padding: 0;
border: solid 0px #ffffff;
}
ul.secondary li a {
margin: 0;
padding: 2px 4px;
margin-right: 2px;
margin-left: 0px;
border: solid 1px #f3e7e7;
}
Куда только не пихаю float: left; все равно текст выравнивается вместе с табами и находится с ним на одном уровне!!! что очень плохо
natbampo без комментариев.
sergip еслиб у меня была подобная проблема помог-бы сразу, а так мне даже не на чем проверить свои мысли. Как понять
они одной высоты или что? или они не переносятся на следующую строку (из-за чего как я понял и весь сыр-бор?) если последнее то то решение которое ты взял, хреновое - это мягко сказано! учим css стили и учимся пользоваться firebug-ом!
white-space: normal;
}
надо было переписать одну строчку системного правила, и стока шума, я б тут вообще забил на body classes и отдельные css файлы и вписал это для всей системы.
vitok, без комментариев.
vitok и всем спс за помощь. Еще сегодня наконец-то со смайликами в CKEditor разобрались http://www.drupal.ru/node/45592?page=1#new.