Разная шапка сайта для разных языков

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

Аватар пользователя Tutmanov Tutmanov 14 марта 2010 в 10:59

Уважаемые друпаловцы!
Нужно что бы в мультиязычном сайте для каждого языка отображалась отдельная шапка. Т.е. например, для русскоязычного сайта одна шапка, а для английского отдельная.
Вот кусочек кода из page.tpl.php

<?php<div>
<?php print $header2?></div></td>
</tr>?>

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

Комментарии

Аватар пользователя bora-89 bora-89 14 марта 2010 в 12:04

Есть такой глобальный объект $language с помощью которого вы и сможете определить текущий язык в нужном файле шаблона.

<?php
global $language;
var_dump($language);
?>

Думаю, дальше все понятно.

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 14 марта 2010 в 12:11

"bora-89" wrote:
Думаю, дальше все понятно.

Все понятно, кроме того - а зачем?

Tutmanov Нужно сделать разные блоки для разных языков, которые поместите в регион header2 (в настройках блока вы можете их привязывать к языкам)

Аватар пользователя bora-89 bora-89 14 марта 2010 в 12:39

to Oleksa@drupal.org
То, что вы написали, больше подходит к выражению "more drupal way"
Обычно, если шапок несколько, их выносят в простые файлы, которые находятся в дириктории темы, и затем включаются в общий шаблон, а не пихают через интерфейс друпала в блоки.
Подход, который вы описали, значительно менее гибкий.

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 14 марта 2010 в 13:00

Хорошо вы пропишите в page.tpl.php
if то-то, то include то-то (например 3 языка)
потом создадите 3 отдельных файла для шапок,
в которых опять же будут те же регионы для блоков (

<div>
<?php print $header2; ?></div>

) и вы будете делать, то что предложил я Smile

Аватар пользователя bora-89 bora-89 14 марта 2010 в 13:46

Опять вы с блоками...

Хотите наглядный пример, который не использует никаких блоков и решает поставленную задачу?

Для начала пишем две разные шапки, пусть это будет header1.tpl.php и header2.tpl.php
С содержанием:

<div style="width: 800px; height: 100px; background: #f0f0f0; border: 1px solid orange">
        My custom header 1...
</div>
<div style="width: 800px; height: 100px; background: red; border: 1px solid orange">
        My custom header 2...
</div>

Соответственно.

Еще, у нас есть page.tpl.php c содержанием что то типа:

...
<div id="header">

<?php
 global $language;
 $lang = $language->language;
  if($lang == ru) {
     include 'header1.tpl.php';
  } elseif($lang == en) {
     include 'header2.tpl.php';
  }
?>
</div>
...

Еще раз повторю, делать все это через блоки не разумно, будь это шапка или другое оформленное меню.

Аватар пользователя Tutmanov Tutmanov 14 марта 2010 в 16:24

bora-89 wrote:
Опять вы с блоками...

Хотите наглядный пример, который не использует никаких блоков и решает поставленную задачу?

Для начала пишем две разные шапки, пусть это будет header1.tpl.php и header2.tpl.php
С содержанием:

<div style="width: 800px; height: 100px; background: #f0f0f0; border: 1px solid orange">
        My custom header 1...
</div>
<div style="width: 800px; height: 100px; background: red; border: 1px solid orange">
        My custom header 2...
</div>

Соответственно.

Еще, у нас есть page.tpl.php c содержанием что то типа:

...
<div id="header">

<?php
 global $language;
 $lang = $language->language;
  if($lang == ru) {
     include 'header1.tpl.php';
  } elseif($lang == en) {
     include 'header2.tpl.php';
  }
?>
</div>
...

Еще раз повторю, делать все это через блоки не разумно, будь это шапка или другое оформленное меню.


Реализовал этим способом. Пока никаких проблем не вижу, работает отлично. Спасибо!

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 14 марта 2010 в 14:17

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

Аватар пользователя yustos.com yustos.com 14 марта 2010 в 15:19

Я бы делал так:
В template.php в phptemplate_preprocess_page(&$vars) (или для вашей темы vashatheme_)написал:

$lang==$vars['language']->language;
$lang=='ru'? $header='tak' : $header='inatche'; //Если два языка. Можете if развернуть, можете вставить case
$vars['header_lang']=$header;

Теперь в page.tpl.php в хидере вставляем:
<?php print $header_lang; ?>
И никаких блоков и глобальных переменных Smile

Аватар пользователя Tutmanov Tutmanov 14 марта 2010 в 16:01

yustos.com wrote:
Я бы делал так:
В template.php в phptemplate_preprocess_page(&$vars) (или для вашей темы vashatheme_)написал:

$lang==$vars['language']->language;
$lang=='ru'? $header='tak' : $header='inatche'; //Если два языка. Можете if развернуть, можете вставить case
$vars['header_lang']=$header;

Теперь в page.tpl.php в хидере вставляем:
<?php print $header_lang; ?>
И никаких блоков и глобальных переменных :)


Можно по подробнее, пожалуйста.

Аватар пользователя yustos.com yustos.com 14 марта 2010 в 20:13

"Ch" wrote:
Наверно тут опечатка?

Да, конечно Smile Рука дрогнула.
"Tutmanov" wrote:
Можно по подробнее, пожалуйста.

Да я в общем-то, как мне кажется, достаточно подробно написал (только опечатку надо исправить). Ну там <?php print $header_lang; ?> в <div id='chto-to'> для красоты можно обернуть. А логику свою поставьте, я же не знаю, что вы в хидер хотите вставить.