Opencart 1.5.x (admin): улучшения при вводе атрибутов товаров
Кому нравится способ ввода атрибутов товаров в 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'])) {Еще записи по теме
- Первичные настройки Git
- Как реализовать страхование товаров в Опенкарт для некоторых покупателей?
- Opencart 1.5.x (catalog): как вывести третий уровень категорий в главном меню
- Opencart 1.5.1.3 (backend): Продажи - Заказы - Товары: показ колонки SKU в списке товаров
- Форум для интеграции с Opencart
- Opencart 1.5.1.3 - не отображаются заказы в админке
- Quickcheckout: контроль суммы заказа (не менее чем)




Комментариев: 22
Спасибо огромное.
Нормально разложить код нельзя было? Что это за порнография?
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. Какой вопрос - такой и ответ. Третий закон Ньютона.
а куда встатить этот php-код. спасибо!
Это список изменений. В начале строк - индикаторы: что убрать (минусы, красный цвет) в старом файле и что добавить (плюсики, зелёный цвет).
В каких именно файлах - указано утроенным значком (---, +++)
@@ -106,10 +106,12 @@ -- строки, т.е. примерно на 106 строке вы должны найти похожий кусок кода, перед и после блока изменений обычно выводится пара строк текста. "Примерно 106" - потому что я множество правок вношу в свой магазин и содержимое файлов может не совпадать с оригинальным OpenCart 1.5.1.1 или с тем правками, которые внесены у вас до меня.
Правки индицируются значками "-" и "+" в самом начале строки: те, что с минусом, были убраны (они должны совпадать с тем, что вы у себя видите перед внесением изменений), а те, что с плюсом -- добавлены в это место. Поэтому можно руками внести и проконтролировать все изменения.
В данном случае надо закомментировать небольшую часть в файле admin/controller/catalog/attribute.php и модифицировать одну строку в admin/model/catalog/attribute.php (заменить её на несколько новых, которые можно скопировать и убрать плюсики в начале строк)
Стоит движок 1.5.1.3, тут какое-то не сходство...
А именно в файле \admin\model\catalog\attribute.php
строки не совпадают...
Помогите пожалуйста, заранее спасибо.
Помогу, но не сразу. В течение нескольких дней. Очень сейчас занят. Хотя тут мало, может сегодня посмотрю.
Несовпадения могут быть - в 1.5.1.3 много изменили, а у меня основной пока остаётся 1.5.1.2. Для 1.5.1.3 кое-что переделывается и адаптируется, но по мере возникновения потребности.
Оказалось проще сразу сделать. Обновил для 1.5.1.3, см. соответствующую вкладку.
Большое спасибо! ждем еще ваших идей по усовершенствованию движка.
Спасибо Вам!
И Вам спасибо за поддержку! :)
Большое спасибо!
Спасибо.
для opencart 1.5.1.3 достаточно ввести в поле атрибута знак % и все атрибуты высветятся
Тоже вариант. Но, во-первых, не все, а только 20 (впрочем, как и по моей точке), а во-вторых, не решает проблему поиска по началам слов (в отличие от моего варианта). Поэтому или увеличивать кол-во и действительно вываливать ВСЁ, либо модифицировать и получить меньше ограничений при вводе части слова и короткие списки.
Если меньше 20 атрибутов - то да, % и без всяких модификаций можно обойтись. Будет вполне удобно.
Не знал про ограничения! Буду использовать ваш вариант.
Там стоит LIMIT 20 по умолчанию. Можно его исправить, если удобно из большого списка выбирать.
catalog/controller/attribute.php, function autocomplete()
Искать 'limit' => 20
Вопрос почти по теме, как можно добавить в счет фактуру пункт: производитель товара?
Код выдает ошибку.
Этот код: echo $manufacturer
Samvel, если производителя предварительно не вынули из базы и не подготовили в конктроллере, то он не будет доступен в шаблоне просто так. Надо там сперва эту переменную подготовить и передать во view.
Решение здесь: http://rb.labtodo.com/uploads/opencart15/oc1513.admin-invoice-add-manufacturer_.diff
А если атрибутов больше 20 то как удлинить выпадающий список,там больше 20 не выпадает даже если в настройках ( Элементов на страницу (Админка):) указать 100.
Там где-то в запросе надо лимит увеличивать. Не помню уже. Эта настройка в админке никакого отношения к выпадающим спискам не имеет.
А в каком конфиге хоть подскажите пожалуйста а то не возможно набивать товар ужас.
О спасибо нашел кому надо /admin/controller/catalog/attribute.php
419 строка 'limit' => 20