Ruslan Brest, rb.labtodo.com

Разработка ПО, сайтов и веб-сервисов. CodeIgniter, PHP, MySQL, W3C CSS/XHTML, MaxSite CMS, OpenCart, PrestaShop

Opencart 1.5.x (admin): улучшения при вводе атрибутов товаров

Опубликовано: 15 сентября 2011.
Автор: Ruslan Brest.

Рубрика: Howto | OpenCart.
Метки: , .

Просмотров: 2146.
Подписаться на комментарии по RSS.

Кому нравится способ ввода атрибутов товаров в OpenCart 1.5.1.2? Думаю, что никому: если их хотя бы десяток, начинаешь забывать, путаться или упорно пытаться вспомнить, как этот атрибут назвали ранее. Кабель? Шнур питания? Длина шнура? Ох... Почему по умолчанию везде в админке сделан поиск по "сначалам" названий (и в связях товаров, и в атрибутах, и в рекомендуемых, и... да везде, в общем) -- мне совершенно непонятно. Это неудобно. Мешает, утомляет, раздражает и тормозит.

Некоторым вначале даже может показаться, что в Опенкарт не работает добавление атрибутов: атрибуты ещё не заведены, в подсказке ничего не выпадает. Люди пытаются ввести своё название атрибута и ожидают, что оно сохранится. А оно не сохраняется. И логика поведения неочевидна. На самом деле надо предварительно зарегистрировать атрибуты (см. меню Каталог - Атрибуты), а затем в этих полях выбирать их из выпадающего списка по мере набора первых букв названий атрибутов.

В идеале я бы предпочёл видеть и редактировать атрибуты товаров в виде таблицы. Или хотя бы выпадающие списки. Почти как сейчас, но чтобы не приходилось мучительно вспоминать первую букву или держать рядом страницу со списком. Ну а пока таблицы нет, можно существенно облегчить себе ввод атрибутов, внеся совсем небольшое исправление.

Которое реализует:

  • поиск любого вхождения введённых символов, а не только с начала названий атрибутов;
  • при вводе "." в пустое поле показывается полный список атрибутов, остаётся только выбрать необходимый.

У нас в магазине сейчас заведено около 20 атрибутов -- облегчение даже на таком количестве колоссальное.

Модификации для 1.5.1.2 и ниже (1.5.x)

diff --git a/public_html/admin/controller/catalog/attribute.php b/public_html/admin/controller/catalog/attribute.php
index 637ab6c..8097fc1 100644
--- a/public_html/admin/controller/catalog/attribute.php
+++ b/public_html/admin/controller/catalog/attribute.php
@@ -432,6 +432,7 @@ class ControllerCatalogAttribute extends Controller {
 			}
 		}
 
+		/*
 		$sort_order = array();
 
 		foreach ($json as $key => $value) {
@@ -439,6 +440,7 @@ class ControllerCatalogAttribute extends Controller {
 		}
 
 		array_multisort($sort_order, SORT_ASC, $json);
+		*/
 
 		$this->load->library('json');
 
