0 Пользователей и 1 Гость просматривают эту тему.
  • 1 Ответов
  • 666 Просмотров
*

Yura Vakulenko

  • Захожу иногда
  • 238
  • 6 / 1
Привет ребята! Помогите мне пожалуйста разобратся и сформировать кастомный массив с атрибутами товара, в котором будет содержатся кастомная разметка для <select></select> полей

работать нужно в Таблице Product (jshopProduct::getBuildSelectAttributes) вот в этом методе
И формировать кастомный select  (если указан в attr type выбран как select) или кастомный radio (если указан в attr type выбран как radio) нужно в том случае, если имя атрибута заканчивается на суффикс _tpl-sel (ИМЯ-АТРИБУТА_tpl-sel) Я то знаю как это сделать,  но у меня вместе с обработкой моего массива  $_tpl_options, который я и планирую использовать для построения options полей для select и radio идет и обработка оригинального массива $options. А мне нужно чтобы мой массив $_tpl_options обрабатывался и при этом $options - не затрагивался!

А мне нужно чтобы мой массив $_tpl_options обрабатывался и при этом $options - не затрагивался!

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

                    // мои правки
                    $_tpl_options = array(); // создаю отдельный массив в котором будут опции
                    //атрибутов.. на основе него и будет формироваться код для select или radio
                    //атрибутов.

                    $tmpl_attr_name = explode('_', $selects[$attr_id]->attr_name);
                    if ($tmpl_attr_name[1] == 'tpl-sel') { // если в имени атрибута содержится _tpl-sel
                        $selects[$attr_id]->attr_name = $tmpl_attr_name[0]; // устанавливаем имя атрибута без преф. _tpl-sel
                        foreach ($options as $k3 => $v3) {
                            $_tpl_options[$k3]=$v3; // заполняем массив $_tpl_options можно было
                            // и так $_tpl_options = array_merge($_tpl_options,$options); или
                            //$_tpl_options = $options;
                        }                       

                        $regexp_img = '/(<img.*?src\s*=.*?>)([\w\s-,]+)/'; // регулярка для обработки $_tpl_options[$k4]->value_name

                        // убираем из $_tpl_options[$k4]->value_name текстовое название и оставляем там только картинку
                        foreach ($_tpl_options as $k4 => $v4) {
                            preg_match_all($regexp_img, $_tpl_options[$k4]->value_name, $matches);
                            if ($matches[1]) {
                               $_tpl_options[$k4]->value_name = $matches[1][0];
                            } else if ($matches[2]) {
                               $_tpl_options[$k4]->value_name = $matches[2][0];
                            }                           
                        }
                        // как видите обработка идет только с $_tpl_options, но почему-то и оригинальный массив $options тоже обрабатывается и из $options ($options[$k]->value_name) так же убирается название опции атрибута, хотя этого быть не должно.. потому как с $options я не работаю..
                        $selects[$attr_id]->tpl_selects = 'will build!';
                        //wrap_pre($_tpl_options, '$_tpl_options');
                    }

