Отдельный CSS файл для определенных страниц

Главные вкладки

Комментарии

Аватар пользователя Cozmi Cozmi 13 декабря 2010 в 19:11

Как вариант
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

Аватар пользователя vitok vitok 13 декабря 2010 в 18:44

В друпале ты можешь использовать сколько угодно 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.

Аватар пользователя vitok vitok 13 декабря 2010 в 18:51

"Cozmi" wrote:
Как вариант...

Cozmi а можешь просветить что происходит в таком способе при включенном кешировании и агрегации css файлов? создаются несколько версий css файла для разных страниц?

Аватар пользователя Cozmi Cozmi 13 декабря 2010 в 19:04

думаю, если добавить все стили в [название темы].info, потом удалить их в preprocess_page, чтоб не мешались, то все будет окей.я не знаю, как организовано кэширование в друпал

Аватар пользователя vitok vitok 13 декабря 2010 в 19:16

sergip прописываешь нужный css файл в .info файл и в нем определяешь нужный блок через тег body, для страниц пользователей это будет body.page-user а блок с классом content будет доступен так:

body.page-user div.content{...}

Cozmi я это просто к тому, что если этот способ с агрегацией не дружит, это плохо.

Аватар пользователя sergip sergip 13 декабря 2010 в 19:40

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;
}

Чтот не выходит.

Аватар пользователя bsyomov bsyomov 13 декабря 2010 в 20:08

Дополнительные css подключаются с помощью drupal_add_css()

"Cozmi" wrote:
Как вариант

1- Совсем плохой вариант.
2 - Тоже смысла мало.
Quote:

Можно ли в друпале для определенных страниц (user/*) использовать другой css файл?

Можно в page_preprocess добавлять по соотв. критериям, но не нужно.
Нужно просто правильно воспользоваться css классами. Firebug вам в помощь!

Аватар пользователя Cozmi Cozmi 13 декабря 2010 в 22:59

sergip wrote:
Стати Cozmi спс, но стили не подключились на странице профиля

что значит не подключились? новый link не появился в коде?... или появился, но стили не работают?
если второе -- стили не работают из-за того, что вы неправильно их прописываете в css, попробуйте более точный отлов элемента
имя_элемента_отец.класс_элемента_отец имя_элемента_сынуля.класс_элемента_сынуля {}

или ваше
body.page-user div.tabs { /*запись означает, что свойства будут изменяться у боди с классом пайдж-юзер, а наврятли вы придумываете классы для боди*/
padding: 15;
margin: 15;
}
замените на
body div.page-user div.tabs {
padding: 15;
margin: 15;
}
ну вы поняли..

2bsyomov, поясните, что тут плохого..?

Аватар пользователя vitok vitok 13 декабря 2010 в 22:07

sergip как выше сказано, Firebug-ом глянь что у тебя там и как с css классами.

bsyomov способов можно найти много, в моем способе не создаются при агрегации доп .css файлы которые надо отдельно качать (не велико дело конечно, но все-же)
ИМХО вилки и ложки используются в разных случаях хотя и тем и тем едят. drupal_add_css() для модулей для тем специально создан .info файл в который подключаются .css и .js файлы. Лично я привык разбивать css стиль по разным файлам в зависимости от файла шаблона к тематизации которого касаются таблицы (для удобства). Или предлагаешь отдельно в каждый шаблон вписывать drupal_add_css() ? Smile
Для таких специфичиских задач как у ТС в друпале по моему и существуют body classes.

А проблемы у ТС могут быть либо из-за отсутствия в теме body classes, по причине что тема своя с нуля, и не знанию о полезности body classes в тематизации, либо из-за не правильных идентификаторов. если первое, то в шаблон просто надо в классы к тегу body добавить <?php print $body_classes?>

Аватар пользователя bsyomov bsyomov 13 декабря 2010 в 23:16

"vitok" wrote:
пособов можно найти много, в моем способе не создаются при агрегации доп .css файлы которые надо отдельно качать (не велико дело конечно, но все-же)

А против вашего способа я ничего не имею - прочтите мой пост внимательнее. Так и делается.
Речь как раз была о том, что неверно прописывать линк на стиль в шаблоне и если уж почему-то это надо, то надо использовать соответствующие средства.
И я вообще не предлагаю дополнительные стили подключать, наоборот рекомендую правильно пользоваться селекторами css.

"Cozmi" wrote:
2bsyomov, поясните, что тут плохого..?

CSS первого примера не будет агрегироваться. Никто никогда не догадается, что вы подключаете его там - соответственно проблемы с дальнейшей поддержкой и.т.п.
По второму примеру - а зачем? Обычно требуется только правильно перекрыть часть стилей какого-либо модуля, а не избавиться от них. Возможна ситуация, когда новые стили перекроют не всё и всё будет ломаться. Т.е. имхо плохая практика. Несколько сот байт заархивированного css того не стоит.

Аватар пользователя vitok vitok 13 декабря 2010 в 23:13

"bsyomov" wrote:
А против вашего способа я ничего не имею - прочтите мой пост внимательнее.

Теперь понял, что 1 и 2 - это к php коду относится... А я то думал пошумим Smile

Аватар пользователя sergip sergip 13 декабря 2010 в 23:19

Спасибо всем. Подключения работают. НО.

"sergip" wrote:
Решение беру из http://forum.drupal.ru/node/11253[/quote]

Тут загвоздка. Кроме табов в один див завернули текст и он после этого находится с табами на одном уровне. ЧТО очень не хорошо.

Не по теме топика - но может поможет кто???

Аватар пользователя vitok vitok 14 декабря 2010 в 0:16

еще б загвоздок небыло задавать селекторы которые используются далеко не только в табах. а проблема ведь банальная. добавьте перед ul div.tabs и никаких проблем.

Аватар пользователя natbampo natbampo 14 декабря 2010 в 8:41

"vitok" wrote:
Или предлагаешь отдельно в каждый шаблон вписывать drupal_add_css() ? :)

а чего тут смешного? css нужен под некий html. Если шаблон на странице используется, соответственно и css для него тоже. Например некоего блока видимого только на определенных страницах.
А ты предлагаешь все имеющиеся css подключать на всех страницах, нужны/не нужны, без разницы?
Для общих задач, где немного css можно использовать общий style.css. Закешируется браузером и ладно.

Аватар пользователя sergip sergip 14 декабря 2010 в 9:24

vitok написал так:

div.tabs ul.primary li{
display: underline;
float: left;
padding: 1px;
margin: 1px;
}

И текст все равно в одну строчку с табами.

Аватар пользователя sergip sergip 14 декабря 2010 в 9:48

Может кто поможет.

Исходный код страницы

<div id="main">
    <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:

.tabs {
        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; все равно текст выравнивается вместе с табами и находится с ним на одном уровне!!! что очень плохо

Аватар пользователя vitok vitok 14 декабря 2010 в 12:06

natbampo без комментариев.

sergip еслиб у меня была подобная проблема помог-бы сразу, а так мне даже не на чем проверить свои мысли. Как понять

"sergip" wrote:
И текст все равно в одну строчку с табами.

они одной высоты или что? или они не переносятся на следующую строку (из-за чего как я понял и весь сыр-бор?) если последнее то то решение которое ты взял, хреновое - это мягко сказано! учим css стили и учимся пользоваться firebug-ом!

body.page-user div.tabs ul.primary {
    white-space: normal;
}

надо было переписать одну строчку системного правила, и стока шума, я б тут вообще забил на body classes и отдельные css файлы и вписал это для всей системы.