Случилось так, что потребовалось сделать простенький плеер без подклюения сервисов вроде SoundCloud. Для решения задачи нам потрубуется:
-
MIGX чтобы пдминистрировать список песен
Если вы не в курсе что такое MIGX, и пользуетесь MODX, то вам сюда
Если вы не в курсе что такое MIGX, и вы НЕ пользуетесь MODX, то можете проигнорировать часть "бэкэнда" и перейти к пункту 3. Просто загляните под спойлер пункта 2.5 и посмотрите какой HTML вам надо подготовить. - Немного javascript'a
1. Формирования плейлиста в админке с момощью MIGX
1.1 Создаем дополнительное поле:
- Имя:
migx_audio - Подпись:
Песни - Тип ввода:
migx -
Вкладки формы: Показать
[ { "caption": "Заголовок", "fields": [ { "field": "file", "caption": "Файл", "inputTVtype": "file" }, { "field": "name", "caption": "Название", "inputTVtype": "text" }, { "field": "time", "caption": "Продолжительность (Мин:Сек)", "inputTVtype": "text" } ] } ]Скрыть -
Разметка колонок: Показать
[{ "header": "Файл", "dataIndex": "file" },{ "header": "Название", "dataIndex": "name" },{ "header": "Продолжительность (Мин:Сек)", "dataIndex": "time" }]Скрыть - Доступно для шаблонов:
Галочку, где нужно:)
1.2 Заполняем его примерно так:

2. Вывод плейлиста на сайте через getImageList
У меня была задача, чтобы при загрузке страницы первый трек уже был активен (не проигрывался, а просто был готов к воспроизведению). Из-за этого я разбил вывод плейлиста на 2 части:
- Вывод первой песни
- Вывод всех остальных песен
Уверен, есть еще много более или менее лаконичных способов это сделать. Лично я не запарился и просто разбил вывод на 2 сниппета. В первом вывел особым чанком первую песню, а во втором сниппете уже все остальные.
migx_audio_tpl_first)
Показать
migx_audio_tpl)
Показать
getImageList для вывода первой песни:
Показать
[[!getImageList?
&tvname=`migx_audio`
&tpl=`migx_audio_tpl_first`
&docid=`[[*id]]`
&limit=`1`
]]
getImageList для вывода остальных песен:
Показать
[[!getImageList?
&tvname=`migx_audio`
&tpl=`migx_audio_tpl`
&docid=`[[*id]]`
&limit=`999`
&offset=`1`
]]
ul мы получаем примрено такую верстку:
Показать
-
Игра4:42
-
Рандеву2:54
-
Танцуй вместе с нами3:37
-
Уже не вернуть3:21
3. Добавление стилей и интерактива

3.1 Стили CSS:
li.audio_item {
list-style-type: none;
margin-bottom: 0;
margin-left: 0;
padding: 20px;
background: #252525;
color: #fff;
cursor: pointer;
}
.audio_item + .audio_item{
border-top: 1px solid #444;
}
li.audio_item.active{
background: #444;
cursor: default;
}
.audio_item_name{
float: left;
}
.audio_item_time{
float: right;
}
.audio_item .clearafter{
margin-bottom: 5px;
}
.audio_item audio{
width: 100%;
}
3.2 JavaScript (Нужна библиотека jQuery)
$(".audio_item").click(function(){
var t = $(this);
t.siblings(".audio_item").removeClass("active").find("audio").remove();
if(!t.find("audio").length){
t.append("");
t.addClass("active");
}
});
Комментарии (1)
Не писать ответ