вот код оригинального метода .. там я покажу куда буду вставлять свои правки
Код
function getBuildSelectAttributes($attributeValues, $attributeActive, $displayonlyattrtype = null){
        $jshopConfig = JSFactory::getConfig();
        if (!$jshopConfig->admin_show_attributes) return array();
        $dispatcher = JDispatcher::getInstance();
        $attrib = JSFactory::getAllAttributes();
$userShop = JSFactory::getUserShop();
        $selects = array();

        foreach($attrib as $k=>$v){
            $attr_id = $v->attr_id;
            if ($displayonlyattrtype){
                $v->attr_type = $displayonlyattrtype;
            }
            if (isset($attributeValues[$attr_id]) && $attributeValues[$attr_id]){
                if (isset($attributeActive[$attr_id])){
                    $_firstval = $attributeActive[$attr_id];
                }else{
                    $_firstval = 0;
                }
                $selects[$attr_id] = new stdClass();
                $selects[$attr_id]->attr_id = $attr_id;
                $selects[$attr_id]->attr_name = $v->name;
                $selects[$attr_id]->attr_description = $v->description;
                $selects[$attr_id]->groupname = $v->groupname;
                $selects[$attr_id]->firstval = $_firstval;
                $options = $attributeValues[$attr_id];
                $attrimage = array();
                foreach($options as $k2=>$v2){
                    $attrimage[$v2->val_id] = $v2->image;
$addPrice = $v2->addprice;
                    $addPrice = getPriceFromCurrency($addPrice, $this->currency_id);
                    $addPrice = getPriceCalcParamsTax($addPrice, $this->product_tax_id);
                    if ($userShop->percent_discount){
                        $addPrice = getPriceDiscount($addPrice, $userShop->percent_discount);
                    }

                    $options[$k2]->addprice = $addPrice;
                }

                if ($v->attr_type==1){
                // attribut type select

                    if ($jshopConfig->attr_display_addprice){
                        foreach($options as $k2=>$v2){
                            if (($v2->price_mod=="+" || $v2->price_mod=="-" || $jshopConfig->attr_display_addprice_all_sign) && $v2->addprice>0){
                                $ext_price_info = " (".$v2->price_mod.formatprice($v2->addprice, null, 0, -1).")";
                                $options[$k2]->value_name .=$ext_price_info;
                            }
                        }
                    }

                    if ($jshopConfig->product_attribut_first_value_empty){
                        $first = array();
                        $first[] = JHTML::_('select.option', '0', _JSHOP_SELECT, 'val_id','value_name');
                        $options = array_merge($first, $options);
                    }

                    if (isset($attributeActive[$attr_id]) && isset($attrimage[$attributeActive[$attr_id]])){
                        $_active_image = $attrimage[$attributeActive[$attr_id]];
                    }else{
                        $_active_image = '';
                    }
                    if (isset($attributeActive[$attr_id])){
                        $_select_active = $attributeActive[$attr_id];
                    }else{
                        $_select_active = '';
                    }

// СЮДА ВСТАВЛЯЮ СВОИ ПРАВКИ ДЛЯ ФОРМИРОВАНИЯ КАСТОМНОГО ATTR TYPE SELECT
// СЮДА ВСТАВЛЯЮ СВОИ ПРАВКИ ДЛЯ ФОРМИРОВАНИЯ КАСТОМНОГО ATTR TYPE SELECT
// СЮДА ВСТАВЛЯЮ СВОИ ПРАВКИ ДЛЯ ФОРМИРОВАНИЯ КАСТОМНОГО ATTR TYPE SELECT

$html_select_attribute_param = 'class="'.$jshopConfig->frontend_attribute_select_class_css.'" size = "'.$jshopConfig->frontend_attribute_select_size.'" onchange="setAttrValue(\''.$attr_id.'\', this.value);"';
                    $selects[$attr_id]->selects = JHTML::_('select.genericlist', $options, 'jshop_attr_id['.$attr_id.']', $html_select_attribute_param, 'val_id', 'value_name', $_select_active).
"<span class='prod_attr_img'>".$this->getHtmlDisplayProdAttrImg($attr_id, $_active_image)."</span>";
                    $selects[$attr_id]->selects = str_replace(array("\n","\r","\t"), "", $selects[$attr_id]->selects);
                }else{
                // attribut type radio

                    foreach($options as $k2=>$v2){
                        if ($v2->image) $options[$k2]->value_name = "<img src='".$jshopConfig->image_attributes_live_path."/".$v2->image."' alt='' /> ".$v2->value_name;
                    }

                    if ($jshopConfig->attr_display_addprice){
                        foreach($options as $k2=>$v2){
                            if (($v2->price_mod=="+" || $v2->price_mod=="-" || $jshopConfig->attr_display_addprice_all_sign) && $v2->addprice>0){
                                $ext_price_info = " (".$v2->price_mod.formatprice($v2->addprice).")";
                                $options[$k2]->value_name .=$ext_price_info;
                            }
                        }
                    }

// СЮДА ВСТАВЛЯЮ СВОИ ПРАВКИ ДЛЯ ФОРМИРОВАНИЯ КАСТОМНОГО ATTR TYPE RADIO
// СЮДА ВСТАВЛЯЮ СВОИ ПРАВКИ ДЛЯ ФОРМИРОВАНИЯ КАСТОМНОГО ATTR TYPE RADIO
// СЮДА ВСТАВЛЯЮ СВОИ ПРАВКИ ДЛЯ ФОРМИРОВАНИЯ КАСТОМНОГО ATTR TYPE RADIO

                    $radioseparator = '';
                    if ($jshopConfig->radio_attr_value_vertical) $radioseparator = "<br/>";
                    foreach($options as $k2=>$v2){
                        $options[$k2]->value_name = "<span class='radio_attr_label'>".$v2->value_name."</span>";
                    }                   

                    $selects[$attr_id]->selects = sprintRadioList($options, 'jshop_attr_id['.$attr_id.']', 'onclick="setAttrValue(\''.$attr_id.'\', this.value);"', 'val_id', 'value_name', $attributeActive[$attr_id], $radioseparator);
                    $selects[$attr_id]->selects = str_replace(array("\n","\r","\t"), "", $selects[$attr_id]->selects);



                }
                $dispatcher->trigger('onBuildSelectAttribute', array(&$attributeValues, &$attributeActive, &$selects, &$options, &$attr_id, &$v));
            }
        }
        $grname = '';
        foreach($selects as $k=>$v){
            if ($v->groupname!=$grname){
                $grname = $v->groupname;
                $selects[$k]->grshow = 1;
            }else{
                $selects[$k]->grshow = 0;
            }
        }
    return $selects;
    }

*

Yura Vakulenko

  • Захожу иногда
  • 238
  • 6 / 1
Уже сам разобрался.. Спасибо всем, кто смотрел!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условие для кол-ва товара больше нуля

Автор kik84

Ответов: 3
Просмотров: 257
Последний ответ 16.02.2024, 13:33:24
от kit2m2
WT On fly image handler изображения товара JoomShopping в webp на лету

Автор sergeytolkachyov

Ответов: 9
Просмотров: 1455
Последний ответ 17.10.2023, 12:40:19
от sergeytolkachyov
Убрать модуль в карточке товара JoomShopping

Автор alexkraym

Ответов: 35
Просмотров: 4410
Последний ответ 21.08.2023, 07:17:53
от delchev
Проблема с фото в карточке товара

Автор astapon

Ответов: 18
Просмотров: 1615
Последний ответ 24.04.2023, 12:37:50
от kit2m2
Код товара - автоматическая генерация.

Автор AndreyUA

Ответов: 93
Просмотров: 12504
Последний ответ 17.03.2023, 11:28:47
от geral