diff --git a/public_html/admin/model/catalog/attribute.php b/public_html/admin/model/catalog/attribute.php
index 1e438ef..019b155 100644
--- a/public_html/admin/model/catalog/attribute.php
+++ b/public_html/admin/model/catalog/attribute.php
@@ -35,7 +35,10 @@ class ModelCatalogAttribute extends Model {
 		$sql = "SELECT *, (SELECT agd.name FROM " . DB_PREFIX . "attribute_group_description agd WHERE agd.attribute_group_id = a.attribute_group_id AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS attribute_group FROM " . DB_PREFIX . "attribute a LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE ad.language_id = '" . (int)$this->config->get('config_language_id') . "'";
 
 		if (isset($data['filter_name']) && !is_null($data['filter_name'])) {
-			$sql .= " AND LCASE(ad.name) LIKE '" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%'";
+			if( $data['filter_name'] == '.' )
+				$sql .= " AND LCASE(ad.name) LIKE '%'";
+			else
+				$sql .= " AND LCASE(ad.name) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_name'], 'UTF-8')) . "%'";
 		}
 
 		if (isset($data['filter_attribute_group_id']) && !is_null($data['filter_attribute_group_id'])) {

Модификации для 1.5.1.3

diff --git a/upload/admin/model/catalog/attribute.php b/upload/admin/model/catalog/attribute.php
index f38a92e..1d6c8e1 100644
--- a/upload/admin/model/catalog/attribute.php
+++ b/upload/admin/model/catalog/attribute.php
@@ -35,7 +35,10 @@ class ModelCatalogAttribute extends Model {
 		$sql = "SELECT *, (SELECT agd.name FROM " . DB_PREFIX . "attribute_group_description agd WHERE agd.attribute_group_id = a.attribute_group_id AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS attribute_group FROM " . DB_PREFIX . "attribute a LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE ad.language_id = '" . (int)$this->config->get('config_language_id') . "'";
 
 		if (!empty($data['filter_name'])) {
-			$sql .= " AND LCASE(ad.name) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
+			if( $data['filter_name'] == '.' )
+				$sql .= " AND LCASE(ad.name) LIKE '%'";
+			else
+				$sql .= " AND LCASE(ad.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
 		}
 
 		if (!empty($data['filter_attribute_group_id'])) {

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us

Комментариев: 22

  1. 05.10.2011 в 22:07:44 | #1

    Спасибо огромное.

  2. Андрей
    06.10.2011 в 13:45:27 | #2

    Нормально разложить код нельзя было? Что это за порнография?

  3. Ruslan Brest
    06.10.2011 в 14:33:13 | #3

    10 баксов. И я решу эту Вашу проблему вместо какой-нибудь своей.

    Помочь в гугле "diff" набрать? Это стандарт, а не порнография. Легко понятный в том числе и простому человеку.

    http://ru.wikipedia.org/wiki/Diff#.D0.9A.D0.BE.D0.BD.D1.82.D0.B5.D0.BA.D1.81.D1.82.D0.BD.D1.8B.D0.B9_.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.82

    А чуть менее простому (программисту с минимальной квалификацией) - сильно облегчающий жизнь. Поэтому какой из способов публикации изменений является порнографией -- вопрос давно решённый.

    P.S. Какой вопрос - такой и ответ. Третий закон Ньютона.

  4. михаил
    16.10.2011 в 07:24:29 | #4

    а куда встатить этот php-код. спасибо!

  5. Ruslan Brest
    16.10.2011 в 08:05:02 | #5

    Это список изменений. В начале строк - индикаторы: что убрать (минусы, красный цвет) в старом файле и что добавить (плюсики, зелёный цвет).

    В каких именно файлах - указано утроенным значком (---, +++)

    @@ -106,10 +106,12 @@ -- строки, т.е. примерно на 106 строке вы должны найти похожий кусок кода, перед и после блока изменений обычно выводится пара строк текста. "Примерно 106" - потому что я множество правок вношу в свой магазин и содержимое файлов может не совпадать с оригинальным OpenCart 1.5.1.1 или с тем правками, которые внесены у вас до меня.

    Правки индицируются значками "-" и "+" в самом начале строки: те, что с минусом, были убраны (они должны совпадать с тем, что вы у себя видите перед внесением изменений), а те, что с плюсом -- добавлены в это место. Поэтому можно руками внести и проконтролировать все изменения.

    В данном случае надо закомментировать небольшую часть в файле admin/controller/catalog/attribute.php и модифицировать одну строку в admin/model/catalog/attribute.php (заменить её на несколько новых, которые можно скопировать и убрать плюсики в начале строк)

  6. 17.10.2011 в 15:05:32 | #6

    Стоит движок 1.5.1.3, тут какое-то не сходство...

    А именно в файле \admin\model\catalog\attribute.php

    строки не совпадают...

    Помогите пожалуйста, заранее спасибо.

  7. Ruslan Brest
    17.10.2011 в 17:01:13 | #7

    Помогу, но не сразу. В течение нескольких дней. Очень сейчас занят. Хотя тут мало, может сегодня посмотрю.

    Несовпадения могут быть - в 1.5.1.3 много изменили, а у меня основной пока остаётся 1.5.1.2. Для 1.5.1.3 кое-что переделывается и адаптируется, но по мере возникновения потребности.

  8. Ruslan Brest
    17.10.2011 в 17:45:01 | #8

    Оказалось проще сразу сделать. Обновил для 1.5.1.3, см. соответствующую вкладку.

  9. 18.10.2011 в 15:29:40 | #9

    Большое спасибо! ждем еще ваших идей по усовершенствованию движка.

    Спасибо Вам!

  10. Ruslan Brest
    18.10.2011 в 16:51:09 | #10

    И Вам спасибо за поддержку! :)

  11. RedLine
    15.11.2011 в 14:35:39 | #11

    Большое спасибо!

  12. 19th
    20.11.2011 в 11:42:28 | #12

    Спасибо.

  13. Александр
    08.12.2011 в 13:23:36 | #13

    для opencart 1.5.1.3 достаточно ввести в поле атрибута знак % и все атрибуты высветятся

  14. Ruslan Brest
    08.12.2011 в 14:23:37 | #14

    Тоже вариант. Но, во-первых, не все, а только 20 (впрочем, как и по моей точке), а во-вторых, не решает проблему поиска по началам слов (в отличие от моего варианта). Поэтому или увеличивать кол-во и действительно вываливать ВСЁ, либо модифицировать и получить меньше ограничений при вводе части слова и короткие списки.

    Если меньше 20 атрибутов - то да, % и без всяких модификаций можно обойтись. Будет вполне удобно.

  15. Александр
    08.12.2011 в 14:49:43 | #15

    Не знал про ограничения! Буду использовать ваш вариант.

  16. Ruslan Brest
    08.12.2011 в 15:19:27 | #16

    Там стоит LIMIT 20 по умолчанию. Можно его исправить, если удобно из большого списка выбирать.

    catalog/controller/attribute.php, function autocomplete()

    Искать 'limit' => 20

  17. 10.01.2012 в 20:20:31 | #17

    Вопрос почти по теме, как можно добавить в счет фактуру пункт: производитель товара?

    Код выдает ошибку.

    Этот код: echo $manufacturer

  18. Ruslan Brest
    10.01.2012 в 22:55:27 | #18

    Samvel, если производителя предварительно не вынули из базы и не подготовили в конктроллере, то он не будет доступен в шаблоне просто так. Надо там сперва эту переменную подготовить и передать во view.

    Решение здесь: http://rb.labtodo.com/uploads/opencart15/oc1513.admin-invoice-add-manufacturer_.diff

  19. conroe
    05.04.2012 в 18:01:48 | #19

    А если атрибутов больше 20 то как удлинить выпадающий список,там больше 20 не выпадает даже если в настройках ( Элементов на страницу (Админка):) указать 100.

  20. Ruslan Brest
    05.04.2012 в 20:20:07 | #20

    Там где-то в запросе надо лимит увеличивать. Не помню уже. Эта настройка в админке никакого отношения к выпадающим спискам не имеет.

  21. conroe
    05.04.2012 в 23:18:44 | #21

    А в каком конфиге хоть подскажите пожалуйста а то не возможно набивать товар ужас.

  22. conroe
    05.04.2012 в 23:34:51 | #22

    О спасибо нашел кому надо /admin/controller/catalog/attribute.php

    419 строка 'limit' => 20

Оставьте комментарий!

Гость
Комментатор / хотите им стать

Чтобы стать комментатором, введите email и пароль. Напишите комментарий. В дальнейшем ваша связка email-пароль позволит комментировать, получать уведомления об ответах и редактировать свои данные. Не забудьте про активацию (инструкция придёт на email, указанный при регистрации).

Авторизация: Facebook. MaxSiteAuth. Loginza

(обязательно)