Вызвать опцию товара в сниппете

Как получить одну опцию по ключу товара внутри шаблона через сниппет?

Из того что нашёл на просторах этого форума получилось так, но результат никакой
<?php
$product = $modx->getObject('msProduct', $modx->resource->get("id"));
$options = $product->getMany('options');
foreach($options as $option){
    if($option['key'] == 'type_food'){
        print_r($option['value']);
    }
}
Александр
20 октября 2022, 17:56
modx.pro
490
0

Комментарии: 2

Александр
20 октября 2022, 18:31
+1
Решение для условия нашёл такое
{if $_modx->resource.type_toy.0 == "Кукла"}
    Кукла
{else}
    Машина
{/if}
Забавно что за кучу лет ни одного решения нет ни на форуме, ни вообще в интернете для подобной задачи. Даже сниппета готового никто не написал. Надеюсь когда-то пригодится таким как я бедолагам.
    Николай Савин
    20 октября 2022, 18:39
    +3
    Очень плохой код.
    Вот эта строка не нужна
    $product = $modx->getObject('msProduct', $modx->resource->get("id"));
    $modx->resource это и есть $product;

    Вот тут ошибка
    $options = $product->getMany('options');
    Если используете getMany и getOne — там всегда будет слово с большой буквы. Потому и не срабатывает код, что вызов неверный.

    Сниппет должен возвращать значение, а не вызывать его. Никаких echo, print_r, и var_dump
    Ну и желательно использовать строгое сравнение.

    Итого корректный код будет таким

    <?php
    
    $options = $modx->resource->getMany('Options');
    foreach ($options as $option) {
        if ($option->get('key') === 'type_food') {
            return $option->get('value');
        }
    }
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2