Перейти к содержанию
Miha7685776

[Решено] условие на опции

Рекомендуемые сообщения

Здравствуйте. 2 дня ломаю голову. вывод опции, группу опций, тип опций по одному.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот код

    'source': function(request, response) {
        $.ajax({
            url: 'index.php?route=catalog/option/autocomplete&token=<?php echo $token; ?>&filter_name=' +  encodeURIComponent(request),
            dataType: 'json',
            success: function(json) {
                response($.map(json, function(item) {
                    return {
                        category: item['category'],
                        label: item['name'],
                        value: item['option_id'],
                        type: item['type'],
                        option_value: item['option_value']
                    }
                }));
            }
        });
    },

задавать условие тут бесполезно.

 

или тут?

    'select': function(item) {
        html  = '<div class="tab-pane" id="tab-option' + option_row + '">';
        html += '    <input type="hidden" name="product_option[' + option_row + '][product_option_id]" value="" />';
        html += '    <input type="hidden" name="product_option[' + option_row + '][name]" value="' + item['label'] + '" />';
        html += '    <input type="hidden" name="product_option[' + option_row + '][option_id]" value="' + item['value'] + '" />';
        html += '    <input type="hidden" name="product_option[' + option_row + '][type]" value="' + item['type'] + '" />';

        html += '    <div class="form-group">';
        html += '      <label class="col-sm-2 control-label" for="input-required' + option_row + '"><?php echo $entry_required; ?></label>';
        html += '      <div class="col-sm-10"><select name="product_option[' + option_row + '][required]" id="input-required' + option_row + '" class="form-control">';
        html += '          <option value="1"><?php echo $text_yes; ?></option>';
        html += '          <option value="0"><?php echo $text_no; ?></option>';
        html += '      </select></div>';
        html += '    </div>';

        if (item['type'] == 'text') {
            html += '    <div class="form-group">';
            html += '      <label class="col-sm-2 control-label" for="input-value' + option_row + '"><?php echo $entry_option_value; ?></label>';
            html += '      <div class="col-sm-10"><input type="text" name="product_option[' + option_row + '][value]" value="" placeholder="<?php echo $entry_option_value; ?>" id="input-value' + option_row + '" class="form-control" /></div>';
            html += '    </div>';
        }

...........

..............

................

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я уже не первый раз Вам отвечаю.. Включите голову.. 

Только что, Miha7685776 сказал:

или тут?

Тут лишь вывод ответа от сервера.. Соответственно, на стороне сервера, а именно в контроллере который указан в Ajax, то есть в методе autocomplete делайте всю логику.. Проверяйте ID..

Изменено пользователем nexus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а причем тут контроллер автокомплита? 

опции

1 строка размер

2 строка, уже нет размера.

причем тут контроллер?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

nexus, не обижайтесь). реально уже голову сломал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

брежу) блин сложная схема. может есть какой нибудь модуль?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Miha7685776 сказал:

а причем тут контроллер автокомплита? 

опции

1 строка размер

2 строка, уже нет размера.

причем тут контроллер?

 

Ну наверное потому что контроллер решает что куда и зачем, согласны?))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Miha7685776 сказал:

брежу) блин сложная схема. может есть какой нибудь модуль?

 

Сделал бы, но я занят.. Отвлекаюсь на форум, да бы мозг  не вскипел )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну как автокомплит может проверять?

    public function autocomplete() {
        $json = array();

        if (isset($this->request->get['filter_name'])) {
            $this->language->load('catalog/option');

            $this->load->model('catalog/option');

            $this->load->model('tool/image');

            $filter_data = array(
                'filter_name' => $this->request->get['filter_name'],
                'start'       => 0,
                'limit'       => 5
            );

            $options = $this->model_catalog_option->getOptions($filter_data);

            foreach ($options as $option) {
                $option_value_data = array();

                if ($option['type'] == 'select' || $option['type'] == 'radio' || $option['type'] == 'checkbox' || $option['type'] == 'image') {
                    $option_values = $this->model_catalog_option->getOptionValues($option['option_id']);

                    foreach ($option_values as $option_value) {
                        if (is_file(DIR_IMAGE . $option_value['image'])) {
                            $image = $this->model_tool_image->resize($option_value['image'], 50, 50);
                        } else {
                            $image = $this->model_tool_image->resize('no_image.png', 50, 50);
                        }

                        $option_value_data[] = array(
                            'option_value_id' => $option_value['option_value_id'],
                            'name'            => strip_tags(html_entity_decode($option_value['name'], ENT_QUOTES, 'UTF-8')),
                            'image'           => $image
                        );
                    }

                    $sort_order = array();

                    foreach ($option_value_data as $key => $value) {
                        $sort_order[$key] = $value['name'];
                    }

                    array_multisort($sort_order, SORT_ASC, $option_value_data);
                }

                $type = '';

                if ($option['type'] == 'select' || $option['type'] == 'radio' || $option['type'] == 'checkbox' || $option['type'] == 'image') {
                    $type = $this->language->get('text_choose');
                }

                if ($option['type'] == 'text' || $option['type'] == 'textarea') {
                    $type = $this->language->get('text_input');
                }

                if ($option['type'] == 'file') {
                    $type = $this->language->get('text_file');
                }

                if ($option['type'] == 'date' || $option['type'] == 'datetime' || $option['type'] == 'time') {
                    $type = $this->language->get('text_date');
                }

                $json[] = array(
                    'option_id'    => $option['option_id'],
                    'name'         => strip_tags(html_entity_decode($option['name'], ENT_QUOTES, 'UTF-8')),
                    'category'     => $type,
                    'type'         => $option['type'],
                    'option_value' => $option_value_data
                );
            }
        }

        $sort_order = array();

        foreach ($json as $key => $value) {
            $sort_order[$key] = $value['name'];
        }

        array_multisort($sort_order, SORT_ASC, $json);

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

nexus, чтобы этот комплит ловил ид, то надо ему отправить уже созданные   'option_id'    => $option['option_id'], а если ловить уже созданные, то можно былобы на месте сделать условие

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ладно спасибо. попробую найти похожие модули, посмотрю код

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вариантов 2 

Или фильтровать перед записью в базу, в модели или при подгрузке и выборе опции присваивать строке идентификатор и при следующей загрузке в автокомплите проверять наличие этого идентификатора

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.