Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

.

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

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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.