Неправильная работа сниппета msProductOptions
        На одном из сайтов глючит сниппет msProductOptions.
Через раз выводит значение опции не верно. Причем меняется при последовательном нажатии F5 в браузере. Сталкивались?
Вызов:
В чанке:
И да, такая ерунда для параметра width, тип — Числовое поле
Примеры вывода с ошибкой под катом.
Неправильный вывод (см. value):
Правильный вывод (см. value):
    
    
                                                                                
            Через раз выводит значение опции не верно. Причем меняется при последовательном нажатии F5 в браузере. Сталкивались?
Вызов:
{$_modx->runSnippet('!msProductOptions', [ 'tpl' => 'product.Options' ])}В чанке:
{$option | print}И да, такая ерунда для параметра width, тип — Числовое поле
Примеры вывода с ошибкой под катом.
Неправильный вывод (см. value):
Array
(
    [id] => 14
    [caption] => Ширина, мм
    [description] => 
    [measure_unit] => 
    [category] => 0
    [type] => numberfield
    [properties] => 
    [product_id] => 334
    [key] => width
    [value] => Array
        (
            [0] => width
            [1] => 
            [2] => default
            [3] => 
            [4] => checkbox
        )
    [category_name] => 
)Правильный вывод (см. value):
Array
(
    [id] => 14
    [caption] => Ширина, мм
    [description] => 
    [measure_unit] => 
    [category] => 0
    [type] => numberfield
    [properties] => 
    [product_id] => 334
    [key] => width
    [value] => Array
        (
            [0] => 20 мм
        )
    [category_name] => 
)    Комментарии: 7
                Здравствуйте, у меня та же ситуация, в чем же проблема?            
                    
                Хм… не очень помню, чем закончилось… кажется я переписывал сниппет msProductOptions
Я вносил потом правки в код msProductOptions (не связанные с проблемой).
Сравнивая код сейчас, вижу, что пожалуй, есть только одно изменение…
Я добавил это:
                    Я вносил потом правки в код msProductOptions (не связанные с проблемой).
Сравнивая код сейчас, вижу, что пожалуй, есть только одно изменение…
Я добавил это:
if(is_array($option['value']) && count($option['value']) == 1 && empty($option['value'][0])) {
        continue;
    }перед этой строчкой:$options[$key] = $optionLinked;была ли в этом загвоздка — даже и не знаю…            
                Не помогло, та же дичь…
Но спасибо)
                    Но спасибо)
                Привет! Может быть есть еще варианты? Так и не решить проблема, не пойму, что не так.            
                    
                Особо нечего добавить, не помню, что сделал)))
Изменения в сниппете я описал, больше там точно ничего нет…
Где еще что я делал — не помню, давно было!
                    Изменения в сниппете я описал, больше там точно ничего нет…
Где еще что я делал — не помню, давно было!
                Была проблема с выводом опций в листинге товаров. Они через раз грузились. Набросал свой сниппет:
Знаю, что html в сниппеты – не кошерно. Тогда не знал)
Можете под себя поднастроить.
                    <?php
$options = $modx->resource->getTVvalue('categoryTplOpitions');
if (!$options && $source) {
  $parent = $modx->getObject('modResource',$source);
  $options = $parent->getTVValue('categoryTplOpitions');
}
if(!$product || !$options) {
  return;
}
$result = '<ul class="category-product-main-list w-list-unstyled">';
$options_arr = explode(',',$options);
if(($key = array_search('vendor',$options_arr)) !== false){
  unset($options_arr[$key]);
  if ($data = $modx->getObject('msProductData', $product)) {
    $productObj = $data->getOne('Product');
    $vendor = $productObj->getOne('Vendor');
    if ($vendor) {
      $result .= '<li class="category-product-main-li">Производитель: <span class="category-product-mail-li-span">'.$vendor->get('name').'</span></li>';
    }
  }
}
$options_str = '"'.implode('","',$options_arr).'"';
if (implode('","',$options_arr)) {
  $query = $modx->newQuery('msProductOption');
  $query->leftJoin('msOption','msOption',array("msOption.key = msProductOption.key"));
  $query->select(array(
    'msProductOption.key as option_key',
    'msProductOption.value as value',
    'msProductOption.product_id as product_id',
    'msOption.id as option_id',
    'msOption.caption as caption',
    'msOption.description as description',
    'msOption.measure_unit as measure_unit'
  ));
  $query->where(array(
    'product_id'=>$product,
    'msProductOption.key:IN' => $options_arr,
  ));
  $query->sortby('FIELD(option_key,'.$options_str.')');
  $items = $modx->getCollection('msProductOption',$query);
  $arr=[];
  
  foreach ($items as $item) {
    $caption = $item->get('description');
    if (!$caption) {
      $caption = $item->get('caption');
    }
    if (array_key_exists ($caption , $arr )) {
      $key = $arr[$caption];
      $key .= ', '.$item->get('value');
      $arr[$caption]=$key;
    } else {
      if ($item->get('measure_unit')) {
        $arr[$caption]=$item->get('value').' '.$item->get('measure_unit');
      } else {
      $arr[$caption]=$item->get('value');
      }
    }
  }
  foreach ($arr as $key=>$value) {
    $result .= '<li class="category-product-main-li">'.$key.': <span class="category-product-mail-li-span">'.$value.'</span></li>';
  }
}
$result .='</ul>';
return $result;И в чанке товара соответственно:{$_modx->runSnippet('!productOptions',[
    'product' => $id
    'source' => $_modx->resource.categorySource
  ])}$_modx->resource.categorySource – это id категории, откуда опции подтягиваем. В этом проекте так надо было.Знаю, что html в сниппеты – не кошерно. Тогда не знал)
Можете под себя поднастроить.
                Я использовал вывод опций через pdoResources, и это сработало 
                    [[!pdoResources?
                    &tpl=`tpl.productOptions`
                    &parents=`[[*parent]]`
                    &class=`msProduct`
                    &leftJoin=`{
                        "Options": {
                            "class": "msProductOption",
                            "on": "msProduct.id = Options.product_id"
                        },
                        "captionOption": {
                            "class": "msOption",
                            "on": "Options.key = captionOption.key"
                        }
                    }`
                    &select=`{
                        "Options": "key,value",
                        "captionOption":"caption,measure_unit"
                    }`
                    &where=`["msProduct.id = [[*id]]"]`
                ]]а в чанке вывода используем переменные {$key} {$value} {$caption} {$measure_unit}            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.