Коллеги, приветствую! Тут решил сделать: - в: Catalog -> Filters -> Add New - поле: Additional Filter Group Name - аналогичному этому: Filter Group Name Чтобы как-то проще было ориентироваться по фильтрам, создавать их, назначать к категориям. В инете что-то не нашёл решение, здесь тоже... Сложность в том, что в стандарте: Filter Group Name - отображается в фронте - а хочется, чтобы в админке, отображалось: Additional Filter Group Name и они были не взаимосвязанные Пока только скрин сделал. P.S.: OpenCart 3.0.3.7
В плане у вас много одинаковых фильтров с одним и тем же названием? Если так, то зачем? Какой-то пример нужен для понимания
devimirochnik , как выше написал, что: - хочу отвязать название фильтра, который отображается на фронте, как пример: - создаю группу фильтр: - "Возраст" указываю имена: - от 1 до 4 месяцев" - от 4 до 10 месяцев" Есть услуга "отель для питомцев", питомцы: - собаки, кошки, попугаи и т.д. - у них свой возраст, порода и т.д. и под возраст уже подбирается номер в отеле. Если создавать группу фильтр: - Кошка Возраст, то будет в фронте отображаться Кошка Возраст - что не очень красиво - раз - сортировать в админке тоже не очень - поиск в админке не очень... Если создавать группу фильтр: - Возраст, то будет в фронте отображаться Возраст, но: - тогда в админке будет много Возраст и: - не понятно к какому питомцу это группа фильтр принадлежит...
А что если в фильтре указать все возможные варианты, а потом для товаров выбирать только нужные? В принципе-то, для такого допила, нужно добавить поле в БД, переделать контроллер и модель создания фильтров, а так же подправить часть в карточке товара
Ну фиг знает, если товаров не очень много и от фильтров много не требуется, то, в принципе, нормально. Но так, конечно, лучше использовать какой-нибудь модуль фильтров. И функционал поширше, и вид более эстетичный.
Пока так сделал: - база создаётся, туда записывается, форма работает... Черновой вариант работающий: Спойлер: CODE Код: <?xml version="1.0" encoding="utf-8"?> <modification> <name>[BEFE] Extra Filter Group Name v.1.0.0</name> <code>BEFE_Extra_Filter_Group_Name_v100</code> <version>1.0.0</version> <author>MAEmelyanov</author> <link>https://t.me/maemelyanov</link> <!--ok--> <file path="admin/controller/catalog/filter.php"> <operation> <search><![CDATA[if (isset($this->request->post['filter_group_description'])) {]]></search> <add position="after" offset="6"><![CDATA[ if (isset($this->request->post['filter_extra_group_description'])) { $data['filter_extra_group_description'] = $this->request->post['filter_extra_group_description']; } elseif (isset($this->request->get['filter_group_id'])) { $data['filter_extra_group_description'] = $this->model_catalog_filter->getFilterGroupDescriptions($this->request->get['filter_group_id']); } else { $data['filter_extra_group_description'] = array(); } ]]></add> </operation> </file> <file path="admin/model/catalog/filter.php"> <operation><!--009--> <search index="0"><![CDATA[name = '" . $this->db->escape($value['name']) . "']]></search> <add position="replace"><![CDATA[ name = '" . $this->db->escape($value['name']) . "', extra_name = '" . $this->db->escape($value['extra_name']) . "' ]]></add> </operation> <operation><!--033--> <search index="1"><![CDATA[name = '" . $this->db->escape($value['name']) . "']]></search> <add position="replace"><![CDATA[ name = '" . $this->db->escape($value['name']) . "', extra_name = '" . $this->db->escape($value['extra_name']) . "' ]]></add> </operation> <operation><!--069--> <search><![CDATA[public function getFilterGroups($data = array()) {]]></search> <add position="after"><![CDATA[ $result_extra_name = $this->db->query("SHOW COLUMNS FROM " . DB_PREFIX . "filter_group_description LIKE 'extra_name';"); if ($result_extra_name->num_rows == 0) { $this->db->query("ALTER TABLE " . DB_PREFIX . "filter_group_description ADD COLUMN extra_name TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `name` ;"); } ]]></add> </operation> <operation><!--112--> <search><![CDATA[$filter_group_data[$result['language_id']] = array('name' => $result['name']);]]></search> <add position="replace"><![CDATA[ $filter_group_data[$result['language_id']] = array('name' => $result['name'], 'extra_name' => $result['extra_name']); ]]></add> </operation> </file> <!--ok--> <file path="admin/view/template/catalog/filter_form.twig"> <operation> <search><![CDATA[<input type="text" name="filter_group_description[{{ language.language_id }}][name]" value="{{ filter_group_description[language.language_id] ? filter_group_description[language.language_id].name }}" placeholder="{{ entry_group }}" class="form-control" />]]></search> <add position="after" offset="6"><![CDATA[ <div class="form-group required"> <label class="col-sm-2 control-label">{{ entry_extra_group }}</label> <div class="col-sm-10"> {% for language in languages %} <div class="input-group"><span class="input-group-addon"><img src="language/{{ language.code }}/{{ language.code }}.png" title="{{ language.extra_name }}" /></span> <input type="text" name="filter_group_description[{{ language.language_id }}][extra_name]" value="{{ filter_group_description[language.language_id] ? filter_group_description[language.language_id].extra_name }}" placeholder="{{ entry_extra_group }}" class="form-control" /> </div> {% if error_group[language.language_id] %} <div class="text-danger">{{ error_group[language.language_id] }}</div> {% endif %} {% endfor %} </div> </div> ]]></add> </operation> </file> <!-- <file path="catalog/controller/extension/module/filter.php"> <operation> <search><![CDATA[]]></search> <add position="after"><![CDATA[ ]]></add> </operation> <operation> <search><![CDATA[]]></search> <add position="after"><![CDATA[ ]]></add> </operation> </file> <file path="catalog/model/....."> <operation> <search><![CDATA[]]></search> <add position="after"><![CDATA[ ]]></add> </operation> </file> <file path="catalog/view/theme/default/template/extension/module/filter.twig"> <operation> <search><![CDATA[]]></search> <add position="replace"><![CDATA[ ]]></add> </operation> </file> --> <!--ok--> <file path="admin/language/ru-ru/catalog/filter.php"> <operation> <search><![CDATA[$_['entry_group']]]></search> <add position="before"><![CDATA[ $_['entry_extra_group'] = 'Дополнительное Название группы фильтра'; ]]></add> </operation> </file> <!--ok--> <file path="admin/language/en-gb/catalog/filter.php"> <operation> <search><![CDATA[$_['entry_group']]]></search> <add position="before"><![CDATA[ $_['entry_extra_group'] = 'Additional Filter Group Name'; ]]></add> </operation> </file> </modification>
Кстати, не стоит делать поле NOT NULL, ну или хотя бы нужно добавлять default значение, иначе после отключения модификатора и попытки создать фильтр, у вас будет возникать ошибка БД
Я не знаю как это делается... Я у RoS'а, решение по БД, в этой теме стыбрил: Вывод дополнительного описания в карточку товара {OCMOD} - правда у него под Opencart 2.3.0.2 (rs.4)
Код: $this->db->query("ALTER TABLE " . DB_PREFIX . "filter_group_description ADD COLUMN extra_name TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `name` ;"); в Код: $this->db->query("ALTER TABLE " . DB_PREFIX . "filter_group_description ADD COLUMN extra_name TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' AFTER `name` ;"); ну и удалить ранее созданную колонку
devimirochnik , понял , спасибо! Исправил. Сделал: - исправление от devimirochnik - добавил вывод в filter_list.twig Черновой вариант работающий: Спойлер: CODE Код: <?xml version="1.0" encoding="utf-8"?> <modification> <name>[BEFE] Extra Filter Group Name v.1.0.0</name> <code>BEFE_Extra_Filter_Group_Name_v100</code> <version>1.0.0</version> <author>MAEmelyanov</author> <link>https://t.me/maemelyanov</link> <!-- Изменения для: - создания дополнительного поля в форме создания фильтра: filter_form.twig Изменения в: admin/controller/catalog/filter.php admin/model/catalog/filter.php admin/view/template/catalog/filter_form.twig --> <file path="admin/controller/catalog/filter.php"> <operation><!--313--> <search><![CDATA[if (isset($this->request->post['filter_group_description'])) {]]></search> <add position="after" offset="6"><![CDATA[ if (isset($this->request->post['filter_extra_group_description'])) { $data['filter_extra_group_description'] = $this->request->post['filter_extra_group_description']; } elseif (isset($this->request->get['filter_group_id'])) { $data['filter_extra_group_description'] = $this->model_catalog_filter->getFilterGroupDescriptions($this->request->get['filter_group_id']); } else { $data['filter_extra_group_description'] = array(); } ]]></add> </operation> </file> <file path="admin/model/catalog/filter.php"> <operation><!--009--> <search index="0"><![CDATA[name = '" . $this->db->escape($value['name']) . "']]></search> <add position="replace"><![CDATA[ name = '" . $this->db->escape($value['name']) . "', extra_name = '" . $this->db->escape($value['extra_name']) . "' ]]></add> </operation> <operation><!--033--> <search index="1"><![CDATA[name = '" . $this->db->escape($value['name']) . "']]></search> <add position="replace"><![CDATA[ name = '" . $this->db->escape($value['name']) . "', extra_name = '" . $this->db->escape($value['extra_name']) . "' ]]></add> </operation> <operation><!--069--> <search><![CDATA[public function getFilterGroups($data = array()) {]]></search> <add position="after"><![CDATA[ $result_extra_name = $this->db->query("SHOW COLUMNS FROM " . DB_PREFIX . "filter_group_description LIKE 'extra_name';"); if ($result_extra_name->num_rows == 0) { $this->db->query("ALTER TABLE " . DB_PREFIX . "filter_group_description ADD COLUMN extra_name TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' AFTER `name` ;"); } ]]></add> </operation> <operation><!--112--> <search><![CDATA[$filter_group_data[$result['language_id']] = array('name' => $result['name']);]]></search> <add position="replace"><![CDATA[ $filter_group_data[$result['language_id']] = array('name' => $result['name'], 'extra_name' => $result['extra_name']); ]]></add> </operation> </file> <file path="admin/view/template/catalog/filter_form.twig"> <operation><!--033--> <search><![CDATA[<input type="text" name="filter_group_description[{{ language.language_id }}][name]" value="{{ filter_group_description[language.language_id] ? filter_group_description[language.language_id].name }}" placeholder="{{ entry_group }}" class="form-control" />]]></search> <add position="after" offset="6"><![CDATA[ <div class="form-group required"> <label class="col-sm-2 control-label">{{ entry_extra_group }}</label> <div class="col-sm-10"> {% for language in languages %} <div class="input-group"><span class="input-group-addon"><img src="language/{{ language.code }}/{{ language.code }}.png" title="{{ language.extra_name }}" /></span> <input type="text" name="filter_group_description[{{ language.language_id }}][extra_name]" value="{{ filter_group_description[language.language_id] ? filter_group_description[language.language_id].extra_name }}" placeholder="{{ entry_extra_group }}" class="form-control" /> </div> {% if error_group[language.language_id] %} <div class="text-danger">{{ error_group[language.language_id] }}</div> {% endif %} {% endfor %} </div> </div> ]]></add> </operation> </file> <!-- Изменения для: - вывода дополнительного поля в фильтр листе: filter_list.twig Изменения в: admin/controller/catalog/filter.php admin/view/template/catalog/filter_list.twig --> <file path="admin/controller/catalog/filter.php"> <operation><!--117--> <search><![CDATA[$sort = 'fgd.name';]]></search> <add position="after" offset="1"><![CDATA[ if (isset($this->request->get['sort'])) { $sort = $this->request->get['sort']; } else { $sort = 'fgd.extra_name'; } ]]></add> </operation> <operation><!--177--> <search><![CDATA['name' => $result['name'],]]></search> <add position="after"><![CDATA[ 'extra_name' => $result['extra_name'], ]]></add> </operation> <operation><!--215--> <search><![CDATA[$data['sort_name'] = $this->url->link('catalog/filter', 'user_token=' . $this->session->data['user_token'] . '&sort=fgd.name' . $url, true);]]></search> <add position="after"><![CDATA[ $data['sort_extra_name'] = $this->url->link('catalog/filter', 'user_token=' . $this->session->data['user_token'] . '&sort=fgd.extra_name' . $url, true); ]]></add> </operation> </file> <file path="admin/view/template/catalog/filter_list.twig"> <operation><!--038--> <search><![CDATA[<td class="text-left">{% if sort == 'fgd.name' %}]]></search> <add position="after" offset="4"><![CDATA[ <td class="text-left">{% if sort == 'fgd.extra_name' %} <a href="{{ sort_extra_name }}" class="{{ order|lower }}">{{ column_extra_group }}</a> {% else %} <a href="{{ sort_extra_name }}">{{ column_extra_group }}</a> {% endif %}</td> ]]></add> </operation> <operation> <search><![CDATA[<td class="text-left">{{ filter.name }}</td>]]></search> <add position="after"><![CDATA[ <td class="text-left">{{ filter.extra_name }}</td> ]]></add> </operation> <operation> <search><![CDATA[<td class="text-center" colspan="4">{{ text_no_results }}</td>]]></search> <add position="replace"><![CDATA[ <td class="text-center" colspan="5">{{ text_no_results }}</td> ]]></add> </operation> </file> <!-- Это мы не трогаем пока...: <file path="catalog/controller/extension/module/filter.php"> <operation> <search><![CDATA[]]></search> <add position="after"><![CDATA[ ]]></add> </operation> <operation> <search><![CDATA[]]></search> <add position="after"><![CDATA[ ]]></add> </operation> </file> <file path="catalog/model/....."> <operation> <search><![CDATA[]]></search> <add position="after"><![CDATA[ ]]></add> </operation> </file> <file path="catalog/view/theme/default/template/product/product.twig"> <operation> <search><![CDATA[]]></search> <add position="replace"><![CDATA[ ]]></add> </operation> </file> --> <!-- Изменения для: - перевод для дополнительного поля Изменения в: admin/language/en-gb/catalog/filter.php admin/language/ru-ru/catalog/filter.php --> <file path="admin/language/en-gb/catalog/filter.php"> <operation> <search><![CDATA[$_['column_group'] = 'Filter Group';]]></search> <add position="after"><![CDATA[ $_['column_extra_group'] = 'Additional Filter Group'; ]]></add> </operation> <operation> <search><![CDATA[$_['entry_group'] = 'Filter Group Name';]]></search> <add position="after"><![CDATA[ $_['entry_extra_group'] = 'Additional Filter Group Name'; ]]></add> </operation> </file> <file path="admin/language/ru-ru/catalog/filter.php"> <operation> <search><![CDATA[$_['column_group'] = 'Группа фильтра';]]></search> <add position="after"><![CDATA[ $_['column_extra_group'] = 'Дополнительная Группа фильтра'; ]]></add> </operation> <operation> <search><![CDATA[$_['entry_group']]]></search> <add position="before"><![CDATA[ $_['entry_extra_group'] = 'Дополнительное Название группы фильтра'; ]]></add> </operation> </file> </modification> Единственный момент: - почему-то в filter_list.twig - активная сортировка: Additional Filter Group - а не: Filter Group
Осталось сделать: - в категории и в товарах сделать привязку фильтра не по: Filter Group (name) - а по: Additional Filter Group (extra_name) - точнее в админке поиск по extra_name, а применение по name
С этим разобрался. Удалил операцию: Спойлер: CODE Код: <file path="admin/controller/catalog/filter.php"> <operation><!--117--> <search><![CDATA[$sort = 'fgd.name';]]></search> <add position="after" offset="1"><![CDATA[ if (isset($this->request->get['sort'])) { $sort = $this->request->get['sort']; } else { $sort = 'fgd.extra_name'; } ]]></add> </operation>
Готово. Черновой вариант работающий, оставляю черновой (вдруг кому-то пригодится для обучения): Огромедное спасибо (!!!): devimirochnik