[Помогите] Добавить пункты в меню с мультиязычностью

Тема в разделе "OpenCart", создана пользователем v@dim, 9 дек 2017.

  1. v@dim

    v@dim

    Регистрация:
    31 окт 2012
    Сообщения:
    132
    Симпатии:
    21
    Доброй ночи!
    Помогите разобраться с мобильным меню
    Вот часть кода контроллера, который выводит то самое мобильное меню, изначально там только категории выводились и появилось нужда добавить пару пунктов типа контакты и блог. Это более- менее понятно на крайняк можно просто добавить в список тупо html с ссылками (как в примере), Но как реализовать мультиязычность для этих пунктов меню (Блог и контакты)

    Заранее спасибо!

    Код:
                foreach($mobile['children'] as $m) {
                    //echo "<pre>"; print_r($m); echo "</pre>";
                    if(!isset($m["name"])) $m["name"] = 'Root';
                    //echo "<pre>"; print_r($m); echo "</pre>";
                    $child_class = '';
                    if(count($m['children'])>0) { $child_class = 'collapse1';} else {
                        $child_class = 'no-close';
                    }
    
                    $html .='<li><span class=" button-view1 '.$child_class.'"><a href="'. $this->url->link('product/category', "path=".$m['id']).'">'.$m["name"].'</a></span>';
    
                            if(isset($m['children'])) {
                                //echo "<pre>"; print_r($m); echo "</pre>";
                                $sub1 = $m['children'] ;
                                $html .='<ul class="level2">';
                                    if(isset($sub1)) {
                                        foreach($sub1 as $child1) {
                                            if(count($child1['children'])>0) { $child_class = 'collapse1';} else {
                                                $child_class = 'no-close';
                                            }
                                            $html .='<li><span class="button-view2   '.$child_class.'"><a href="'. $this->url->link('product/category', "path=".$child1['id']).'">'.$child1["name"].'</a></span>';
                                            if(isset($child1['children'])) {
                                              $html .='<ul class="level3">';
    
                                                $sub2 = $child1['children'] ;
                                                foreach($sub2 as $child2) {
                                                    if(count($child2['children'])>0) { $child_class = 'collapse1';} else {
                                                        $child_class = 'no-close';
                                                    }
                                                    $html .='<li><span class="  '.$child_class.'"><a href="'. $this->url->link('product/category', "path=".$child2['id']).'">'.$child2["name"].'</a></span></li>';
                                                }
                                              $html .='</ul>';
    
                                            }
                                            $html .='</li>';
                                        }
                                    }
                                $html .='</ul>
                                <li><a href="index.php?route=blog/blog">Блог</a></li>
                                <li><a href="index.php?route=information/contact">Контакты</a></li>';
    
                            }
                    $html .='</li>';
                }
            $html .='</ul>'    ;
     
  2. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Как обычно. Если в языковых файлах модуля нет переводов этих пунктов, то добавляете их.
    PHP:
    $_['text_blog'] = 'Блог';
    $_['text_contact'] = 'Контакты';
    и так для каждого языкового файла.
    Затем в контроллере присваиваете переменным их значение в соответствии с текущим языком магазина
    PHP:
    $data['blog'] = $this->language->get('text_blog');
    $data['contact'] = $this->language->get('text_contact');
    И дальше эти переменные используете либо в контроллере в таком же виде, либо в тплке уже как переменные $blog и $contact.
     
    v@dim нравится это.
  3. v@dim

    v@dim

    Регистрация:
    31 окт 2012
    Сообщения:
    132
    Симпатии:
    21

    Просто переменные в контроллере так не работают ($blog и $contact)
    Пробовал еще так '.$menu_blog.' (я просто вообще не шарю) но пишет Notice: Undefined variable: menu_blog in.... Хотя вроде везде все сделал(
     
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Название переменной должно точно соответствовать тому, что написано в $data['*******']

    Но, если это у вас действительно именно контроллер, а не шаблон, то можно использовать напрямую $this->language->get('text_blog') и т.д. без $data.
     
    v@dim нравится это.
  5. v@dim

    v@dim

    Регистрация:
    31 окт 2012
    Сообщения:
    132
    Симпатии:
    21
    Не получается(

    в контроллере наверху пишу:
    $data['menu_blog'] = $this->language->get('menu_blog');
    В нужном месте:
    <li><a href="index.php?route=blog/blog">$this->language->get('menu_blog')</a></li>
    В языковом:
    $_['menu_blog'] = 'Blog';

    Получаем:
    Parse error: syntax error, unexpected 'menu_blog' (T_STRING) in public_html/catalog/controller/extension/module/ochozmegamenu.php on line 56
     
  6. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    А языковой файл подгружен?

    1. В файле public_html/catalog/language/[english/en-gb и т.д. в завис. от версии]/extension/module/ochozmegamenu.php добавляете:
    PHP:
    $_['menu_blog'] = 'Blog';
    2. В файле public_html/catalog/controller/extension/module/ochozmegamenu.php проверяете наличие подгрузки языкового файла в начале нужной функции, если нет, то добавляете
    PHP:
    $this->load->language('extension/module/ochozmegamenu');
    3. Далее в контроллере подгружаете саму переменную
    PHP:
    $html .='<li><a href="index.php?route=blog/blog">' $this->language->get('menu_blog') . '</a></li>';
    Аналогично Контакты.
     
    v@dim нравится это.
  7. v@dim

    v@dim

    Регистрация:
    31 окт 2012
    Сообщения:
    132
    Симпатии:
    21
    Спасибо огромное!
    Языковой файл был подключен, и вроде пробовал такой выриант.... Но тем не менее щас все получилось!
     
  8. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Бессмысленно в данном случае.

    Не хватает символов конкатенации (точек).
    Проблема была не в языковом файле, а в том, что вы php не знаете.
     
    v@dim нравится это.