Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Главная категория и Показывать в категориях для Подкатегории


max1985

Recommended Posts

Не подскажите есть ли такой модуль или реализация? Надо чтоб при создании категории можно было с Связях указать Главную категорию и Показывать в категориях (как в товаре на ocStory, только для категорий). А в ссылке на эту категорию использовался seo url из Главной категории что-бы не было дублей.

  • +1 1
Надіслати
Поділитися на інших сайтах

В общем решил сделать выборку категорий, которые будут выводиться дополнительно к подкатегориям. 

Начал так. Добавил новую таблицу в базе:

CREATE TABLE IF NOT EXISTS `oc_category_dop` (
  `category_id` int(11) NOT NULL,
  `parent_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

где oc поменял на свой

 

В admin/view/template/catalog/category_form.tpl

Добавил, после выбора Родительской категории:

<div class="form-group">
               <label class="col-sm-2 control-label" for="input-category"><span data-toggle="tooltip" title="<?php echo $help_category; ?>"><?php echo $entry_category; ?></span></label>
               <div class="col-sm-10">
                  <input type="text" name="category" value="" placeholder="<?php echo $entry_category; ?>" id="input-category" class="form-control" />
                 <div id="product-category" class="well well-sm" style="height: 150px; overflow: auto;">
                    <?php foreach ($product_categories as $product_category) { ?>
                    <div id="product-category<?php echo $product_category['category_id']; ?>"><i class="fa fa-minus-circle"></i> <?php echo $product_category['name']; ?>
                      <input type="hidden" name="product_category[]" value="<?php echo $product_category['category_id']; ?>" />
                    </div>
                    <?php } ?>
                  </div>
               </div>
              </div>

и скрипт в конце файла

<script type="text/javascript"><!--
$('input[name=\'category\']').autocomplete({
 'source': function(request, response) {
  $.ajax({
   url: 'index.php?route=catalog/category/autocomplete&token=<?php echo $token; ?>&filter_name=' +  encodeURIComponent(request),
   dataType: 'json',   
   success: function(json) {
    response($.map(json, function(item) {
     return {
      label: item['name'],
      value: item['category_id']
     }
    }));
   }
  });
 },
 'select': function(item) {
  $('input[name=\'category\']').val('');
  
  $('#product-category' + item['value']).remove();
  
  $('#product-category').append('<div id="product-category' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_category[]" value="' + item['value'] + '" /></div>'); 
 }
});
$('#product-category').delegate('.fa-minus-circle', 'click', function() {
 $(this).parent().remove();
});  
  $('#product-category' + item['value']).remove();
  
  $('#product-category').append('<div id="product-category' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_category[]" value="' + item['value'] + '" /></div>'); 
 }
});
$('#product-category').delegate('.fa-minus-circle', 'click', function() {
 $(this).parent().remove();
});
//--></script>

В admin/language/*/catalog/category.php добавил:

$_['entry_category']         = 'Дополнительные категории';
$_['help_category']          = 'Дополнительные категории для отображения';

В admin/controller/catalog/category.php в protected function getForm() { добавил:

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

и

 if (isset($this->request->post['product_category'])) {
   $categories1 = $this->request->post['product_category'];
  } elseif (isset($this->request->get['category_id'])) {
   $categories1 = $this->model_catalog_category->getParentCategories($this->request->get['category_id']);
  } else {
   $categories1 = array();
                }
              
                $data['product_categories'] = array();
               foreach ($categories1 as $category_id) {
                        $category_info = $this->model_catalog_category->getCategory($category_id);

   if ($category_info) {
    $data['product_categories'][] = array(
     'category_id' => $category_info['category_id'],
     'name' => ($category_info['path']) ? $category_info['path'] . ' > ' . $category_info['name'] : $category_info['name']
    );
   }
  }

и в protected function getList() { добавил

$data['categories1'] = array();		
$results1 = $this->model_catalog_category->getCategories($filter_data);	
foreach ($results1 as $result1) {
$multipleCategories = $this->model_catalog_category->getMultipleParentCategories($result1['category_id']);
   $data['categories1'][] = array(
    'category_id' => $result1['category_id'],
    'name'        => $multipleCategories[0]['parentcategories'].$result1['name'],
    'sort_order'  => $result1['sort_order'],
    'edit'        => $this->url->link('catalog/category/edit', 'token=' . $this->session->data['token'] . '&category_id=' . $result1['category_id'] . $url, 'SSL'),
    'delete'      => $this->url->link('catalog/category/delete', 'token=' . $this->session->data['token'] . '&category_id=' . $result1['category_id'] . $url, 'SSL')
   );
}

Теперь идем в модель admin/model/catalog/category.php

и добавляем новый метод

public function getParentCategories($category_id) {
  $parent_category_data = array();

  $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_dop WHERE category_id = '" . (int)$category_id . "'");

  foreach ($query->rows as $result) {
   $parent_category_data[] = $result['parent_id'];
  }

  return $parent_category_data;
}

и

public function getMultipleParentCategories($category_id) {

$query = $this->db->query("SELECT CONCAT( CONCAT( '(', GROUP_CONCAT( cd1.name ORDER BY cp.level SEPARATOR ')(' ) ) , ') >' ) AS parentcategories FROM " . DB_PREFIX . "category_dop cmprt LEFT JOIN " . DB_PREFIX . "category_description cd1 ON ( cmprt.parent_id = cd1.category_id ) LEFT JOIN " . DB_PREFIX . "category_path cp ON ( cp.category_id = cmprt.parent_id ) WHERE cmprt.category_id='" . (int)$category_id . "'");             
  
              
  return $query->rows;
 }

Далее в этом же файле в моделе public function editCategory($category_id, $data) {

добавляем

$this->db->query("DELETE FROM " . DB_PREFIX . "category_dop WHERE category_id = '" . (int)$category_id . "'");
        if (isset($data['product_category'])) {
            foreach ($data['product_category'] as $parent_id) {
                            echo "Category parentid". $parent_id;
                 $this->db->query("INSERT INTO " . DB_PREFIX . "category_dop SET category_id = '" . (int)$category_id . "', parent_id = '" . (int)$parent_id . "'");
            }
        }

в моделе public function addCategory($data) {

if (isset($data['product_category'])) {
            foreach ($data['product_category'] as $parent_id) {
                            echo "Category parentid". $parent_id;
                 $this->db->query("INSERT INTO " . DB_PREFIX . "category_dop SET category_id = '" . (int)$category_id . "', parent_id = '" . (int)$parent_id . "'");
            }
        }

По идее с этого момента должны выбираться категории и добавляться в базу при сохранении категории. Но они даже не выбираются, подскажите что пропустил или не так сделал! 

Змінено користувачем max1985
Надіслати
Поділитися на інших сайтах

В общем получалось добавлять категории в базу, проблема была в скрипте. 

https://prnt.sc/mr7ybw

Теперь пытаюсь вывести эти категории что добавляю на сайте. 

В моделе добавляю 

public function getParentCategories($category_id) {
  $parent_category_data = array();

  $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_dop WHERE category_id = '" . (int)$category_id . "'");

  foreach ($query->rows as $result) {
   $parent_category_data[] = $result['parent_id'];
  }

  return $parent_category_data;
}

В контроллере

if (isset($this->request->post['product_category'])) {
   $categories1 = $this->request->post['product_category'];
  } elseif (isset($this->request->get['category_id'])) {
   $categories1 = $this->model_catalog_category->getParentCategories($this->request->get['category_id']);
  } else {
   $categories1 = array();
}
              
$data['product_categories'] = array();
foreach ($categories1 as $category_id) {
$category_info = $this->model_catalog_category->getCategory($category_id);
   if ($category_info) {
    $data['product_categories'][] = array(
     'category_id' => $category_info['category_id'],
     'name' => $category_info['name']
    );
   }
}

и в шаблоне вывожу так

<?php foreach ($product_categories as $product_category) { ?>
                    <li class="col-lg-3 col-md-3 col-sm-6 col-xs-6 col-mobile"><?php echo $product_category['name']; ?></li>
<?php } ?>

Но что-то ничего не выводиться. Помогите пожалуйста разобраться!

Змінено користувачем max1985
Надіслати
Поділитися на інших сайтах

  • 2 years later...

У вас что-нибудь получилось? Поделитесь результатом.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.