Как выбрать одно или несколько значений из списка?
Приветствую.
Есть список: «один, мотор, кровать, солнце, 11, 55, привет, ёу». Думаю о том, как максимально быстро сделать выбор одного или нескольких значений из этого списка и вывести в шаблон/поле. Пока пришел только к тому, что надо создать сниппет, в нем создать список, указать нужное количество элементов выборки из списка, обработать и вернуть это дело. Такое решение работает, но а что если мне быстро надо выбрать одно или несколько значений из списка из нескольких элементов, т. е. решить ту же задачу, что я решил, но что-то более быстрое, без написания отдельного сниппета под каждую задачу со списком? На ум приходит вот что: передать в сниппет список, количество выборок и, возможно, другие параметры, но мои знания в PHP и MODX весьма поверхностны в сравнении с вами, наверно) Что посоветуете? Если подскажете решение, ссылки на решения, будет классно!
Для наглядности приведу пример:
1. Есть заголовок у статьи: «MODX — появился в [2000, 2004, 2009, 2010] году.» (тут надо выбрать одно из четырех).
2. Другой заголовок: «Завтра надо прочитать статьи о [грибах, горохе, индусах, кораблях].» (надо выбрать два из четырех).
Есть список: «один, мотор, кровать, солнце, 11, 55, привет, ёу». Думаю о том, как максимально быстро сделать выбор одного или нескольких значений из этого списка и вывести в шаблон/поле. Пока пришел только к тому, что надо создать сниппет, в нем создать список, указать нужное количество элементов выборки из списка, обработать и вернуть это дело. Такое решение работает, но а что если мне быстро надо выбрать одно или несколько значений из списка из нескольких элементов, т. е. решить ту же задачу, что я решил, но что-то более быстрое, без написания отдельного сниппета под каждую задачу со списком? На ум приходит вот что: передать в сниппет список, количество выборок и, возможно, другие параметры, но мои знания в PHP и MODX весьма поверхностны в сравнении с вами, наверно) Что посоветуете? Если подскажете решение, ссылки на решения, будет классно!
Для наглядности приведу пример:
1. Есть заголовок у статьи: «MODX — появился в [2000, 2004, 2009, 2010] году.» (тут надо выбрать одно из четырех).
2. Другой заголовок: «Завтра надо прочитать статьи о [грибах, горохе, индусах, кораблях].» (надо выбрать два из четырех).
Комментарии: 9
Где список хранится изначально? От каких условий зависит выбор варианта? Но в принципе можешь попробовать fenom+migx.
1. Я его в сниппет засунул.
2. От необходимости/желания. Особых условий нет. Примеры привел выше, вариантов выбора может быть от двух до десятков.
3. Если мне нужно сделать простой выбор между двумя вариантами, то если надо будет лезть отдельно в MIGX, то это не особо будет «доставлять».
2. От необходимости/желания. Особых условий нет. Примеры привел выше, вариантов выбора может быть от двух до десятков.
3. Если мне нужно сделать простой выбор между двумя вариантами, то если надо будет лезть отдельно в MIGX, то это не особо будет «доставлять».
Что значит в сниппет засунул? Ты чтобы добавить элемент в список редактируешь сниппет? По поводу лезть в migx, зачем? Создаёшь tv migx и выводишь его в шаблоне с помощью синтаксиса феном.
Да, именно так: список написал в сниппете и там же его редактирую.
По поводу дополнительного поле и MIGX мне малость непонятен алгоритм. Вы предлагаете добавить дополнительное поле, вписать в него в отдельно взятом ресурсе список, потом в в каком-либо месте (шаблон, другое поле ресурса) вывести сниппет, который будет принимать данные из дополнительного поля MIGX и выводить случайные записи в нужном количестве, которое будет задаваться все в том же сниппете. Если это так, то какая разница между полем MIGX и другим дополнительным полем стандартного типа? Если это так, то это вовсе не упрощает ситуацию, а лишь делает её немного другой — только вид сбоку;) Если это так, то как тогда быть если в одном ресурсе, к примеру, в пяти полях вывести выбор из нескольких или произвольного колисества списков? — Добавлять Х MIGX полей? Если же это не так, то поясните пожалуйста мысль, если можно, то чуточку подробнее.
По поводу дополнительного поле и MIGX мне малость непонятен алгоритм. Вы предлагаете добавить дополнительное поле, вписать в него в отдельно взятом ресурсе список, потом в в каком-либо месте (шаблон, другое поле ресурса) вывести сниппет, который будет принимать данные из дополнительного поля MIGX и выводить случайные записи в нужном количестве, которое будет задаваться все в том же сниппете. Если это так, то какая разница между полем MIGX и другим дополнительным полем стандартного типа? Если это так, то это вовсе не упрощает ситуацию, а лишь делает её немного другой — только вид сбоку;) Если это так, то как тогда быть если в одном ресурсе, к примеру, в пяти полях вывести выбор из нескольких или произвольного колисества списков? — Добавлять Х MIGX полей? Если же это не так, то поясните пожалуйста мысль, если можно, то чуточку подробнее.
1. В MODX есть автометки, которые подхватывают значения, которые уже были использованы на сайте.
2. Если у вас готовые списки, то у ТВ полей есть поле — Варианты значений — туда можно вписывать значения или руками или специальным сниппетом, ипользуя любой алгоритм.
2. Если у вас готовые списки, то у ТВ полей есть поле — Варианты значений — туда можно вписывать значения или руками или специальным сниппетом, ипользуя любой алгоритм.
Я не понимаю как это поможет упростить мой случай. Расскажете?
Для примера еще раз поясню, но теперь наглядно. Вот скриншот ресурса:
Выбор значений может потребоваться в любом поле и даже несколько раз с разными данными в одном ресурсе.
Для примера еще раз поясню, но теперь наглядно. Вот скриншот ресурса:
Выбор значений может потребоваться в любом поле и даже несколько раз с разными данными в одном ресурсе.
Самое простое решение через сниппет
$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`]]
Вот это, кажется, правильное для меня решение! Спасибо.
Посоветуете что можно почитать/посмотреть по этому вопросу еще?
Посоветуете что можно почитать/посмотреть по этому вопросу еще?
А что тут можно посоветовать? Наверно, учить PHP.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.