We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 24531
    • 213 Posts
    Quote from: AKots at Mar 04, 2008, 09:52 AM

    И ссылка своя на каждую страницу будет? В таком случае, зачем открывающийся список? Разве что как дополнительное средство навигации.

    ну соль не в ajax, а в том, что шин и дисков много и параметров у них тоже масса, и не каждый диск встанет на определенную машину. это как купить новую видеокарту и вдруг обнаружить, что она не влазит в твой корпус... =)
      • 17459
      • 268 Posts
      По поводу, что дальше - дальше написать js, который бы делал нужные вещи... Кажется, с прототипом проще... http://www.json.org/js.html Вот тут гляньте. То есть это уже к программисту по JS, кто умеет.

      ну соль не в ajax
      Или я или вы что-то не поняли, моё видение:
      есть обычное дерево.

      структуру списков можно задать деревом документов в МодХ.
      Выбрал машину, выбрал шины, выбрал диск, выбрал что там ещё...

      Сделайте структуру
      Машины
        Тойота
            Шина1
                Диск1
                Диск2
            Шина2
                Диск1
                Диск3
        Ауди
            Шина1
                Диск1
                Диск4
            Шина3
                Диск1
                Диск5
      ...

      Соответственно в первом списке будут документы из раздела Машины, во втором дети детей Машины, в третьем дети детей детей Машины. Это можно сделать через фильтр Ditto (исключив не детей 1 2 или 3 уровня для 1 2 и 3 списков соответственно).
        • 17459
        • 268 Posts
        Или можно сделать иначе:

        отдельно 3 раздела: машины, шины, диски

        далее сделать ТВ списка с множественным выбором (машин и шин)

        к шаблону дисков привязываем тв шин, к шаблону шин тв машин

        ну и настриваем, какие шины подойдут для этого диска, какие машины подойдут для этого типа шин.

        дальше, делаем сниппет, который нам генерирует JSON или XML, к нему образается JS-код, когда мы выбираем один из вариантов списка, чтобы подгрузить JSON со следующим списком. На вход идёт переменная (массив) со сделанными на сайте выбором (то есть, например, передаёт ауди или бмв) и ид списка, который хочет получить (у нас их два, шины и диски). Далее в сниппете запускается Ditto, который генерирует список, зная сделанный нами выбор и ид списка (самое простое, если он будет равен ид раздела шин и дисков). То есть в Ditto подставляется parents и в filter подставляется условие не равно тому что сниппет получил на входе (не равно потому, что Ditto это исключит из выборки, а не наоборот, как многие путают). Ну а JS скрипт прочитает JSON и сделает второй список... После выбора там варианта он запросит JSON для следующего списка.

        К JS разработчику: скрипт должен уметь получать JSON и делать на его основе меню. При выборе элемента делать запрос на следующее меню, передавая на вход php скрипта выбранное на предыдущем шаге значение и ид следующего списка.

        P.S. Ну и не забыть сопоставить ид списка с названием ТВ, а то фильтр всегда будет одно и то же ТВ использовать...

        Вообщем, второй вариант сложнее, но проще для заполнения, дублирования не будет...
          • 785
          • 2,113 Posts
          Quote from: Lord at Mar 04, 2008, 03:11 PM

          По поводу, что дальше - дальше написать js, который бы делал нужные вещи...
          Какие вещи? Вы, как мне кажется, совсем не представляете, как работает асинхронное взаимодействие с сервером, и какие при этом стоят задачи.
          1. На первом этапе нужно сформировать список Select – как его сформировать на основе Ditto? В принципе это можно сделать, но нужно ли палить из пушки по воробьям?
          2. После выбора в первом списке конкретного значения на сервер отправляется запрос, в котором передается это значение. Как отловить на сервере запрос? Подскажу – за это отвечает программа в файле index-ajax.php, и при этом среда MODx не запускается, так что никаких Ditto там и близко нет.
          3. Программа должна сформировать ответ со списком значений второго Select, при этом среда MODx не загружена. Как это сделать с помощью Ditto?

          Проще всего ответ формировать прямо в HTML, тогда достаточно будет программы на PHP, а в JavaScript практически ничего делать не надо (только подставить полученный код). Более универсальное решение – передавать в каком-нибудь стандартном формате, а на стороне клиента раскодировать. То есть в программе на PHP создать фрагмент формата XML или JSON, а в программе на JavaScript преобразовать его в HTML. Но это предполагает дополнительное программирование, без которого вполне можно обойтись. Еще раз подчеркну, что формировать список нужных вариантов в формате, например, JSON придется самостоятельно, так как среда MODx при асинхронном запросе не запускается.

          Ditto позволяет сформировать статический документ в формате JSON, который в принципе можно получать и обрабатывать, но как это можно использовать в описанной задаче – непонятно.

          Quote from: Lord at Mar 04, 2008, 03:35 PM

          дальше, делаем сниппет, который нам генерирует JSON или XML, к нему образается JS-код, когда мы выбираем один из вариантов списка, чтобы подгрузить JSON со следующим списком.
          Очень интересно, как JavaScript может обращаться к сниппету. Есть два варианта – идет обычный запрос на сервер и загружается новый документ (в котором есть вызов сниппета) или идет асинхронный запрос и передается только нужная информация. Во втором случае вообще никаких сниппетов нет.
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации