Главная » Opencart » Делаем перевод статического меню в Opencart

Делаем перевод статического меню в Opencart

Те, кто регулярно сталкивается с разработкой интернет магазинов на данной CMS наверняка уже не раз создавал статические меню, в которые обычно включают оплату, доставку и прочее.

Как вы знаете в Opencart нет возможности создавать подобные меню из под админки, поэтому большинство разработчиков идут в файл /catalog/view/theme/default/template/common/header.tpl, и вместо стандартного вывода меню добавляют вручную нужные им решения, а именно заменяют код:

<div id="menu">
  <ul>
    <?php foreach ($categories as $category) { ?>
    <li><?php if ($category['active']) { ?>
	<a href="<?php echo $category['href']; ?>" class="active"><?php echo $category['name']; ?></a>
	<?php } else { ?>
	<a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
	<?php } ?>

      <?php if ($category['children']) { ?>
      <div>
        <?php for ($i = 0; $i < count($category['children']);) { ?>
        <ul>
          <?php $j = $i + ceil(count($category['children']) / $category['column']); ?>
          <?php for (; $i < $j; $i++) { ?>
          <?php if (isset($category['children'][$i])) { ?>
          <li><a href="<?php echo $category['children'][$i]['href']; ?>"><?php echo $category['children'][$i]['name']; ?></a></li>
          <?php } ?>
          <?php } ?>
        </ul>
        <?php } ?>
      </div>
      <?php } ?>
    </li>
    <?php } ?>
  </ul>
</div>

На нужный им, к примеру:

<div id="menu">
  <ul>
<li><a href="#">Главная</a></li>
<li><a class="akc" href="/index.php?route=product/special">Акции<a></li>
<li><a href="/garantiya">Гарантии</a></li>
<li><a href="/oplata">Оплата</a></li>
  </ul>
</div>

Как видите, названия меню являются статическими. Ну что если нам нужно организовать мультиязычность на сайте, как быть с этой конструкцией?

Решение оказалось довольно простым и каждому оно под силу.

Для примера рассмотрим один из пунктов меню, например «Оплата». Вместе статического значения в файле /catalog/view/theme/default/template/common/header.tpl, вводим переменную, у вас должна получиться конструкция следующего вида:

<li><a href="/oplata"><?php echo $text_oplata; ?></a></li>

Теперь нам необходимо подключить эту переменную в языковом файле движка. Для этого переходим в папку /catalog/language/russian/common/header.php. Если меню находиться в футере, тогда соответственно выбираем footer.php. Добавляем следующую конструкцию:

$_['text_oplata']     = 'Оплата';

Аналогичные действия с файлами проводим и для других языков.  Только уже заменяем слово «Оплата» на нужный нам перевод.

Это был второй этап.

На третьем шаге, нам нужно подключить данную переменную в файле контроллера, а именно в папке /catalog/controller/common/, в ней также в зависимости от расположения меню выбираем либо header.php, либо footer.php.

Находим внизу строку:

$this->render();

И перед ней вставляем следующую строчку:

$this->data['text_oplata'] = $this->language->get('text_oplata');

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

На этом сегодня все, подписывайтесь на обновления сайта, чтобы не пропустить ничего интересного.

5 комментариев

  1. Стоит отметить, что у меня возникали проблемы при подключении SeoPro. После отключения все, норм. Может кто-то знает решение, буду благодарен за совет.

  2. А как поменять урл a href=»/oplata»>? выводит все время один язык

  3. jenya, ссылку менять не нужно, если все настроено корректно, то ссылка остается одинаковой для различных языков. Если вы хотите продвигать мультиязычный сайт, тогда нужно задуматься о поддомене.

  4. Вот спасибо!

  5. Сергей Нечипорук, ссылку менять нужно!!! Для этого в /catalog/view/theme/default/template/common/header.tpl
    делаем так :
    <a href="»>
    и в
    /catalog/controller/common/header.php
    добавляем это:
    $this->data[‘onas’]= $this->url->link(‘information/information&information_id=6’);
    У каждой статьи свой айди, просто ставьте id=1 или 9 и вы угадаете.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *