Взаимосвязанные селекты с выбором серии и языка
Здравствуйте.
Очень прошу вашей помощи, уже два дня не могу разобраться и найти подобное решение через поиск. У меня на сайте стоит возможность выбора серий с помощью селекта, такого вида: <select onchange="document.getElementById('play').src=this.options[this.selectedIndex].value;"> <option value="ссылка">1 серия</option> <option value="ссылка">2 серия</option> <option value="ссылка">3 серия</option> <option value="ссылка">4 серия</option> <option value="ссылка">5 серия</option> <option value="ссылка">6 серия</option> <option value="ссылка">7 серия</option> <option value="ссылка">8 серия</option> <option value="ссылка">9 серия</option> <option value="ссылка">10 серия</option> </select> <iframe width="700" height="500" id="play" src="ссылка" frameborder="0"></iframe> Возникла необходимость сделать показ серий на английском, русском и казахском языках. Нужны что-то вроде взаимосвязанных селектов. Один селект с выбором языка, второй - с выбором серии. Если в первом селекте стоит "русский", а во втором - "20 серия", то во фрейме показывается соответственно 20 серия на русском языке. И если, допустим, посетитель смотрит 15 серию на русском, но захотел посмотреть её на казахском, то просто выбирает в первом селекте "казахский" и во фрейм загружается 15 серия на казахском. <select> <option>Русский язык</option> <option>Английский язык</option> <option>Казахский язык</option> </select> <select onchange="document.getElementById('play').src=this.options[this.selectedIndex].value;"> <option value="ссылка">1 серия</option> <option value="ссылка">2 серия</option> <option value="ссылка">3 серия</option> <option value="ссылка">4 серия</option> <option value="ссылка">5 серия</option> <option value="ссылка">6 серия</option> <option value="ссылка">7 серия</option> <option value="ссылка">8 серия</option> <option value="ссылка">9 серия</option> <option value="ссылка">10 серия</option> </select> <iframe width="700" height="500" id="play" src="ссылка" frameborder="0"></iframe> На один сезон из 20 серий есть 60 видео с серией на каждом языке. Нужная серия должна загружаться в зависимости от выставленных значений в обоих селектах. |
Ну так в чем проблема, свяжите языки с сериями в базе. Только при смене языка нужен запрос к базе для получения списка серий выбранного языка. Искать надо "связанные (зависимые) списки". И:
<select onchange="document.getElementById('play').src=this.value"> |
Спасибо большое за отклик. Снова прошёлся по поиску, теперь по "связанные (зависимые) списки". Везде скрипты с двумя-тремя списками: родительские и зависимые от них дочерние списки. Вроде "страна - область - город". Т. е. обязательно нужно выбирать с первого, чтобы в следующий селект подгрузился список соответствующий выбору в первом.
Мне же нужно чтобы человек уже выбрав и смотря во втором списке определенную серию, захотел сменить её язык и сменил выбором в первом селекте (второй же уже выбран). Чего не сделаешь в предлагаемых везде решениях - нельзя выбрав город, менять страну. А можете уточнить как это связать в базе? Я не силён в этом. Думал что можно также сделать, ссылки на видео вписать в этом же коде страницы, как у меня было до этого. Или может можно как нибудь в txt файл в этом же каталоге сохранить данные, чтобы не залазить в базу данных? |
Цитата:
То есть, если ваш проигрыватель не позволяет сделать этого, то выбор в языка означает запрос фильма выбранного на текущий момент во втором списке. Если делается выбор в списке фильмов, то языком будет тот, что выбран на текущий момент в первом списке. Либо, чтобы не делать ошибочного выбора, смена источника проигрывателя происходит не по выборе в каком либо из двух списков (событие onchange списка только подготавливает запрос для проигрывателя), а отдельной кнопкой. Запросом будут два параметра один определяет фильм, второй язык. Вот по этим параметрам и будет делаться выборка по базе. Связывают же обычно по идентификатору, что упрощает организацию данных и их связи. То есть в опциях должно быть не value="ссылка", а ID определяющее значение параметра запроса - для списка языка это идентификатор языка, для списка фильмов идентификатор фильма в базе. Результатом будет url?lang=value&film=value. |
Спасибо за совет. Пойду учить sql. А то я вроде понял как это работает, а вот как сделать не знаю.
|
Учить конечно нужно, а вот как сделать, это вопрос. Почему была дано поискать "зависимые списки", потому, что вы не DVD контент отдаете пользователю, в котором можно выбрать одну из N звуковых дорожек. Это означает, что один язык - один файл. Из этого следует, что выбор в списке языка означает запрос списка файлов на соответствующем языке.
В этом случае файлы хранятся в базе под полями: уникальный идентификатор файла, идентификатор языка как emun значения "Русский язык", "Английский язык", "Казахский язык" (хотя выбор как текст, во внутреннем представлении SQL будет оперировать с числами от 1 до 3), имя файла, название фильма, описание фильма, и т.п. Если речь идет о сериях, то это уже будут связанные таблицы, так как не выгодно дублирование данных в базе - название, описание и прочее. То есть имена файлов будет описывать не эта таблица, а связанная с ней по идентификатору фильма другая таблица, в которой будут имена файлов и принадлежность к серии, по номерам которой можно сортировать выборку. Список выбора языка будет выглядеть как: <select> <option value="1">Русский язык</option> <option value="2">Английский язык</option> <option value="3">Казахский язык</option> </select> и по умолчанию выбран русский. По умолчанию выводится список и фильмов на русском языке, то есть выборка для этого списка производиться по условию "идентификатор языка = 1". <select> <option value="13">Название фильма</option> <option value="25">Название фильма</option> <option value="37">Название фильма</option> </select> Если пользователь выбирает другой язык, то происходит запрос в базу и выбираются фильмы по выбранному идентификатору. Возвращается новый список фильмов. Когда запрашивается сам фильм, то запрос в базу, это получить имя файла фильма по условию, что язык равен выбранному id из списка языков и ID фильма соответственно выбранному из списка фильмов. Все файлы фильмов при этом хранятся в одной папке, хотя для производительности желательно ее разбить на папки соответствующие например тематике - драма, приключения, и т.д. База в этом случае должна хранить и путь к фильму, или же удобнее его описывать серверным языком как значения массива, ключами которого будет ID жанра фильма из базы. В этом случае правка пути не потребует изменений данных в базе. Можно конечно использовать и одно имя для трех языков "Мне же нужно чтобы человек уже выбрав и смотря во втором списке определенную серию, захотел сменить её язык и сменил выбором в первом селекте (второй же уже выбран).", в этом случае одноименные файлы должны быть расположены в трех каталогах, каждый для своего языка. Принадлежность фильма к языку можно даже и не описывать в базе, но при кажущейся простоте такого решения у него есть один существенный недостаток, который сводит на нет эту простоту - использование пользователем поиска/фильтра по каталогу фильмов означает для сервера "ковыряться не только в базе, но еще и плюс в файловой системе", а последнее может стать со временем слишком накладной операцией. |
Часовой пояс GMT +3, время: 11:30. |