Александр Марков
11 мар. 2015 г., 20:34

Кросс-таблицы на MIGX

Добрый день. Стоит задача назначить цены в зависимости от двух параметров (толщина и цвет). Один из параметров имеет конечное количество вариантов (например, 10), а цветов может быть сколько угодно. Пока в голову пришло сделать MIGX-табличку с 11 полями (цвет и 10 полей для разной толщины). Но проблема в том, что значения второго параетра (толщины) могут меняться. И вот ломаю голову — как сделать так, чтобы заголовки полей с ценами брались из какой-нить другой MIGX таблички, в зависимости от ее содержимого.
Может, кто сталкивался с подобным? Или есть другой, более феншуйный путь? Конечно, идеально было бы сгенерировать кросс-таблицу, но я не нашел, как и вообще возможно ли это.
Не скажу точного рецепта, но смотри в сторону MigxDB. Там ты можешь использовать свои пользовательские таблицы. Ну а вообще 10 полей под цены — не круто. То есть в одну линию выстраивать значения не совсем гибко. Правильней ИМХО делать несколько записей. К примеру в миге колонки: толщина, цена. И сколько вариаций толщина-цена, столько строчек в табличке и добавлять.
Это было бы идеально, но при условии что все эти записи выстроить в двумерной табличке: столбцы — цена, строки — цвета, в ячейках — цены. А при сохранении — обратно. Эх, говорила мне мама — учи ExtJS!!!
Все-таки я не улавливаю в чем проблема… У тебя в товаре от каких параметров цена зависит?
столбцы — цена
Имел в виду толщина
смотри в сторону MigxDB
На нем и сделаю, но не хочется все в одну линию вытягивать
Саш, еще раз прочти вопрос:
У тебя в товаре от каких параметров цена зависит?
Цена зависит от материала (цвет) и толщины — они формируют цену за кв.м. поверхности (http://omaa197.bget.ru/stoleshniczyi) И пакость еще в том, что цена нелинейно от толщины меняется, не описать элементарной функцией зависимость от толщины. Заказчик хочет руками ставить. Толщина будет от 22 до 46мм с шагом 6мм (5 значений), но я с запасом 10 запланировал
Я понимаю, что задавать 10 полей под цены не айс, но на мой взгляд это оптимально с точки зрения администрирования будет, все-таки покомпактнее табличка, и перед глазами все данные.
Сделать таблицу с полями цвет, толщина и цена не проблема, MIGXdb поможет, но хочется удобно для администратора сделать. Тем более, это не единичный случай, еще один клиент ждет подобного решения (у того, правда, от 3-х параметров цена зависит :) )
На самом деле у тебя не получится обойтись простой табличкой, так как здесь матрица. У тебя произвольное кол-во материалов и по ним произвольное кол-во вариантов толщины. Каждый из этих вариантов имеет свою итоговую цену. То есть если у тебя 5 материалов и по каждому из них 5 вариантов толщины, в итоге у тебя получится 25 вариантов цен.
Материалы тебе однозначно надо заводить в единый справочник, чтобы их можно было выбирать из выпадающего списка. А вот толщину и стоимость надо указывать вручную.
Варианты здесь фэншуйные лезут различные, вплоть до собственного кастомного ТВ-поля, но наиболее простое и быстрое решение будет такое (во всяком случае я бы так сделал): 1. Создаем справочник материалов (лучше всего документами, по типу как у нас валюты сделаны. Если пока для них не будет публичных страниц, можно их в контекст spravochniki занести. А когда будут, тогда перенести в основной контекст). 2. Создаем TV-поле выпадающий список, чтобы можно было выбирать материал. 3. Создаем MIGX-табличку с тремя колонками: — Выпадающий список материалов (просто указываешь какое TV-поле юзать) — Числовое поле Толщина — Числовое поле Цена. 4. В getdata-процессоре в функции afterIteration парсим JSON-строку из ТВшки и набиваем в массив цен для дальнейшего использования.
В редакторе манагер набивает сколько угодно строчек Материал-Толщина-Цена. На совести манагера, чтобы для одного материала не было повторений, но если очень надо, можно написать проверку в плагин на сохранение документа. Строчки сортировать можно, так что всегда можно держать все материалы рядышком.
Тут один жирный минус: JSON не позволит на уровне запросов выполнять поиск по материалам, толщине и ценам, но в таком случае ты можешь просто поступить: на сохранение документа парсить данные ТВшки и фигачить данные в собственную таблицу для удобства запросов. А интерфейс будет на миге. Другой вариант: просто это дело перевести на MigxDB и сразу данные сохранять в отдельные таблицы.
От трех — это только пользовательское ТВ надо создавать. Там типа нажал кнопку — выбрал параметр — создался блог с табличкой, куда данные указал. Еще параметр — еще блок с табличкой… Вообще для таких как раз задач у нас и был создан класс Модели товара, и в нем уже создавались конечные товары, которые содержали только параметры, влияющие на цену, а все основные параметры и оформление — это содержалось в модели товара, но там запросы такие мозгодробительные, что я даже не включил их в ядро. Тот механизм только под индивидуальные решения.
лучше всего документами
А я справочник в gallery засунул :). Действительно, по документам раскидать лучше будет. Коля, спасибо за идею!
Можно и из галереи дергать данные справочника, разницы нет, ты и оттуда можешь дернуть данные. Главное чтобы не руками наименования прописывались каждый раз.
Да, я примерно так в Delphi и делал — списки с параметрами, там выбираешь нужные, а ниже в основной табличке появляется результат выборки. Жаль, MIGX не позволяет две-три зависимых сетки (один ко многим) открыть на одной страничке. Думаю, подобная фича была бы очень востребована
Эх, говорила мне мама — учи ExtJS!!!
Ты же сам ткнул в пробел. Осваивай, все в твоих руках :) И будешь себе сетки зависимые делать. Типа как в управлении заказами. Там же по каждому заказу можно развернуть детали и посмотреть все товары в заказе. В твоем случае Object.add() или типа того в помощь!
Да, видимо, придется так и сделать :) Времени бы еще… :) Коля, спасибо большое за советы.
Всегда пожалуйста!

Добавить комментарий