Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


max1985
 Погделиться

Рекомендованные сообещёния

Не подскажите есть ли икой модуль или реализация? Надо чтоб при создании категории можно было с Связях указать Главную категорию и Показывать в категориях (как в товаре на 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 года спустя...

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

Ссылка на комменирий
Погделиться на других сайих


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.