Все равно начинать когда-то надо, так лучше на чем-нибудь реальном, чем просто так )

Не за что! Но наберись терпения. Эта задача совсем не на один час.

Почитать следует не по migxDB, а по ExtJS, потому что мига — это только обертка для конфигурации. Но учитывая твою задачу, лучше его и не трогать. Правильней допилить или наш групповой редактор, добавив в него редактирование этих цен/цветов и т.п. через дополнительный интерфейс по правой кнопки мыши, или в редактор документа еще одну вкладку сделать и там уже интерфейс. Как вкладку добавить смотри или плагин ShopModx, или плагин в XLexicon.

Понял. Я, в принципе начал ковыряться с процессорами и понял уже, что многие переписывать придется. Тут такая картина: у товара может быть несколько цветов, и по каждому цвету может быть задано разное количество размеров. А migxDB позволяет вложенные таблички делать? Не посоветуешь, где лучше почитать по нему?

Саша, привет! На самом деле очень не советую лезть в эти модели. Механизм крайне обширен, и не до конца проработан. Эта основа готовилась под конкретный проект и там индивидуально дорабатывалась, и на это были серьезные бюджеты. Там дело не только в сложных выборках, но и в интерфейсах управления и т.п. Пока для тебя наиболее приемлемый вариант — использовать TV-шки и migxDB. Как разную стоимость реализовать в зависимости от отдельных параметров — ты это уже все проходил. К сожалению, пока более удобного ничего не могу посоветовать.

Добрый день! Извиняюсь за долгий ответ, был в отъезде на несколько дней. Вопрос ваш довольно интересный. Вам ребята судя по всему помогли, но чтобы еще более фэншуйно получилось, надо конечно нам и ядро чуть-чуть доработать будет, добавив признак связанных товаров. Ведь по сути, даже если вы реализовали добавление нескольких товаров, если в итоге клиент захочет отказаться от какого-то товара, то и все сопутствующие к нему товары надо бы убирать. Да и вообще видеть их в форме заказа, хотя бы для удобства. Ну да ладно, это потом, а пока просто еще более детально разберем еще один вариант реализации этой задачи, потому что тайминги в JS — это не совсем круто, да и прочие моменты есть. Вам на самом деле просто надо переопределить action-процессор и в нем реализовать циклическое выполнение процессора добавления товара. Как это делается, написано здесь (читайте внимательно раздел «Переопределяем процессоры»). В кастомном action-процессоре укажите свой отдельный процессор, в методе process которого и пропишите примерно следующее: public function process(){ $path = $this->modx->getObject('modNamespace', 'basket')->getCorePath().'processors/';

foreach($products as $product_id => $quantity){
    
    if(!$response = $modx->runProcessor('basket/web/orders/products/add',
    array(
        "product_id"    => $product_id,
        "quantity"      => $quantity ? $quantity : 1,
    ), array(
        'processors_path' => $path,
    ))){
        return $this->failure("Не удалось выполнить процессор");
    }
    
    // else
    if($response->isError()){
        return $response->getResponse();
    }
}

return $this->success('Товары успешно добавлены');

} Тут конечно могут быть логические ошибки с обработчиком ошибок (к примеру, из пяти товаров 3 добавилось, а с четвертым ошибка, и он вернет ошибку, хотя три все-таки будут добавлены), но это крайне мелкая вероятность, так что можно пренебречь. И именно поэтому и надо ядро доработать. Но в целом это вполне рабочий вариант, и выполнено будет в один запрос, после чего корректно на сервер уйдет запрос на состояние корзины. P.S. Спасибо за положительные отзывы :)

Рад, что помог. Да, примерно так. только неплохо в ajax error обрабатывать и при ошибке давать команду на удаление уже добавленных в этой транзакции товаров. А может, и не надо :)

Спасибо за подсказку, сделал все при помощи ajax запроса к коннектору напрямую: <script> $(function() { $('#product_f').submit(function(e){ //отменяем стандартное действие при отправке формы e.preventDefault(); //берем из формы метод передачи данных var m_method=$(this).attr('method'); //получаем адрес скрипта на сервере, куда нужно отправить форму var m_action='http://www.tehnofazenda.ru/assets/components/basket/connectors/connector.php?action=products/add'; {assign var=arr value=array(1,2,3,4)} {foreach from=$arr item=i}

    var op_data="product_id={$object{$i}.product_id}";
    if (document.getElementById('option{$link{$i}}').checked)
        {
          $.ajax({ 
          type: m_method, 
          url: m_action, 
          data: op_data, 
          success: function(result){ 
                 } 
             });
        }
    {/foreach}
    //получаем данные, введенные пользователем в формате input1=value1&input2=value2..., 
    //то есть в стандартном формате передачи данных формы 
    var m_data=$(this).serialize(); 
    $.ajax({ 
        type: m_method, 
        url: m_action, 
        data: m_data, 
        success: function(result){ 
            setTimeout("document.location.href='http://www.tehnofazenda.ru/order/'", 700);
            } 
        });
    }); 
});
</script>

по ajax: есть удобный компонент для форм malsup.com/jquery/form/ а где посмотреть — в окне дебаггера (есть и в FireFox и в chrome) ? т.е. при добавлении передается action=products/add, product_id и quantity. вот это и надо в запросах кидать, меняться только последние 2 параметра будут. А как сделать цикл — тут я не силен, javascript пока сам грызу по мануалам :(