Вы здесь

0

Здравствуйте, уважаемые разработчики друпал! Скажу сразу суть вопроса: нужно, чтобы фото товара не менялось при смене размера одежды, а при смене цвета - менялось.
Теперь издалека:
Магазин одежды - это более сложная вещь, чем магазин косметики, потому что у товаров типа Одежда есть атрибуты: цвет и размер! И это означает, что заказывая продукт пользователь должен выбирать эти параметры продукта.
Уважаемый xandeadx пояснял в блоге как добавлять атрибуты: http://xandeadx.ru/blog/drupal/647
Нужно делать много товаров на склад коммерц и подключать их все к одному Продукт Дисплею или Товару на витрине, при этом выбирая атрибут пользователь может видеть обновленное фото товара.
То же самое рассказывается на видео: http://drupal-tv.ru/video/atributy-tovara-v-drupal-commerce
И дальнейшая доработка такого магазина - использование **Inline Entity Form **: https://vimeo.com/40933753
Inline Entity Form позволяет создавать много артикулов сразу во время создания Продукт Дисплея.
При этом чтобы при смене атрибута цвет появлялась картинка товара выбранного цвета, нужно создавать Товары с фотографией (артикулы с фотографией) - то есть в типе товара в Коммерц добавить поле Фото. Но как быть с размером? Я еще не догуглил как же сделать, чтобы поле размер было просто выборным и не обновляло фотографию товара. Мне нужно, чтобы атрибут размер был просто отмечен несколькими галками в каждом товаре определенного цвета.
Сейчас получается, что если у меня товар 5 цветов и каждый цвет трех размеров, мне приходится добавлять 15 артикулов (товаров на склад коммерц) каждый со своей фоткой - это долго и неудобно.

PS: выяснил что на Кикстарте есть все что я говорю http://demo.commerceguys.com/ck/tops/drupal-commerce-hoodie осталось поставить изучить и добавить только то что надо.

Версия Drupal: 
7.x
Категория: 
Form API
Связанные проекты: 
Drupal Commerce
Вопрос задан 12.04.2015 - 14:31

вот пример как только цвет влияет на фото http://www.bonprix.ru/produkty/blejzer-olivkovyj-917475
подскажите, как еще сделать чтобы при клике по фотке товара определенного цвета подгружался выбранный цвет и не менялся размер если есть такой размер для выбранного цвета?
в настоящее время у меня сделано на странице товара: главная фотка товара - это фото из поля товара в коммерце. и дополнительные фото товара - это поле из Продукт дисплея, которое не влияет на выбор и служит только для просмотра. мне надо, чтобы вместо дополнительных фото
отображались фото вариаций товара, подключенных к продукт дисплею при клике выбиралась эта вариация но не влияла на выбор размера если есть такой размер для данной вариации. а еще лучше чтобы отображалось есть такой размер или нету

Комментарий оставлен 12.04.2015 - 14:41

Если вам не нужны sku у размеров, то добавьте line item-у поле Размер

Комментарий оставлен 13.04.2015 - 00:21

я когда добавил размер в Line Item то поле размер появилось у всех товаров. а мне нужно добавить это поле только для товаров типа одежда. а есть разные типы товаров: техника, поделки, игрушки, подарки, одежда.

Комментарий оставлен 13.04.2015 - 13:24

к тому же мне надо задавать наличие размеров товаров, то есть при добавлении товара на Склад Коммерц надо отмечать галками какие размеры есть, а не просто дать клиенту кнопку с отметкой любого размера. Мне кажется что это элментарно, как меню таксономии для категорий блогов, но я первый раз это делаю не нашел как

Комментарий оставлен 13.04.2015 - 13:43

я когда добавил размер в Line Item то поле размер появилось у всех товаров

создайте разные типы line item-ов или скройте элемент в hook_form_alter

к тому же мне надо задавать наличие размеров товаров

добавьте товару поле Размер

Комментарий оставлен 13.04.2015 - 16:31

