OC 1.5.x Создание 2-ух разных меню

Тема в разделе "Общие вопросы", создана пользователем fittech, 25 ноя 2015.

  1. fittech

    fittech Пользователь

    Сообщения:
    62
    Симпатии:
    0
    Как в OpenCart 1.5 создать два разных меню, точнее как в каталоге при создании категории или подкатегории выбирать где показывать(в меню 1 или в меню 2)?[​IMG]
     
  2. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    641
    поставить модуль который может делать произвольное меню и туда и вставлять ссылки нужные.
    А чтобы галочкой из категории, такого не видел.
     
  3. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    221
    Может Вам такой вариант подойдет:
    Сперва делаем бэкап базы данных.
    0. После чего выполняете запрос! (если у Вас суффикс базы другой то измените в запросе "oc_" )
    Код:
    ALTER TABLE oc_category ADD COLUMN top INT(1) NOT NULL DEFAULT '0' AFTER top2


    1. /catalog/controller/common/header.php
    После:
    PHP:
    // Search        

            
    if (isset($this->request->get['search'])) {
                
    $this->data['search'] = $this->request->get['search'];
            } else {
                
    $this->data['search'] = '';
            }
    Вставить:
    PHP:
    if (isset($this->request->get['path'])) {
                
    $parts explode('_', (string)$this->request->get['path']);
            } else {
                
    $parts = array();
            }
        
        
            if (isset(
    $parts[0])) {
                
    $this->data['category_id'] = $parts[0];
            } else {
                
    $this->data['category_id'] = 0;
            }
        
            if (isset(
    $parts[1])) {
                
    $this->data['child_id'] = $parts[1];
            } else {
                
    $this->data['child_id'] = 0;
            }
            if (isset(
    $parts[2])) {
                
    $this->data['ch3_id'] = $parts[2];
            } else {
                
    $this->data['ch3_id'] = 0;
            }
    Перед:
    PHP:
     $this->children = array(
    Вставить:
    PHP:
    $categories2 $this->model_catalog_category->getCategories(0);
        
            foreach (
    $categories2 as $category) {
                if (
    $category['top2']) {
                    
    // Level 2
                    
    $children_data = array();

                    
    $children $this->model_catalog_category->getCategories($category['category_id']);

                    foreach (
    $children as $child) {
                        
    $data = array(
                            
    'filter_category_id'  => $child['category_id'],
                            
    'filter_sub_category' => true
                        
    );

                        
    $product_total $this->model_catalog_product->getTotalProducts($data);

                        
    $children_data[] = array(
                            
    'name'  => $child['name'] . ($this->config->get('config_product_count') ? ' (' $product_total ')' ''),
                            
    'href'  => $this->url->link('product/category''path=' $category['category_id'] . '_' $child['category_id'])
                        );                    
                    }

                    
    // Level 1
                    
    $this->data['categories2'][] = array(
                        
    'name'     => $category['name'],
                        
    'children' => $children_data,
                        
    'column'   => $category['column'] ? $category['column'] : 1,
                        
    'href'     => $this->url->link('product/category''path=' $category['category_id'])
                    );
                }
            }

    2. /catalog/view/theme/ВАША_ТЕМА/template/common/header.tpl
    В нужном месте шаблона вставить.
    PHP:
    <?php if ($categories2) { ?>
      <ul>
        <?php foreach ($categories2 as $category) { ?>
        <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
          <?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>
    <?php ?>


    АДМИКА

    1. /admin/controller/catalog/admin/controller/catalog/category.php
    Найти:
    PHP:
    $this->data['entry_top'] = $this->language->get('entry_top');
    Вставить
    PHP:
    $this->data['entry_top2'] = $this->language->get('entry_top2');
    Далее найти
    PHP:
    if (isset($this->request->post['top'])) {
                
    $this->data['top'] = $this->request->post['top'];
            } elseif (!empty(
    $category_info)) {
                
    $this->data['top'] = $category_info['top'];
            } else {
                
    $this->data['top'] = 0;
            }
    После добавить
    PHP:
    if (isset($this->request->post['top2'])) {
                
    $this->data['top2'] = $this->request->post['top2'];
            } elseif (!empty(
    $category_info)) {
                
    $this->data['top2'] = $category_info['top2'];
            } else {
                
    $this->data['top2'] = 0;
            }
    2. /admin/model/catalog/category.php
    Найти:
    PHP:
    public function addCategory($data) {
            
    $this->db->query("INSERT INTO " DB_PREFIX "category SET parent_id = '" . (int)$data['parent_id'] . "', `top` = '" . (isset($data['top']) ? (int)$data['top'] : 0) . "', `column` = '" . (int)$data['column'] . "', sort_order = '" . (int)$data['sort_order'] . "', status = '" . (int)$data['status'] . "', date_modified = NOW(), date_added = NOW()");
    Заменить на
    PHP:
    public function addCategory($data) {
            
    $this->db->query("INSERT INTO " DB_PREFIX "category SET parent_id = '" . (int)$data['parent_id'] . "', `top` = '" . (isset($data['top']) ? (int)$data['top'] : 0) . "', `top2` = '" . (isset($data['top2']) ? (int)$data['top2'] : 0) . "', `column` = '" . (int)$data['column'] . "', sort_order = '" . (int)$data['sort_order'] . "', status = '" . (int)$data['status'] . "', date_modified = NOW(), date_added = NOW()");    
    Найти
    PHP:
    public function editCategory($category_id$data) {
            
    $this->db->query("UPDATE " DB_PREFIX "category SET parent_id = '" . (int)$data['parent_id'] . "', `top` = '" . (isset($data['top']) ? (int)$data['top'] : 0) . "', `column` = '" . (int)$data['column'] . "', sort_order = '" . (int)$data['sort_order'] . "', status = '" . (int)$data['status'] . "', date_modified = NOW() WHERE category_id = '" . (int)$category_id "'");
    Заменить
    PHP:
    public function editCategory($category_id$data) {
            
    $this->db->query("UPDATE " DB_PREFIX "category SET parent_id = '" . (int)$data['parent_id'] . "', `top` = '" . (isset($data['top']) ? (int)$data['top'] : 0) . "', `top2` = '" . (isset($data['top2']) ? (int)$data['top2'] : 0) . "', `column` = '" . (int)$data['column'] . "', sort_order = '" . (int)$data['sort_order'] . "', status = '" . (int)$data['status'] . "', date_modified = NOW() WHERE category_id = '" . (int)$category_id "'");    

    Или в эти функции добавить
    PHP:
    `top2` = '" . (isset($data['top2']) ? (int)$data['top2'] : 0) . "',
    3. /admin/language/russian/catalog/category.php
    добавить
    PHP:
    $_['entry_top2']              = 'Второе меню';
    4. /admin/view/template/catalog/category_form.tpl
    найти
    PHP:
    <tr>
                  <td><?php echo $entry_top?></td>
                  <td><?php if ($top) { ?>
                    <input type="checkbox" name="top" value="1" checked="checked" />
                    <?php } else { ?>
                    <input type="checkbox" name="top" value="1" />
                    <?php ?></td>
                </tr>
    Ниже
    PHP:
    <tr>
                  <td><?php echo $entry_top2?></td>
                  <td><?php if ($top2) { ?>
                    <input type="checkbox" name="top2" value="1" checked="checked" />
                    <?php } else { ?>
                    <input type="checkbox" name="top2" value="1" />
                    <?php ?></td>
                </tr>
    В итоге у Вас будет аналог первого меню, с выводом род.категории или подкатегории
    Вроде ничего не забыл, будут ошибки - пишите.
     
    Последнее редактирование: 25 ноя 2015
    Romans, Ален и Slait нравится это.