переопределить цвет фона тела joomla template.php (фон сайта)

Я использую joomla 2.5 с шаблоном artisteer, я написал пользовательский компонент, который отображает и сортирует список продуктов, сами продукты также являются частью компонента и сохраняются в базе данных. то, что я пытаюсь сделать, это установить другой фон тела для определенных продуктов или категорий продуктов в соответствии с условием if

if (product_category == 1):
   <body id="background1">
   ...

но проблема в том, что <body id="someID"> загружается в template.php до загрузки компонента, поэтому даже если я установлю фон тела в компоненте, фон не изменится. однако, если я удалю деклерацию идентификатора css тела из template.php и оставлю его как <body> вместо <body id="someID">, тогда объявление компонента <body id...> правильно установит фон, но тогда любая другая страница, которая не связана с компонентом, имеет пустой белый задний план.

то, что я думаю, что мне нужно сделать, это найти способ установить фон по умолчанию, если фон не определен в другом месте, или каким-то образом переопределить текущий фон и заставить компонент снова загрузить фон тела, я относительно новичок в php и css, но с небольшой помощью, и я думаю, что смогу найти свой путь :) любая помощь будет очень признательна!!! Спасибо!


person AssafW    schedule 28.02.2013    source источник


Ответы (4)


Попробуйте сделать что-то вроде этого:

<?php
$doc = JFactory::getDocument();
  if(product_category == 1){
     $css = 'body {'
           .'background: url(' . JURI::root() . 'components/com_yourcomponent/file.jpg) !important;'
           .'}';
     $doc->addScriptDeclaration($css);
  }    
?>

Вам нужно будет изменить путь фона на все, что вам нужно.

Надеюсь это поможет

person Lodder    schedule 28.02.2013

В файле template.php перед загрузкой тела вы можете сделать так

if (JRequest::getCmd('option') == 'com_mycontent'){
    echo '<body id="myid">';
}
else
    echo '<body id="anotherid">';
person Marko D    schedule 28.02.2013

Привет, @marko и @Lodder, большое спасибо за ваш ответ! К сожалению, предложенные вами решения не сработали, потому что таблица стилей загружается до компонента, поэтому любые новые изменения дизайна из кода шаблона не повлияют на дизайн шаблона. и, к сожалению, поскольку template.php не может инициализировать veriables компонента (например, Category_id), я не могу создать условие и проверить, что такое category_Id, и соответственно изменить фон... Я нашел простое решение, которое реализует этот код внутри моего кода компонента :

app =& JFactory::getApplication();

если ($category_id == 1) $app->setTemplate("template2");
иначе ....

$this просто устанавливает новый шаблон в соответствии с category_id, я знаю, что это неэффективно с точки зрения памяти, и время загрузки больше, и худшая часть заключается в том, что мне нужно создать новый шаблон для каждой категории... но это помогает. .. Буду признателен, если вы придумаете лучшее решение?

Большое спасибо, ребята!

person AssafW    schedule 04.03.2013

На самом деле, вы можете просто использовать встроенный параметр суффикса класса страницы в пункте меню, чтобы выполнить то, что вы хотите. Если у вас есть собственный шаблон, добавьте в него это:

<?php
$app = JFactory::getApplication('site');
$params =  & $app->getParams('com_content');
$pageclass = trim($params->get('pageclass_sfx'));
?>
<body id="<?php echo $pageclass ? $pageclass : 'default'; ?>">

Большинство авторитетных разработчиков шаблонов включают код для суффикса класса страницы, поэтому вам может не потребоваться ничего делать, кроме как добавить что-то в параметр страницы, которую вы хотите настроить.

Добавляя идентификатор в тег body, вы можете легко и точно переопределить любой CSS на странице.

person Brent Friar    schedule 04.03.2013