если добавить товару поле размер, то для выбора размера покупателем нужно добавлять несколько товаров которые будут отличаться размером. а я хочу узнать как без добавления нескольких товаров можно дать продавцу возможность отметить несколько размеров а пользователю выбрать нужный рамзер.
если сделать поле размер множественным выбором то на странице товара (на витрине магазина) размер отображается как несколько ссылок на термины вместо выпадающего списка выбора

Комментарий оставлен 13.04.2015 - 19:10

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

сделайте обычное multi-value поле, не атрибут

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

как я уже писал - добавьте поле line item-у, ограничьте список значений в hook_form_alter

Комментарий оставлен 13.04.2015 - 19:16

по запросу: drupal multi-value поле - яндекс ничего не показал. поэтому я добавил поле типа Список (текст) с набором значений и множественным значением. при отображении товара тогда поле размер отображается как простой текст: Size: S M L - это те значения которые отмечены при добавлении товара. но не работает как выбор размера из списка.
_
чтобы создать новый тип Line Item я использовал модуль Commerce Customizable Products. добавил не понял как связать его с нужным типом Товаров. Но также я не понял как можно задать в этом случае какие размеры есть у товара, ведь это поле размер будет доступно только покупателю при оформлении товара, но не будет доступно продавцу при создании товара (невозможно указать какие есть размеры в наличии)

Комментарий оставлен 13.04.2015 - 23:01

При добавлении поля Размер к Line-item'у у меня появляется выбор размера на товарах, но нет возможности задавать наличествующие размеры. Я добавляю такое же самое поле к Типу товара . Редактирую товар, устанавливаю нужные галки напротив размеров - но все равно на выбор отображаются все размеры. Тогда я удаляю из Line-Item'а это поле - и оно отображается как простой текст или как ссылка на термин, но нет как выборное значение в настройках отображения типа товара.
Тогда я активирую это как атрибут, нажав в настройках поля галку:
"Активировать это поле как поле атрибута на форме добавления в корзину." и выбрав вариант выбора Attribute selection widget - Выпадающий список. Чищу кеш. Ничего не изменяется: по-прежнему поле Размер отображает три отмеченных размера как простой текст, но не предлагет выбор из этих трех как атрибут. Может быть версии Коммерца не те? у меня Commerce 7.x-1.11

Комментарий оставлен 13.04.2015 - 23:32

https://drupalcommerce.org/faq/product-attributes
тут написано что надо создавать вариации товара с разными размерами и цветами. я так умею все хорошо. но я не хочу создавать разные товары котоыре отличаются размером. я хочу водном товаре указать какие есть в наличии размеры и дать на выбор покупателю нужные размеры (можно много размеров заказать)

Комментарий оставлен 13.04.2015 - 23:42

по запросу: drupal multi-value поле - яндекс ничего не показал

как можно догадаться из перевода это поле со множественным значением

но не работает как выбор размера из списка

оно и не должно работать, на форме должен отображаться виджет line item-а

Но также я не понял как можно задать в этом случае какие размеры есть у товара

как я писал выше — "ограничьте список значений в hook_form_alter"

Комментарий оставлен 14.04.2015 - 00:26

я уже использовал модуль https://www.drupal.org/project/commerce_option но и там не понял как можно ограничить список выбора.
подскажите тогда как мне можно в каждом продукте с помощью Hook_form_alter ограничивать список выбора размеров только отмеченными автором продукта вариантами?

Комментарий оставлен 14.04.2015 - 00:36

