Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

iBeautiful
 Поделиться

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

Помогите реализовать в разных категориях сортировку товара, ocStore 2.1.0.2.1 чистая

 

Вот по этой статье https://for-opencart.com/additions/different-sort-order вываливается ошибка при заходе в любую из категории

 

Notice: Error: Unknown column 'p2c.category_order' in 'order clause'
Error No: 1054
SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM product_to_category p2c LEFT JOIN product p ON (p2c.product_id = p.product_id) LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.category_id = '18' GROUP BY p.product_id ORDER BY p2c.category_order ASC, LCASE(pd.name) ASC LIMIT 0,15 in /sait/www/system/library/db/mysqli.php on line 41Notice: Trying to get property of non-object in /sait/www/catalog/model/catalog/product.php on line 193Warning: Invalid argument supplied for foreach() in /sait/www/catalog/model/catalog/product.php on line 193

 

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


54 minutes ago, iBeautiful said:

Помогите реализовать в разных категориях сортировку товара, ocStore 2.1.0.2.1 чистая

 

Вот по этой статье https://for-opencart.com/additions/different-sort-order вываливается ошибка при заходе в любую из категории

 


Notice: Error: Unknown column 'p2c.category_order' in 'order clause'
Error No: 1054
SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special FROM product_to_category p2c LEFT JOIN product p ON (p2c.product_id = p.product_id) LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.category_id = '18' GROUP BY p.product_id ORDER BY p2c.category_order ASC, LCASE(pd.name) ASC LIMIT 0,15 in /sait/www/system/library/db/mysqli.php on line 41Notice: Trying to get property of non-object in /sait/www/catalog/model/catalog/product.php on line 193Warning: Invalid argument supplied for foreach() in /sait/www/catalog/model/catalog/product.php on line 193

 

там ошибка в наименовании полей

в базе данных первым же шагом нужно создавать поле с именем category_order  а не category_sort

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

Ошибка пропала, теперь просто в доп. категории не добавляется товар, только в главную работает, как исправить?

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


2 hours ago, iBeautiful said:

Ошибка пропала, теперь просто в доп. категории не добавляется товар, только в главную работает, как исправить?

в шаблоне нужно изменить имя поля в чекбоксах выбираемых категорий на name="product_category[<?php echo $category['category_id']; ?>][category_id]"

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

1 минуту назад, Blast сказал:

в шаблоне нужно изменить имя поля в чекбоксах выбираемых категорий на name="product_category[<?php echo $category['category_id']; ?>][category_id]"

Спасибо, но это не помогает, отмечаешь чекбокс, сохраняешь, заходишь снова в товар и он не отмечен

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


14 minutes ago, iBeautiful said:

Спасибо, но это не помогает, отмечаешь чекбокс, сохраняешь, заходишь снова в товар и он не отмечен

сделайте дамп данных и посмотрите есть ли вообще в передаваемых данных инфа о категориях

в файле admin/model/catalog/product.php после

