Изменить изображение продукта, когда посетитель делает выбор атрибута в Ubercart - PullRequest
1 голос
/ 30 июля 2010

Текущая настройка

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

У каждого продукта также есть раскрывающийся список выбора атрибута, например, «Цвет».

Конфигурация Drupal / Ubercart

Я использую Drupal 6. Существует тип контента Product, который имеет пользовательское поле image типа file . Это изображение поле принимает несколько значений (то есть несколько изображений).

Затем я использую вид (модуль views) для отображения серии миниатюр и javascript для изменения основного изображения при нажатии на миниатюру.

Чего я пытаюсь достичь

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

На что я смотрел

Мне известно о Ubercart Option Image , но это вынуждает вас загружать новое изображение для каждого атрибута, а не для каждого продукта. Например, атрибут color используется для нескольких различных продуктов, которые имеют одинаковые цвета.

При использовании дополнительного модуля изображения все продукты с одинаковым атрибутом будут отображать одно и то же изображение. Так что это не пойдет.

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

Ответы [ 2 ]

2 голосов
/ 04 августа 2010

Это должно быть возможно, но несколько окольным путем. Возможно, следующий метод будет стоить боли?

  1. Создать новый тип контента. Назовите это ImagefieldAttribute. Позвольте этому типу контента хранить неограниченное количество полей изображения. Также свяжите тип контента ImagefieldAttribute со словарем таксономии, называемым атрибутом. По сути, тип контента ImagefieldAttribute будет хранить все изображения продуктов с одинаковым атрибутом

  2. Теперь создайте поле ссылки на узел в типе содержимого Product. Поле nodereference будет ссылаться только на тип содержимого ImagefieldAttribute. ( edit: убедитесь, что поле nodereference может иметь неограниченное количество ссылок на узел. Это делается для того, чтобы вы могли ссылаться на произвольное количество типов содержимого ImageFieldAttribute - каждый из которых содержит все изображения с определенным атрибутом)

  3. Вам нужно будет изменить вид и миниатюры, чтобы отразить дополнительный уровень косвенности в типе контента Product. Если у вас есть опыт работы с представлениями, вы поймете, что это случай создания отношений между представлениями.

  4. Вы также сможете создавать открытые фильтры. Обратите внимание, что вам снова нужно будет использовать отношения, так как фильтры будут в типе контента ImagefieldAttribute (который вы получите, используя отношение nodereference). Вы можете ограничить атрибуты, которые будут отображаться (например, если среди каких-либо элементов нет желтого цвета), вы не должны становиться желтыми в раскрывающемся списке. Этого можно добиться с помощью модуля http://drupal.org/project/views_taxonomy_selective_filter.

  5. Может быть утомительно каждый раз создавать ImagefieldAttribute, а затем привязывать его к вашему продукту. Это можно легко сделать с помощью http://drupal.org/project/popups_reference

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

1 голос
/ 04 августа 2010

Если я понимаю, что вы пытаетесь выполнить, я сделал нечто подобное на http://homespun -at-heart.com / product / gracie . Для этого я просто настроил javascript и функцию предварительной загрузки модуля option_images, чтобы обновить основное изображение продукта вместо изображения option_image, как это делается по умолчанию.

Одним из основных недостатков того, что я сделал, было то, что дубликаты изображений хранятся в двух местах на сервере и, следовательно, загружаются отдельно. Это был небольшой проект, который был выполнен с ограниченным бюджетом, поэтому у меня не было свободы тратить время, чтобы сделать это «правильно». Но, если это все, что вам нужно ... это работает!

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

Обновление 1:
Я не уверен, сколько вы готовы инвестировать в этот проект, но, поскольку я немного об этом подумал, мне кажется, вам нужно указать, какие параметры атрибутов применимы к каким изображениям. Я хотел бы визуализировать, что когда вы загружаете изображения в продукт, вы можете сделать этот выбор.

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

Я еще долго не думал об этом, чтобы визуализировать интерфейс. Возможно, некоторые другие ваши требования будут диктовать это.

Обновление 2:
После вашего комментария ниже, вот еще несколько предложений.

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

Для этого потребуется значительный объем работы и, возможно, другая таблица или хотя бы поле, добавленное в таблицу uc_product_options для хранения отношений между продуктом и изображением. Я бы использовал модуль uc_option_image в качестве отправной точки. Это дало бы вам много указаний по выполнению того, что необходимо.

Что я сделал, чтобы решить проблему с прикреплением атрибутов к нескольким продуктам, так это чтобы мой клиент поместил все возможные цвета в атрибут, а затем выбрал только те, которые применяются к конкретному продукту. Другой вариант, который мы рассмотрели, но наложил вето, - это настройка множества различных атрибутов, которые примерно соответствуют каждому другому продукту. Я забыл все причины, по которым мы не пошли по этому пути, но некоторые из них довольно очевидны. : -)

...