Связанные опции. — Общие вопросы — OpenCart Форум





Фотография

Связанные опции.

Автор 7up, июля 29 2011 12:46


  • Авторизуйтесь для ответа в теме

Сообщений в теме: 97

.

#1


7up

    Продвинутый пользователь

    • Пользователи
    • 174 сообщений
    8

    Обычный

      Отправлено 29 Июль 2011 — 12:46

      А реализовывал ли кто, такую штуку, когда опции товара связаны/зависящие друг от друга?

      т.е. при смене одной опции в других некоторые пункты могут меняться.



      Например есть товар красный синий и зеленый с объемом памяти 4 и 8 гб, но зеленого только 4гб. Что бы при выборе цвета зеленый один из ваиантов опции "объем памяти" менялся.



      Ну а данные о наличии уже синхронизировать с 1с например — это уже вторая история… это пытаюсь реализовать через модуль импорта/экспорта.


      • 1

      .

        .

        .

        #2


        karapuzam

          Продвинутый пользователь

          • Пользователи
          • 157 сообщений
          22

          Очень хороший

          • ГородВолгоград

          Отправлено 29 Июль 2011 — 02:29

          Вам для этого потребуется перековырять код магазина в частности product.php как минимум… со всеми вытекающими последствиями…


          • 0

          .

            .

            .

            #3


            7up

              Продвинутый пользователь

              • Пользователи
              • 174 сообщений
              8

              Обычный

                Отправлено 29 Июль 2011 — 04:12

                Последствия вытекают не хорошие?

                А как же это реализовывают другие, все работает вроде, есть много работающих магазинов с таким свойством.


                • 0

                .

                  .

                  .

                  #4


                  karapuzam

                    Продвинутый пользователь

                    • Пользователи
                    • 157 сообщений
                    22

                    Очень хороший

                    • ГородВолгоград

                    Отправлено 29 Июль 2011 — 04:29

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









                    я не видел пока ни одного работающего на OCstore магазина по описанному Вами принципу. Мой магазин работает с одним свойством, код менялся. Цвета товара делю просто на разные товары.



                    • 0

                    .

                      .

                      .

                      #5


                      7up

                        Продвинутый пользователь

                        • Пользователи
                        • 174 сообщений
                        8

                        Обычный

                          Отправлено 29 Июль 2011 — 05:29

                          ‘karapuzam’ сказал(а) 29 Июл 2011 — 7:29 PM:

                          я не видел пока ни одного работающего на OCstore магазина по описанному Вами принципу. Мой магазин работает с одним свойством, код менялся. Цвета товара делю просто на разные товары.

                          А это одно свойство у вас динамическое? т.е. зависит от остатков товара? Подгружаете его с 1с?


                          • 0

                          .

                            .

                            .

                            #6


                            7up

                              Продвинутый пользователь

                              • Пользователи
                              • 174 сообщений
                              8

                              Обычный

                                Отправлено 27 Январь 2012 — 09:47

                                Проблема решена. Кому интересно, могу выложить подробное описание реализации связных опций.


                                • 0

                                .

                                  .

                                  .

                                  #7


                                  ravilr

                                    Продвинутый пользователь

                                    • Пользователи
                                    • 2 003 сообщений
                                    431

                                    Очень хороший

                                      Отправлено 27 Январь 2012 — 09:56

                                      тут даже без вопросов )) Если есть решение, всегда надо выкладывать.


                                      • 0

                                      .

                                        .

                                        .

                                        #8


                                        pashast

                                          Продвинутый пользователь

                                          • Пользователи
                                          • 594 сообщений
                                          225

                                          Очень хороший

                                            Отправлено 27 Январь 2012 — 10:01

                                            ‘7up’ сказал(а) 28 Янв 2012 — 12:47 AM:

                                            Проблема решена. Кому интересно, могу выложить подробное описание реализации связных опций.


                                            Конечно выкладывай.


                                            • 0

                                            .

                                              .

                                              .

                                              #9


                                              7up

                                                Продвинутый пользователь

                                                • Пользователи
                                                • 174 сообщений
                                                8

                                                Обычный

                                                  Отправлено 27 Январь 2012 — 11:04

                                                  ок. попытаюсь объяснить своим языком, если будут вопросы прокомментирую….
                                                  Реализовал загрузку данных в магазин из 1с, посему админкой не пользуюсь, т.е. решение не представляет собой модуль

                                                  В админке опции храняться как ( или правильнее сказать в базе хранятся, а в админке видны):

                                                  Наименование опции | значение
                                                  Цвет:размер | Синий: 10, 20, 30
                                                  Цвет:размер | Красный: 20, 30, 40
                                                  Цвет:размер | Зеленый: 50, 60, 70

                                                  Использовал поле radio, т.е. если в значении type будет стоять другие типы опций, как например select, то они будут отрабатываться как обычно. Можно было использовать например тип текст и хранить все значения в одном поле, но в таком случае не будет работать изменение цены в зависимости от выбора опции.

                                                  Двоеточие использую как разделитель. В названии до разделителя наименование первого списка(или radio как в моем случае), наименование второго списка(меняющегося в зависимости от первого) после разделителя.

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

                                                  в product.tpl разделаю все эти параметры и используя Jquery строю связь двух списков.

                                                  Что бы значения корректно попадали в корзину т.е. не Цвет:размер как в наименовании опции, а именно Цвет, данные списков записываются в скрытую форму, которая уже передается в корзину. Правда из за такого решения пришлось изменить еще несколько файлов в теме, дабы эти данные корректно отображались не только в корзине, но и в списке заказов и т.д.

                                                  Выглядит примерно так:


                                                  Куски кодов выкладывать?

                                                  P.S.
                                                  Не знаю плохо ли это, как писали уже выше, что некоторый код сайта пришлось чуток поменять? Но я в основном менял только темплейты, в модель и контролер вроде ничего не лез….


                                                  • 0

                                                  .

                                                    .

                                                    .

                                                    #10


                                                    pashast

                                                      Продвинутый пользователь

                                                      • Пользователи
                                                      • 594 сообщений
                                                      225

                                                      Очень хороший

                                                        Отправлено 28 Январь 2012 — 10:56

                                                        Выложи, пожалуйста, product.tpl


                                                        • 0

                                                        .

                                                          .

                                                          .

                                                          #11


                                                          7up

                                                            Продвинутый пользователь

                                                            • Пользователи
                                                            • 174 сообщений
                                                            8

                                                            Обычный

                                                              Отправлено 28 Январь 2012 — 06:48

                                                              product.tpl — часть кода отвечающая за смену опций:

                                                              Переменная $o отвечает за присутствие в товаре связной опции, при нажатии купить, если она равна 1, то в корзину добавляются значения с скрытого поля, если равна 0, то все как обычно…



                                                              Цитата

                                                              <?php if ($option[‘type’] == ‘radio’) { $o=1;?>
                                                              <div id="option-<?php echo $option[‘product_option_id’]; ?>" class="option">
                                                              <table border="0" cellpadding="5" cellspacing="1" bgcolor="#cccccc">
                                                              <tr>
                                                              <td nowrap bgcolor="#FDFFEA">
                                                              <?php if ($option[‘required’]) { ?>
                                                              <span class="required">*</span>
                                                              <?php } ?>
                                                              <b><?php list($name1, $name2) = explode(":", $option[‘name’]); echo $name1; ?>:</b><br />

                                                              <script>
                                                              function izm(ch){

                                                              <?php

                                                              foreach ($option[‘option_value’] as $option_value) {

                                                              list($nmm, $sz) = explode(":", $option_value[‘name’]);

                                                              echo "if(ch==".$option_value[‘product_option_value_id’]."){ document.calc.master200.options.length=0;";
                                                              $szz = explode(",", $sz);
                                                              $ii="0";
                                                              foreach ($szz as $szzz) {
                                                              echo ‘document.calc.master200.options[‘.$ii.’]=new Option("’.$szzz.’", ", ‘.$name2.’: ‘.$szzz.’", true, true);’;
                                                              $ii++;
                                                              }
                                                              echo ‘}’;
                                                              }?>
                                                              }
                                                              </script>
                                                              <style type="text/css">
                                                              p:hover {
                                                              background-color: #BBFFBB;
                                                              margin: 0;
                                                              padding: 0;
                                                              }
                                                              p:selected {
                                                              background-color: #BBFFBB;
                                                              margin: 0;
                                                              padding: 0;
                                                              }
                                                              p {
                                                              margin: 0;
                                                              padding: 0;
                                                              }

                                                              </style>

                                                              <form name="calc">

                                                              <?php foreach ($option[‘option_value’] as $option_value) { ?>
                                                              <?php list($n, $s) = explode(":", $option_value[‘name’]); ?>
                                                              <p><input type="radio" id="<?php echo $option_value[‘product_option_value_id’]; ?>" name="<?php echo $name1; ?>" value="<?php echo $option_value[‘product_option_value_id’]; ?>" onclick="izm(this.value), document.getElementById(‘val2’).value='<?php echo $option_value[‘product_option_value_id’],"|"; echo $name1; echo ": "; echo $n; ?>’;"><label for="<?php echo $option_value[‘product_option_value_id’]; ?>"><?php echo $n; ?>
                                                              <?php if ($option_value[‘price’]) { ?>
                                                              (<?php echo $option_value[‘price_prefix’]; ?><?php echo $option_value[‘price’]; ?>)
                                                              <?php } ?>
                                                              </label></p>
                                                              <?php } ?>
                                                              </td>
                                                              <td align="center" valign="top" bgcolor="#FDFFEA">
                                                              <span class="required">*</span>
                                                              <b><?php echo $name2,":"; ?></b><br />
                                                              <select name="<?php echo $name2; ?>" id="master200" size="1">
                                                              <option value="">—</option>
                                                              </select>
                                                              <input name="val2" id="val2" type="hidden" value="">
                                                              <input name="option[<?php echo $option[‘product_option_id’]; ?>]" id="val" type="hidden" value="">
                                                              </td>
                                                              </form>
                                                              </tr>
                                                              </table>
                                                              </div>
                                                              <br />
                                                              <?php } ?>



                                                              В чистовик никак не переделаю, поэтому в этом варианте некоторые переменные названы как попало прошу прощения, программисты эстеты меня бы побили

                                                              ….стили вставлены сюда же, для наглядности….


                                                              • 1

                                                              .

                                                                .

                                                                .

                                                                #12


                                                                7up

                                                                  Продвинутый пользователь

                                                                  • Пользователи
                                                                  • 174 сообщений
                                                                  8

                                                                  Обычный

                                                                    Отправлено 28 Январь 2012 — 06:50

                                                                    Теперь вот сижу, ломаю голову, как бы сделать три связные опции например "Тип, Цвет, Размер". Цвет зависит от Типа, а размер соответственно от Цвета.


                                                                    • 0

                                                                    .

                                                                      .

                                                                      .

                                                                      #13


                                                                      pashast

                                                                        Продвинутый пользователь

                                                                        • Пользователи
                                                                        • 594 сообщений
                                                                        225

                                                                        Очень хороший

                                                                          Отправлено 28 Январь 2012 — 06:54

                                                                          Спасибо


                                                                          • 0

                                                                          .

                                                                            .

                                                                            .

                                                                            #14


                                                                            7up

                                                                              Продвинутый пользователь

                                                                              • Пользователи
                                                                              • 174 сообщений
                                                                              8

                                                                              Обычный

                                                                                Отправлено 30 Январь 2012 — 06:14

                                                                                Изучив еще немного jquery понял что все это можно было сделать только на нем

                                                                                Получилось сделать даже три связные опции, причем одна из которых например "Цвет" в виде картинок



                                                                                Добавил еще эффекты, теперь квадратики с цветами красиво выезжают после выбора фасона и при клике по ним мигают )))))


                                                                                • 1

                                                                                .

                                                                                  .

                                                                                  .

                                                                                  #15


                                                                                  spambot

                                                                                    Пользователь

                                                                                    • Пользователи
                                                                                    • 69 сообщений
                                                                                    3

                                                                                    Обычный

                                                                                      Отправлено 02 Февраль 2012 — 12:15

                                                                                      7up, друг спасибо тебе за то что поделился наработками мне нужно как говорится "еще на вчера", но как говорят: "сказал А говори и Б")) шучу конечно, как говорится: "в каждой шутке… Если честно, поделись пожалуйста jquery решением можно без мигающих даже цветов, чтоб просто цвет размер и остаток на складе был связан ооочень надаа, друг спасибо


                                                                                      • 0

                                                                                      .

                                                                                        .

                                                                                        .

                                                                                        #16


                                                                                        7up

                                                                                          Продвинутый пользователь

                                                                                          • Пользователи
                                                                                          • 174 сообщений
                                                                                          8

                                                                                          Обычный

                                                                                            Отправлено 02 Февраль 2012 — 12:37

                                                                                            ‘spambot’ сказал(а) 02 Фев 2012 — 03:15 AM:

                                                                                            7up, друг спасибо тебе за то что поделился наработками мне нужно как говорится "еще на вчера", но как говорят: "сказал А говори и Б")) шучу конечно, как говорится: "в каждой шутке… Если честно, поделись пожалуйста jquery решением можно без мигающих даже цветов, чтоб просто цвет размер и остаток на складе был связан ооочень надаа, друг спасибо

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

                                                                                            Цитата

                                                                                            <?php if ($option[‘type’] == ‘radio’) { $o=1;?>
                                                                                            <div id="option-<?php echo $option[‘product_option_id’]; ?>" class="option">
                                                                                            <table border="0" cellpadding="7" cellspacing="1">
                                                                                            <tr valign="top">
                                                                                            <td nowrap bgcolor="#FDFFEA">
                                                                                            <?php if ($option[‘required’]) { ?>
                                                                                            <span class="required">*</span>
                                                                                            <?php } ?>
                                                                                            <b><?php list($name1, $name2, $name3) = explode(":", $option[‘name’]); echo $name1,", ", $name2,", ", $name3; ?>:</b><br />

                                                                                            <style type="text/css">
                                                                                            p:hover {background-color: #CCCCCC;margin: 0; padding: 0;}
                                                                                            p:selected { background-color: #BBFFBB; margin: 0; padding: 0; }
                                                                                            p { margin: 0; padding: 0; }

                                                                                            </style>

                                                                                            <form name="calc">

                                                                                            <?php foreach ($option[‘option_value’] as $option_value) { ?>
                                                                                            <?php list($n, $s) = explode(":", $option_value[‘name’]); ?>
                                                                                            <p><input type="radio" id="<?php echo $option_value[‘product_option_value_id’]; ?>" name="<?php echo $name1; ?>" value="<?php echo $option_value[‘product_option_value_id’]; ?>" onclick="colors(this.value), document.getElementById(‘val2’).value='<?php echo $option_value[‘product_option_value_id’],"|"; echo $n; ?>’;"><label for="<?php echo $option_value[‘product_option_value_id’]; ?>"><?php echo $n; ?>
                                                                                            <?php if ($option_value[‘price’]) { ?>
                                                                                            (<?php echo $option_value[‘price_prefix’]; ?><?php echo $option_value[‘price’]; ?>)
                                                                                            <?php } ?>
                                                                                            </label></p>
                                                                                            <?php } ?>
                                                                                            </td>
                                                                                            <td align="left" valign="top" width="150" bgcolor="#FDFFEA">
                                                                                            <div id="colors" class="sell"></div>
                                                                                            <select class="sel" id="sel" name="sel"></select>
                                                                                            </td>
                                                                                            </form>
                                                                                            </tr>
                                                                                            </table> </div> <br />

                                                                                            <input name="val2" id="val2" type="hidden" value="">
                                                                                            <input name="val3" id="val3" type="hidden" value="">
                                                                                            <input class="val" name="option[<?php echo $option[‘product_option_id’]; ?>]" type="hidden" id="val" value="">
                                                                                            <script type="text/javascript" src="malsup.github.com/jquery.form.js"></script>
                                                                                            <script>

                                                                                            function colors(what) {
                                                                                            $("#sel").empty();
                                                                                            <?php foreach ($option[‘option_value’] as $option_value) {
                                                                                            list($nmm, $sz) = explode(":", $option_value[‘name’]);
                                                                                            $vls = explode ("|", $sz); ?>
                                                                                            if (what==<?php echo $option_value[‘product_option_value_id’]; ?>) {
                                                                                            $("#colors").html(‘<?php foreach ($vls as $vlss) { list($clrs, $szs)=explode("-", $vlss); echo "<img border="1" class="col" id="",$clrs,"" onclick="sizes(’",$szs,"’), addcolor(’",$clrs,"’)" src="",$clrs,".png">"; } ?>’)
                                                                                            $("#sizes").html(" ")
                                                                                            $("#colors").show("slide", {direction: "up"}, 700);
                                                                                            $(‘#val’).val(»);
                                                                                            }
                                                                                            <?php } ?>
                                                                                            };
                                                                                            function addcolor(what3) {
                                                                                            $("#"+what3).effect("pulsate", { times: 1 }, 700);
                                                                                            document.getElementById(‘val3’).value = document.getElementById(‘val2’).value+" "+what3;
                                                                                            }

                                                                                            function sizes(what2) {
                                                                                            $("#sel").empty();
                                                                                            $("#sel").effect("pulsate", { times: 1 }, 700);
                                                                                            rr = what2.split(",");
                                                                                            for(var i = 0; i < rr.length; i++) $("#sel").append( $(‘<option value="’+rr[i]+’">’+rr[i]+'</option>’));
                                                                                            }
                                                                                            </script>
                                                                                            <style>
                                                                                            .col { border-color: #5D5D5D; margin: 3px; position: relative; }
                                                                                            .sel { display: none; margin: 0px; width: 50px; position: relative; }
                                                                                            .sell { display: none; margin: 0px; position: relative; }
                                                                                            </style>
                                                                                            <?php } ?>


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


                                                                                            • 0

                                                                                            .

                                                                                              .

                                                                                              .

                                                                                              #17


                                                                                              spambot

                                                                                                Пользователь

                                                                                                • Пользователи
                                                                                                • 69 сообщений
                                                                                                3

                                                                                                Обычный

                                                                                                  Отправлено 02 Февраль 2012 — 06:21

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


                                                                                                  • 0

                                                                                                  .

                                                                                                    .

                                                                                                    .

                                                                                                    #18


                                                                                                    sadko

                                                                                                      Пользователь

                                                                                                      • Пользователи
                                                                                                      • 33 сообщений
                                                                                                      2

                                                                                                      Обычный

                                                                                                      • ГородНиколаев

                                                                                                      Отправлено 03 Февраль 2012 — 03:30

                                                                                                      Столкнулся с похожей проблемой.

                                                                                                      Есть у меня товар. К примеру – пиджак. Этот пиджак бывает размеров: 46, 48, 50, 52, 54. Также, этот пиджак бывает следующих цветов: черный, коричневый, синий.

                                                                                                      Я создаю группы опций:

                                                                                                      • Размер: 46, 48, 50, 52, 54
                                                                                                      • Цвет: черный, коричневый, синий


                                                                                                      Иными словами у меня в принципе может быть 15 вариантов пиджаков – по три цвета каждого размера. НО! На складе у меня есть:

                                                                                                      — 46 размера — черный, коричневый, синий (итого – 3 шт.)
                                                                                                      — 48 размера — черный, коричневый (итого – 2 шт.)
                                                                                                      — 50 размера – черный (итого – 1 шт.)
                                                                                                      — 52 размера – синий (итого – 1 шт.)
                                                                                                      — 54 размера – коричневый (итого – 1 шт.)

                                                                                                      Итого:
                                                                                                      — вообще синих пиджаков – 2 шт. (46 и 52)
                                                                                                      — вообще черных пиджаков – 3 шт. (46, 48, 50)
                                                                                                      — вообще коричневых пиджаков – 2 шт. (46 и 48)

                                                                                                      В каждой опции ввожу соответственное количество каждого цвета и размера. В товаре у меня становятся доступными два выпадающих списка: размер и цвет пиджака. НО! Из-за того, что оба выпадающих списка доступны, покупатель может «сконструировать» такой пиджак, которого у меня на складе – НЕТ! Например, он выберет – размер 54, а цвет – синий! А у меня то такого на складе нет!

                                                                                                      Опции размер и цвет – СВЯЗАНЫ! Если я выбираю 54 размер, то у меня в списке ЦВЕТ должен оставаться только один цвет – коричневый. Но на практике есть возможность выбрать все цвета. Вообще в OpenCart как-то получается, что опции какие-то независимые друг от друга, сами по себе. Выходит, что товар конкретного размера и конкретного цвета – не может иметь уникального артикула. Не заводить же как отдельный товар пиджак размера 46 и придавать ему опцию цвета. Потом заводить такой же пиджак, но уже другого размера и т.п. Это как-то неправильно….

                                                                                                      Других решений нету? Потому как ваш способ — тоже полумера какая то. Если товаров много, или разного цвета (у меня в магазине одежды — 38 цветов и 5 размеров) — будет расти количество опций под каждый товар. Меняется наличие на складе — нужно редактировать значение.


                                                                                                      • 0

                                                                                                      .

                                                                                                        .

                                                                                                        .

                                                                                                        #19


                                                                                                        spambot

                                                                                                          Пользователь

                                                                                                          • Пользователи
                                                                                                          • 69 сообщений
                                                                                                          3

                                                                                                          Обычный

                                                                                                            Отправлено 03 Февраль 2012 — 03:43

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


                                                                                                            • 0

                                                                                                            .

                                                                                                              .

                                                                                                              .

                                                                                                              #20


                                                                                                              freelancer

                                                                                                                • OC Team
                                                                                                                • 5 257 сообщений
                                                                                                                1 011

                                                                                                                Очень хороший

                                                                                                                  Отправлено 03 Февраль 2012 — 04:17

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

                                                                                                                  вот что пришло в голову: создать сущность Группа опций товара, у которой и будут эти аттрибуты. опции конкретного товара буду добавляться не товару, а этой группе.

                                                                                                                  например товар: пиждак

                                                                                                                  группа: синий_48 (кол-во 10, вычитать "да", цена 500, баллы 0, вес 0.5)

                                                                                                                  опции: цвет синий, размер 48.


                                                                                                                  • 0

                                                                                                                  .

                                                                                                                    .

                                                                                                                    .

                                                                                                                    .


                                                                                                                    • Like
                                                                                                                      0

                                                                                                                    .


                                                                                                                    Количество пользователей, читающих эту тему: 1

                                                                                                                    0 пользователей, 1 гостей, 0 анонимных

                                                                                                                    .

                                                                                                                    1. OpenCart Форум
                                                                                                                    2. Поддержка и ответы на вопросы
                                                                                                                    3. Общие вопросы
                                                                                                                    4. Privacy Policy

                                                                                                                    .
                                                                                                                    .


                                                                                                                    http://opencartforum.ru/topic/3759-sviazannye-optcii/

                                                                                                                    Губарь Маргарита Александровна