Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.09.2015, 19:20
Новичок на форуме
Отправить личное сообщение для Антоха Посмотреть профиль Найти все сообщения от Антоха
 
Регистрация: 28.09.2015
Сообщений: 3

Взаимосвязанные селекты с выбором серии и языка
Здравствуйте.
Очень прошу вашей помощи, уже два дня не могу разобраться и найти подобное решение через поиск.

У меня на сайте стоит возможность выбора серий с помощью селекта, такого вида:
<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 видео с серией на каждом языке. Нужная серия должна загружаться в зависимости от выставленных значений в обоих селектах.
Ответить с цитированием
  #2 (permalink)  
Старый 28.09.2015, 19:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну так в чем проблема, свяжите языки с сериями в базе. Только при смене языка нужен запрос к базе для получения списка серий выбранного языка. Искать надо "связанные (зависимые) списки". И:

<select onchange="document.getElementById('play').src=this.value">
Ответить с цитированием
  #3 (permalink)  
Старый 28.09.2015, 20:45
Новичок на форуме
Отправить личное сообщение для Антоха Посмотреть профиль Найти все сообщения от Антоха
 
Регистрация: 28.09.2015
Сообщений: 3

Спасибо большое за отклик. Снова прошёлся по поиску, теперь по "связанные (зависимые) списки". Везде скрипты с двумя-тремя списками: родительские и зависимые от них дочерние списки. Вроде "страна - область - город". Т. е. обязательно нужно выбирать с первого, чтобы в следующий селект подгрузился список соответствующий выбору в первом.

Мне же нужно чтобы человек уже выбрав и смотря во втором списке определенную серию, захотел сменить её язык и сменил выбором в первом селекте (второй же уже выбран). Чего не сделаешь в предлагаемых везде решениях - нельзя выбрав город, менять страну.

А можете уточнить как это связать в базе? Я не силён в этом. Думал что можно также сделать, ссылки на видео вписать в этом же коде страницы, как у меня было до этого. Или может можно как нибудь в txt файл в этом же каталоге сохранить данные, чтобы не залазить в базу данных?
Ответить с цитированием
  #4 (permalink)  
Старый 29.09.2015, 01:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Антоха
Мне же нужно чтобы человек уже выбрав и смотря во втором списке определенную серию, захотел сменить её язык и сменил выбором в первом селекте (второй же уже выбран). Чего не сделаешь в предлагаемых везде решениях - нельзя выбрав город, менять страну.
Я думал, что нужно выбирая в первом списке язык, формировать второй список. В данном случае это будут связанные списки. Если же у вас первый список определяет только язык, а выбрать его, это означает либо загрузить фильм с требуемым языком, либо выбрать в проигрывателе соответствующую звуковую дорожку, то есть такую возможность должен предоставлять проигрыватель.

То есть, если ваш проигрыватель не позволяет сделать этого, то выбор в языка означает запрос фильма выбранного на текущий момент во втором списке.
Если делается выбор в списке фильмов, то языком будет тот, что выбран на текущий момент в первом списке.

Либо, чтобы не делать ошибочного выбора, смена источника проигрывателя происходит не по выборе в каком либо из двух списков (событие onchange списка только подготавливает запрос для проигрывателя), а отдельной кнопкой.

Запросом будут два параметра один определяет фильм, второй язык. Вот по этим параметрам и будет делаться выборка по базе. Связывают же обычно по идентификатору, что упрощает организацию данных и их связи. То есть в опциях должно быть не value="ссылка", а ID определяющее значение параметра запроса - для списка языка это идентификатор языка, для списка фильмов идентификатор фильма в базе. Результатом будет url?lang=value&film=value.

Последний раз редактировалось laimas, 29.09.2015 в 01:20.
Ответить с цитированием
  #5 (permalink)  
Старый 29.09.2015, 17:36
Новичок на форуме
Отправить личное сообщение для Антоха Посмотреть профиль Найти все сообщения от Антоха
 
Регистрация: 28.09.2015
Сообщений: 3

Спасибо за совет. Пойду учить sql. А то я вроде понял как это работает, а вот как сделать не знаю.
Ответить с цитированием
  #6 (permalink)  
Старый 30.09.2015, 01:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Учить конечно нужно, а вот как сделать, это вопрос. Почему была дано поискать "зависимые списки", потому, что вы не 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 жанра фильма из базы. В этом случае правка пути не потребует изменений данных в базе.

Можно конечно использовать и одно имя для трех языков "Мне же нужно чтобы человек уже выбрав и смотря во втором списке определенную серию, захотел сменить её язык и сменил выбором в первом селекте (второй же уже выбран).", в этом случае одноименные файлы должны быть расположены в трех каталогах, каждый для своего языка. Принадлежность фильма к языку можно даже и не описывать в базе, но при кажущейся простоте такого решения у него есть один существенный недостаток, который сводит на нет эту простоту - использование пользователем поиска/фильтра по каталогу фильмов означает для сервера "ковыряться не только в базе, но еще и плюс в файловой системе", а последнее может стать со временем слишком накладной операцией.

Последний раз редактировалось laimas, 30.09.2015 в 02:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск