Перейти к содержанию
alex39

Ошибка порядка вывода сопутствующих товаров

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

Имеется в виду -  Сопутствуюшие товары на вкладке Связи.

.

Происходит следующее:

1. Ввожу вручную из выпадающего списка Товар1, Товар2, Товар 3, Товар4.

2. Но на странице товара этот список может отображаться в другом порядке, напр. Т1, Т3, Т4, Т2.

3. Админка почему-то пишет введенные товары в своем, неправильном порядоке.

 

Иногда выводит правильно, иногда нет, независимо от числа товаров.

Никакой корреляции ни с чем не заметил.  Логики и каких-то критериев в смене порядка тоже не просматривается.

Эта ошибка лишает смысла всю функцию.

 

С чем такое может быть связано?

 

Ситуация одинакова и на локалке и на хостинге.

OcStore 1.5.5.1.2,  никаких модулей нет.

Есть косметические переделки шаблона, касающиеся внешнего вида,

и вставка логотипа производителя на страницу товара. 

 

 

 

Поделиться сообщением


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

В общем sorry конечно,

но в ТС неверно поставлен вопрос, исходя из неверных представлений спрашивающего о сути явления... :oops:

 

Оказывается пишутся товары не по порядку ввода, что было бы понятно и логично,

а в порядке возрастания product_id товара...

А сей product_id генерится при создании товара автоматом.

 

И оказывается, product_id менять нельзя....

 

И что теперь с этой засадой делать???

Поделиться сообщением


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

добавляй в модуль товарам параметр "сортировка" и задавай порядок сортировки самостоятельно.

Поделиться сообщением


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

В общем sorry конечно,

но в ТС неверно поставлен вопрос, исходя из неверных представлений спрашивающего о сути явления... :oops:

 

Оказывается пишутся товары не по порядку ввода, что было бы понятно и логично,

а в порядке возрастания product_id товара...

А сей product_id генерится при создании товара автоматом.

 

И оказывается, product_id менять нельзя....

 

И что теперь с этой засадой делать???

 

product_id менять можно, но я не вижу проблемы в том, что "сопутствующие товары" отображаются в свободном порядке - это же не предыдущий и следующий товары.

 

Если, все же, это критично - afwallis предложил вам самое подходящее решение, так как меняя product_id вы еще больше все спутаете и, в итоге, сломаете. Если не свой сайт, то уж "моск"-то точно!

Поделиться сообщением


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

добавляй в модуль товарам параметр "сортировка" и задавай порядок сортировки самостоятельно.

 

Поясните Pls, я не понял что имеется в виду.

В какой модуль  добавлять сортировку?

Никаких доп.модулей у меня нет..

Поделиться сообщением


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

Поясните Pls, я не понял что имеется в виду.

В какой модуль  добавлять сортировку?

Никаких доп.модулей у меня нет..

 

Лезешь в файлы модуля "Сопутствующие товары" и дописываешь сохранение и вывод сортировки.

Добавляешь это поле в таблице product_related

Забиваешь товарам сортировку и: "Ура, заработало!"

Как реализовать, не буду расписывать - это долго и геморно. Поэтому, предлагаю успокоиться и согласиться с тем, что сортировка сопутствующих товаров не столь важна.

Поделиться сообщением


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

дорабатывай стандартный модуль - добавляй возможность самостоятельно задавать сортировку выбранным товарам внутри модуля.

Поделиться сообщением


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

А не подскажете ли уважаемые по процедуре:
 
1. Нашел строку где вводится  по product_id  в  admin\view\template\catalog\product_form.tpl
2. Операции с данными задаются в admin\model\catalog\product.php
    в строках типа