if (isset($data['product_category'])) {

добавьте

var_dump($data['product_category']); die;

 

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

1 час назад, Blast сказал:

сделайте дамп данных и посмотрите есть ли вообще в передаваемых данных инфа о категориях

в файле admin/model/catalog/product.php после


if (isset($data['product_category'])) {

 добавьте

var_dump($data['product_category']); die;

  

Вот

Спойлер


array(38) {
  [34]=>
  array(2) {
    ["category_id"]=>
    string(2) "34"
    ["category_order"]=>
    string(4) "1234"
  }
  [43]=>
  array(2) {
    ["category_id"]=>
    string(2) "43"
    ["category_order"]=>
    string(4) "5555"
  }
  [44]=>
  array(2) {
    ["category_id"]=>
    string(2) "44"
    ["category_order"]=>
    string(4) "6666"
  }
  [47]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [48]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [49]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [50]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [51]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [52]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [58]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [53]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [54]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [55]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [56]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [38]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [37]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [39]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [40]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [41]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [42]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [33]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [25]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [32]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [28]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [35]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [36]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [29]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [30]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [31]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [20]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [27]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [26]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [18]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [46]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [45]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [57]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [17]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
  [24]=>
  array(1) {
    ["category_order"]=>
    string(0) ""
  }
}

 

Всё печально так :(

Изменено пользователем iBeautiful
Выбраны некоторые чекбоксы и внесены данные
Ссылка на комментарий
Поделиться на других сайтах


а введенные данные по сортировкам сохраняются?

1234, 5555?

для достоверности можно прямо в базу заглянуть

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

Только что, Blast сказал:

а введенные данные по сортировкам сохраняются?

1234, 5555?

Нет, я открываю заново товар и ничего не сохранено

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


17 minutes ago, iBeautiful said:

Нет, я открываю заново товар и ничего не сохранено

ну так трудно гадать

нужно смотреть данные на каждом этапе. До записи в БД в разных условиях. Потом посмотреть в самой БД. Сделать дамп в контроллере после получения данных строкой

$this->model_catalog_product->getProductCategorySorts($this->request->get['product_id']);

Потом во вьюшке. Так и выяснять где они теряются

 

В модели надеюсь внесли изменения и в метод AddProduct и editProduct

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

7 минут назад, Blast сказал:

ну так трудно гадать

нужно смотреть данные на каждом этапе. До записи в БД в разных условиях. Потом посмотреть в самой БД. Сделать дамп в контроллере после получения данных строкой


$this->model_catalog_product->getProductCategorySorts($this->request->get['product_id']);

 Потом во вьюшке. Так и выяснять где они теряются

 

В модели надеюсь внесли изменения и в метод AddProduct и editProduct

Спасибо, удалось добиться почти точной работы, всё заработало, НО единственное, при заходе снова в товар, не отображает цифры с под категории просто везде пишет "Сорт"

 

Вот такая сейчас таблица в /sait/www/admin/view/template/catalog/product_form.tpl как подправить? 

                    <table class="table table-striped">
                    <?php foreach ($categories as $category) { ?>
                    <tr>
                      <td class="checkbox">
                        <label>
                          <?php if (in_array($category['category_id'], $product_category)) { ?>
                          <input type="checkbox" name="product_category[<?php echo $category['category_id']; ?>][category_id]" value="<?php echo $category['category_id']; ?>" checked="checked" />
                          <?php echo $category['name']; ?>
                          <?php } else { ?>
                          <input type="checkbox" name="product_category[<?php echo $category['category_id']; ?>][category_id]" value="<?php echo $category['category_id']; ?>" />
                          <?php echo $category['name']; ?>
                          <?php } ?>
                        </label>
			<input type="text" class="hided_text" placeholder="Сорт" name="product_category[<?php echo $category['category_id']; ?>][category_order]" value="<?php echo (isset($product_category_sorts[$category['category_id']]) && $product_category_sorts[$category['category_id']] >0 ) ? $product_category_sorts[$category['category_id']]:''; ?>" />
                      </td>
                    </tr>
                    <?php } ?>
                    </table>

 

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


так визуально в коде все норм

но алгоритм проверки не меняется

Quote

нужно смотреть данные на каждом этапе. До записи в БД в разных условиях. Потом посмотреть в самой БД. Сделать дамп в контроллере после получения данных строкой


$this->model_catalog_product->getProductCategorySorts($this->request->get['product_id']);

Потом во вьюшке. Так и выяснять где они теряются

 

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

Может где-то здесь проблема, как его дампануть/проверить?

 

	public function getProductCategorySorts($product_id) {
		$product_category_data = array();
		
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
		
		foreach ($query->rows as $result) {
			$product_category_data[$result['category_id']] = $result['category_order'];
		}
		
		return $product_category_data;
	}
	

 

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


28 минут назад, Blast сказал:

так и в чем была проблема то?

Не правильно вставила код в файле /sait/www/admin/controller/catalog/product.php

 

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


8 hours ago, iBeautiful said:

Не правильно вставила код в файле /sait/www/admin/controller/catalog/product.php

 

есть кстати подозрение, что если при редактировании товара вы, например, не заполните обязательные поля и опенкарт вернет вас на эту же страницу редактирования этого же товара, то вся сортировка собьется(в БД останется). Проверьте, не сохраняя повторно товар

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

3 часа назад, Blast сказал:

есть кстати подозрение, что если при редактировании товара вы, например, не заполните обязательные поля и опенкарт вернет вас на эту же страницу редактирования этого же товара, то вся сортировка собьется(в БД останется). Проверьте, не сохраняя повторно товар

Действительно, ошибка показалась, как такое исправить?

 

<b>Notice</b>: Array to string conversion in <b>/sait/www/admin/view/template/catalog/product_form.tpl</b> on line <b>384</b>Array

384 стр

<input type="text" class="hided_text" placeholder="sort" name="product_category[<?php echo $category['category_id']; ?>][category_order]" value="<?php echo (isset($product_category_sorts[$category['category_id']]) && $product_category_sorts[$category['category_id']] >0 ) ? $product_category_sorts[$category['category_id']]:''; ?>" />

 

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


6 hours ago, iBeautiful said:

Действительно, ошибка показалась, как такое исправить?

замените

$data['product_category_sorts'] = $this->request->post['product_category'];

на

$data['product_category_sorts'] = array();
foreach($this->request->post['product_category'] as $category_id => $category) {
	$data['product_category_sorts'][$category_id] = $category['category_order'];
}

 

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

2 часа назад, Blast сказал:

замените


$data['product_category_sorts'] = $this->request->post['product_category'];

 на


$data['product_category_sorts'] = array();
foreach($this->request->post['product_category'] as $category_id => $category) {
	$data['product_category_sorts'][$category_id] = $category['category_order'];
}

 

Спасибо большое, ошибки больше нет и всё работает!!! :-o

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


  • 1 месяц спустя...

Столкнулся тоже с проблемой при добавлении сортировки для разных категорий.

При этом в "Связи" товара ошибка

Notice: Undefined variable: product_category in /site.ru/public_html/system/storage/modification/admin/view/template/catalog/product_form.tpl on line 387Warning: in_array() expects parameter 2 to be array, null given in /site.ru/public_html/system/storage/modification/admin/view/template/catalog/product_form.tpl on line 387 Бытовая техника

Вроде бы все по инструкции сделано.

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


12 часов назад, morozzz16 сказал:

Столкнулся тоже с проблемой при добавлении сортировки для разных категорий.

При этом в "Связи" товара ошибка


Notice: Undefined variable: product_category in /site.ru/public_html/system/storage/modification/admin/view/template/catalog/product_form.tpl on line 387Warning: in_array() expects parameter 2 to be array, null given in /site.ru/public_html/system/storage/modification/admin/view/template/catalog/product_form.tpl on line 387 Бытовая техника

Вроде бы все по инструкции сделано.

А что оно у вас делает в /system/storage/modification... у вас возможно стоит какой-то модуль, который даёт конфликт, так как у меня данный файл product_form.tpl не модифицируется ничем

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


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

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

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

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

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

Войти

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

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

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

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

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