очень сложно работать с полями и классами объекта $node
я написал такой код, и что делать дальше я не знаю ввиду малых комментов видных мне в гугле по запросу drupal hook node view line item, а также ввиду сложности чтения вывода команды ptint_r($node->conten);. подскажите как мне ограничить набор чекбоксов в поле Line item field_size только тем набором размеров который присутствует (отмечен галакми) в поле коммерческого продукта типа clothes поля field_available_sizes ??
Листинг моего кода на этапе выбора названия функции и поиска названий переменных (правильно назвал функцию и у меня уже получалось вывести свою Хело ворлд правда не в ту переменную что хочу править, не знаю как к ней обратиться правильно:

/*disable attributes from node page of type product_w_a that are not checked*/
/*line_item_fields[field_size]  should be presented with only checked items from field-available-sizes */

function commerce_product_attributes_select_node_view($node, $view_mode, $langcode) {

    if ($node->type=="product_w_a"){
        if ($view_mode == 'full') {

            //dvm($node->content);
          $node->content['line_item_fields']['field_size'] = array(
           '#markup' => 'Hello World', 

           );
        }
    }
}
Комментарий оставлен 21.04.2015 - 15:54

благодаря ответу на этом сайте в другом вопросе я узнал с помощью
dpm($node->content['field_tocart'] название нужной мне переменной:
$node->content['field_tocart'][0]['line_item_fields']['field_size']['und']
я думаю что подгрузка коммерческого продукта при выборе цвета усложнит написание модуля, ведь скорее всего в $node не связаны коммерческие продукты и массив line_item_fields, а для разных цветов товаров могут быть отмечены разные наборы размеров. Поэтому я предполагаю что нужен не hook_node_view() а хук просмотра коммерческого продукта
хотя Line item связано с нодой... подскажите как правильно увязать?

Комментарий оставлен 21.04.2015 - 16:27

Столкнулся с такой же проблемой: есть товары нескольких типов, у каждого товара несколько характеристик ("размер", "длина", "ширина" и т.п.), выводимых в line item, и которые нужно ограничить в товаре. Решил проблему через hook_form_alter. Сделал немного универсальный вариант на случай, если будут добавляться новые характеристики, но есть одно условие - имя поля товара должно совпадать с именем поля line item + в конце добавляется произвольный символ для уникальности поля. Может решение и костыльное, но, если коротко, выглядит оно следующим образом:

function MODULE_NAME_form_alter(&$form, &$form_state, $form_id) {
  if (strpos($form['#form_id'], 'commerce_cart_add_to_cart_form_') !== false) {
    $pid = $form['product_id']['#value']; // получаем текущий product_id товара
    // загружаем товар, чтобы получить нужные поля из него
    $cur_prod = commerce_product_load($pid);
    foreach ($cur_prod as $key => $field) {
      if (strpos($key, 'field_') !== false) {
        // здесь убираем последний символ из имени поля, чтобы затем их можно было 
        // сравнить с именами полей в line item; формируем массив, состоящий из имени
        // поля и опций - id терминов таксономии (поля товара и line item - ссылки на
        // термины таксономии)
      }
    }
    foreach ($form['line_item_fields'] as $key => $field) {
      if (strpos($key, 'field_') !== false) {
        // здесь сравниваем имена полей line item с именами полей в сформированном ранее
        // массиве; при совпадении имен сравниваем опции (taxonomy id) и оставляем
        // совпадающие
      }
    }
  }
}
Комментарий оставлен 16.06.2015 - 13:16

Ответы

0

у меня не работает мой модуль, который называется commerce_product_attributes_select и имеет код:

function commerce_product_attributes_select_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state, $form_id) {

    //drupal_set_message('<pre>' . print_r($form_state, TRUE) . '</pre>');
    echo "hi!";
}

хотя если поместить этот код в тему, то работает:

function mytheme_form_commerce_cart_add_to_cart_form_alter(&$form, &$form_state, $form_id) {
    //drupal_set_message('<pre>' . print_r($form_state, TRUE) . '</pre>');
    dpm($form);
}

также я не могу нигде найти содержимое поля Размеры коммерческого продукта. Для поля коммерческого продукта "Размеры в Наличии" выставлена галка
Активировать как атрибут при добавлении в корзину. Но нету его в dpm($form);
field_color есть а этого нет.

Ответ дан 10.05.2015 - 18:57