Как выбрать одно или несколько значений из списка?

Приветствую.
Есть список: «один, мотор, кровать, солнце, 11, 55, привет, ёу». Думаю о том, как максимально быстро сделать выбор одного или нескольких значений из этого списка и вывести в шаблон/поле. Пока пришел только к тому, что надо создать сниппет, в нем создать список, указать нужное количество элементов выборки из списка, обработать и вернуть это дело. Такое решение работает, но а что если мне быстро надо выбрать одно или несколько значений из списка из нескольких элементов, т. е. решить ту же задачу, что я решил, но что-то более быстрое, без написания отдельного сниппета под каждую задачу со списком? На ум приходит вот что: передать в сниппет список, количество выборок и, возможно, другие параметры, но мои знания в PHP и MODX весьма поверхностны в сравнении с вами, наверно) Что посоветуете? Если подскажете решение, ссылки на решения, будет классно!
Для наглядности приведу пример:
1. Есть заголовок у статьи: «MODX — появился в [2000, 2004, 2009, 2010] году.» (тут надо выбрать одно из четырех).
2. Другой заголовок: «Завтра надо прочитать статьи о [грибах, горохе, индусах, кораблях].» (надо выбрать два из четырех).
weranda
10 марта 2020, 19:59
modx.pro
970
0

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

Артур Шевченко
12 марта 2020, 00:50
0
Где список хранится изначально? От каких условий зависит выбор варианта? Но в принципе можешь попробовать fenom+migx.
    weranda
    12 марта 2020, 08:25
    0
    1. Я его в сниппет засунул.
    2. От необходимости/желания. Особых условий нет. Примеры привел выше, вариантов выбора может быть от двух до десятков.
    3. Если мне нужно сделать простой выбор между двумя вариантами, то если надо будет лезть отдельно в MIGX, то это не особо будет «доставлять».
    Артур Шевченко
    13 марта 2020, 09:56
    0
    Что значит в сниппет засунул? Ты чтобы добавить элемент в список редактируешь сниппет? По поводу лезть в migx, зачем? Создаёшь tv migx и выводишь его в шаблоне с помощью синтаксиса феном.
      weranda
      14 марта 2020, 07:32
      0
      Да, именно так: список написал в сниппете и там же его редактирую.
      По поводу дополнительного поле и MIGX мне малость непонятен алгоритм. Вы предлагаете добавить дополнительное поле, вписать в него в отдельно взятом ресурсе список, потом в в каком-либо месте (шаблон, другое поле ресурса) вывести сниппет, который будет принимать данные из дополнительного поля MIGX и выводить случайные записи в нужном количестве, которое будет задаваться все в том же сниппете. Если это так, то какая разница между полем MIGX и другим дополнительным полем стандартного типа? Если это так, то это вовсе не упрощает ситуацию, а лишь делает её немного другой — только вид сбоку;) Если это так, то как тогда быть если в одном ресурсе, к примеру, в пяти полях вывести выбор из нескольких или произвольного колисества списков? — Добавлять Х MIGX полей? Если же это не так, то поясните пожалуйста мысль, если можно, то чуточку подробнее.
      Алексей Смирнов
      14 марта 2020, 10:38
      0
      1. В MODX есть автометки, которые подхватывают значения, которые уже были использованы на сайте.
      2. Если у вас готовые списки, то у ТВ полей есть поле — Варианты значений — туда можно вписывать значения или руками или специальным сниппетом, ипользуя любой алгоритм.
        weranda
        14 марта 2020, 12:00
        0
        Я не понимаю как это поможет упростить мой случай. Расскажете?
        Для примера еще раз поясню, но теперь наглядно. Вот скриншот ресурса:

        Выбор значений может потребоваться в любом поле и даже несколько раз с разными данными в одном ресурсе.
        Сергей Шлоков
        14 марта 2020, 11:58
        2
        +1
        Самое простое решение через сниппет
        $arr = explode(',', $list);
        $arr = array_map(function($val){return trim($val);}, $arr);
        shuffle($arr);
        $output = array_intersect_key($arr, array_flip(array_rand($arr, (int) $number)));
        
        return implode(',', $output);
        И вызывать сниппет так
        [[!RandomValues? list=`один, мотор, кровать, солнце, 11, 55, привет, ёу` &number=`2`]]
          weranda
          14 марта 2020, 12:05
          0
          Вот это, кажется, правильное для меня решение! Спасибо.
          Посоветуете что можно почитать/посмотреть по этому вопросу еще?
            Сергей Шлоков
            14 марта 2020, 13:38
            +1
            А что тут можно посоветовать? Наверно, учить PHP.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          9