if (isset($data['product_related'])) {
foreach ($data['product_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");

         

 

(их там несколько в разных функциях)

 

Достаточным ли будет добавление в этот файл аналогичных строк с заменой product_id на sort_order?

(ну понятно, что где-то в контроллере еще может придется прописать sort_order, если его нет).

Поделиться сообщением


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

Не все так просто.

Во-первых, проверь, не встречается ли sort_order в других местах, а то сам себя запутаешь. Лучше замени на sort_related (например).

Во-вторых, работать придется с 6 файлами как минимум.

Поделиться сообщением


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

Про смену имени поля - да, понятно, спасибо.

 

Про 6 файлов - касательно ввода к упомянутым выше двум добавится admin\controller\catalog\product.php

а еще 3 - имеются в виду файлы контроллера и шаблона при выводе со стороны витрины?

 

Вообще какая-то  шняга "этот ваш MVC" :(   - постоянно надо чесать левой ногой правое ухо,

и ничего вообще просто так не изменить без перелопачивания кучи файлов.

При этом совершенно "закрытая" система без какой-либо вменяемой документации.

Хуже всего, что вся эта возня всего лишь ради десятка небъющих позиций...

 

Кстати, я так и не понял - а как product_id менять в базе?

У меня запись товара просто исчезла после смены значения product_id.

Поделиться сообщением


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

1. 6 файлов - это я навскидку сказал. Точно нужно будет 2 шаблона вывода править (в папке admin и в папке catalog), тоже самое - контроллеры - в обеих папках, плюс language. Ну и, скорее всего, model. Так что, даже, наверное, 8 файлов.

2. Это не наш MVC. Точнее, это CMS и мы тут не разработчики, а пользователи. Просто кто-то лучше в ней разобрался, кто-то хуже. Ну и опыт программирования у всех разный, уровень знаний. Для этого и существует этот форум - чтобы друг-другу могли помочь. Либо, кому лень колупаться самостоятельно, может найти готовый модуль, или заказать разработку.

3. Мне нужно было сохранить ID товаров со старого сайта, поэтому я загружал товары из Excell с помощью программы Navicat - она не бесплатная, но позволяет загружать большие файлы, с которыми не всегда справляется обычный загрузчик phpMyAdmin. 

Перед этим, естественно, удалил все дефолтные товары, которые идут сразу в сборке CMS. Естественно, чистил все таблицы, а не только таблицу oc_product.

Проблем с загрузкой собственных ID не возникло. Но если будут проблемы - можно попробовать на время отключить auto-increment, а после загрузки всех товаров - снова включить.

Изменено пользователем afwollis
overquote deleted

Поделиться сообщением


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

не лезь к product_id.

Вообще какая-то  шняга "этот ваш MVC" :(   - постоянно надо чесать левой ногой правое ухо,

и ничего вообще просто так не изменить без перелопачивания кучи файлов.

MVC это "вещи по полочкам" вместо "бардака в одной картонной коробке".

При этом совершенно "закрытая" система без какой-либо вменяемой документации.

где она "закрытая"?

исходники открыты.

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

Хуже всего, что вся эта возня всего лишь ради десятка небъющих позиций...

ээ??

Поделиться сообщением


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

Ребята, про МVC я же просто пошутил... :-)

Упорядочивать то оно конечно упорядочивает, но к сожаленнию ценой больших затруднений при необходимости мелких изменений,

 

Конечно огромное спасибо всем за помощь.

 

Нашел наконец структуру БД.

http://wiki.opencarthelp.com/doku.php?id=databse_schema

(долго искал, - это про "открытость документации").

 

Вопрос - достаточно ли будет правильно составленного SQL запроса, чтобы синхронно поменять

product_id во всех таблицах с одного номера на другой?

Что-то типа

"для базы "XX"

  для очередной таблицы

    если поле  product_id  имеет значение "A", записать его как "B",

 к следующей таблице до конца базы"...

 

Или я что-то еще не заметил?

 

Я понимаю правильный по сути совет "не лезь к product_id", но жизнь заставляет...

Как выяснилось, сортировка по sort_order  в списке сопутствующих не решает моих проблем,

все равно очередность не та. А очередность критически важна.

 

Можно еще писать заплатку, чтобы выводилось в порядке очереди ввода,

но это требует как минимум  новых полей в базе, и заплатки во многих файлов.

А самое главное, что таких небъющих позиций всего лишь несколько...

 

Т.е базу поправить однозначно проще...

Поделиться сообщением


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

Если уверенно решил поменять именно pruduct_id - то меняй либо выгрузкой базы в excell, чтобы все одновременно поменять, либо заходи в каждую таблицу и меняй там. То есть, поменять в одной таблице - это сломать выдачу. Чтобы все работало - надо менять во всех таблицах, где встречается product_id, включая url_alias!

Поделиться сообщением


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

Про url_alias большое спасибо что указали!

Да, в поле query может сидеть product_id.

 

Больше product_id  нигде в неявном виде не сидит?

 

Про выгрузку-загрузку Excel.

Я пока этим не пользовался, т.к. на стадии отладки и тестов. 

Какой модуль практичнее для размера:

Категорий - ок, 10

Подкатегорий в каждой до 10 (всего подкатегорий до 100)

Товаров в подкатегории от нескольких до 20 (всего товаров до 1500)

Поделиться сообщением


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

Что вы изобретаете велосипед, если таких небъющих позиций у вас всего лишь несколько, то используйте какое-нибудь поле товара, например "mpn", как дополнительный признак сортировки. Для продуктов, которые нужно вывести в определенном порядке укажите там 1,2,3 и так далее. Потом добавьте в модель, в функцию выборки сопутствующих товаров сортировку по mpn:

 

ORDER BY p.mpn ASC

 

И сопутствующие товары будут выводится сначала те, у которых нет mpn (сортировка по id товара), а потом те, у которых это поле заполнено, по возрастанию числа mpn.

Поделиться сообщением


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

А ка

 

Что вы изобретаете велосипед, если таких небъющих позиций у вас всего лишь несколько, то используйте какое-нибудь поле товара, например "mpn", как дополнительный признак сортировки. Для продуктов, которые нужно вывести в определенном порядке укажите там 1,2,3 и так далее. Потом добавьте в модель, в функцию выборки сопутствующих товаров сортировку по mpn:

 

ORDER BY p.mpn ASC

 

И сопутствующие товары будут выводится сначала те, у которых нет mpn (сортировка по id товара), а потом те, у которых это поле заполнено, по возрастанию числа mpn.

 

А какая собственно разница какое брать поле?

Все равно придется писать заплатки для минимум 6 файлов, а то и больше.

Проще уж product_id поменять.

Осталось только услышать квалифицированный совет - каким именно модулем выгрузки -загрузки Excel воспрользоваться?

Поделиться сообщением


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

Зачем 6 файлов? ORDER BY p.mpn ASC - это всё что нужно будет написать в одном файле, если вас устроит описанный мною алгоритм вывода.

 

Смена product_id - это утопия. Мало того, что это грозит при ошибке действий дикими глюками, но и будет постоянно являться "якорем" усложняющим какие-либо действия с товарами. Это сейчас вам это кажется простым выходом. Но как вы потом будете добавлять/удалять товары? Тоже редактируя постоянно product_id ? А если нужно будет их 100 шт добавить? А если нужно вставить товар в "серединку" между product_id=5 и product_id=6 ? Через пол года это превратится в такую веселую процедуру.... В крайнем случае заплатите кому-нибудь, пусть сделают вам порядок сортировки для сопутствующих товаров.

Поделиться сообщением


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

Сделать по полю не так уж сложно, но ORDER BY p.mpn ASC явно не ограничится.

 

Со стороны ввода

1. В  admin\view\template\catalog\product_form.tpl пишется новый порядок ввода

2. В admin\model\catalog\product.php прописываются 6 новых запросов по выборке данных.

3. Вероятно придется поправить admin\controller\catalog\product.php

 

4. Аналогичные минимум 2 файла со стороны витрины, т.е. шаблона.

 

Это уже 5 штук, плюс может и модель еще раз вылезет.

 

Вот я и говорю - неэффективно...

 

На самом деле, "проблема" в отсутствии нормальной документации.

В том смысле, что зная изначально:

1. Каким образом формируется идентификатор продукта (я даже в кошмарном сне не мог подумать, что тупо в лоб по времени-очереди написания и +1)

2. Где и каким образом какие поля из каких таблиц используются,

3. Каким образом отображаются данные по товару во всех проявлениях, включая сортировки ввода-вывода,

 

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

 

А в реале, в тестовом режиме накидал десяток по разным категориям, потом, стал добавлять по мере готовности в разные категории.

В итоге по product_id получилась полная мешанина...

 

Одно понятно, действительно product_id - штука неуниверсальная.

Идентификатором товара не может служить по сути время первого ввода данных о нем, как это сейчас.

 

Поделиться сообщением


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

Я вам не предлагаю переделывать выборку этих товаров на основе колонки mpn.

Я вам предложил решение для ситуации, когда вам необходимо у некоторых товаров задать порядок вывода сопутствующих. Например:

У товара "001" вы задаете сопутствующие - товар "016", товар "205", товар "003".  Хотите порядок их вывода: 205 - 016 - 003

1. Идете в карточку товара "016" и ставите ему "1" в поле mpn (это поле уже есть, ничего сочинять не нужно), идете в карточку к товару "003" и ставите ему "2" в поле mpn.

2. Добавляете в файл: /catalog/model/catalog/product.php в функцию выборки сопутствующих добавляете: ORDER BY p.mpn ASC

 

ВСЁ!!!

 

Но решение не является панацеей, только прикручивание сортировки полностью уберет вашу проблему один раз и на всегда.

Поделиться сообщением


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

А ка

 

 

А какая собственно разница какое брать поле?

Все равно придется писать заплатки для минимум 6 файлов, а то и больше.

Проще уж product_id поменять.

Осталось только услышать квалифицированный совет - каким именно модулем выгрузки -загрузки Excel воспрользоваться?

 

В принципе, shchs предлагает разумное решение, согласен с ним (однако интересно, проверял ли он его работу?)

По поводу модуля выгрузки-загрузки - я такого не знаю. Есть phpMyAdmin на сервере, которым можно воспользоваться, но не уверен, что он справится со всеми таблицами (у меня более 5000 товаров и phpMyAdmin не справляется даже с половиной). Есть Navicat, который я уже упоминал, есть Яндекс, Google и другие поисковики, в которых можно поискать аналоги Navicat.

Кстати, если не ошибаюсь, у Navicat есть тестовый период (бесплатный), но я не помню точно. Так как я сторонник соблюдения закона, не буду вам рассказывать про "докторов", у которых бывают "таблетки" для подобных случаев...

Одна особенность работы с такими программами удаленного доступа к базе данных заключается в том, что ваш хостер может ограничивать доступ к базе данных извне. То есть, для доступа к базе из того же Navicat, может потребоваться соединение по SSH. Чаще всего он выключен на сервере. Там уже зависит от хостера - у одного можно самостоятельно включить и настроить этот доступ, у другого надо писать в ТП, чтобы подключили, у третьего - это платная опция, у четвертого опция может быть не доступна...

Поделиться сообщением


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

Sorry за паузу.

 

Проверил вариант уважаемого shchc.

Работает, вроде пока нормально. Вроде проблема решена.

 

Но поначалу были некоторые странности.

На первом десятке цифр порядок иногда ломался. Причин я так и не понял.

После того как ввел нумерацию поля начиная со 101, все стало работать нормально.

Product_id у меня идет от 51 и далее пока до 200 с хвостиком с инкрементом +1.

 

Всем большое спасибо за советы.

Поделиться сообщением


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

Sorry за паузу.

 

Проверил вариант уважаемого shchc.

Работает, вроде пока нормально. Вроде проблема решена.

 

Но поначалу были некоторые странности.

На первом десятке цифр порядок иногда ломался. Причин я так и не понял.

После того как ввел нумерацию поля начиная со 101, все стало работать нормально.

Product_id у меня идет от 51 и далее пока до 200 с хвостиком с инкрементом +1.

 

Всем большое спасибо за советы.

Чтобы порядок не скакал, вам надо эти данные выводить в формате int (integer), ну и в базе хранить в нем же - тогда они будут восприниматься как числа и ранжироваться верно. Судя по вашему описанию, скорее всего, они у вас хранятся и выводятся в формате строки.

Поделиться сообщением


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

Посмотрел базу, совершенно верно,

поле mpn имеет тип varchar(64).

 

Как лучше поступить?

Можно ли просто "в лоб" поменять тип данных?

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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