------------------------
При просмотре канала
/channels/имя_канала
показываются все ролики этого канала
сверху есть встроенная штатная менюшка:
в которой можно выбрать просмотр списка плейлистов этого канала.
Плейлисты можно только отсортировать. Если плейлистов немного — то этого, в целом, хватает.
А вот если плейлистов несколько сотен, и они будут прибывать (как в моем случае), то необходим поиск хотя бы по названию плейлиста.
Встроенный поиск в движке iCMS не ищет в названиях плейлистов. Да, и, в случае глобального поиска могут вылезти тысячи роликов — пойди, сыщи между ними плейлист.
Итак, шаблон, ответственный за вывод именно списка плейлистов находится здесь:
templates/default/controllers/channels/playlists.tpl.php
для начала придется добавить элементы интерфейса — поле ввода и кнопочку:
ищем (примерно 31 строка) код вида:
<div class="filter-panel gui-panel channel_sorting_panel"> <div class="field"> <div class="title"><?php echo LANG_SORTING; ?></div> <div class="control sort"> <?php echo html_select('sort', $sortings, $sort); ?> </div> </div> </div>
<div class="filter-panel gui-panel channel_sorting_panel"> <div class="field"> <div class="title"><?php echo LANG_SORTING; ?></div> <div class="control sort"> <?php echo html_select('sort', $sortings, $sort); ?> </div> </div> <?php if($user->is_admin){?> <div class="field" style="margin-left:10px"> <div class="title">поиск</div> <div class="control search"> <input type="text" value=""><button class="search">поиск</button> </div> </div> <?php } ?> </div>
<?php if($user->is_admin){?>
<?php if($user->is_logged){?>
С простейшим интерфейсом закончили, должна появиться вот такая формочка при просмотре страницы:
далее, сразу после этого кода вставляем этот кусок:
<?php $search_string = ''; ?>
далее, вставляем JS для отработки интерфейса (также, сразу после кода выше):
<script type="text/javascript"> $(function(){ $('div.control.search input[type=text]').keypress(function(e) { if(e.which == 13) { $(this).blur(); $('div.control.search button.search').focus().click(); } }); $('div.control.search button.search').on('click', function(){ window.location.href = '?search=' + $('div.control.search input[type=text]').val(); }); }); </script>
По клику перезагружает всю страницу с параметром search=чего_ищем.
С обработкой интерфейса закончили, теперь перейдем к фильтрации плейлистов.
Чуть ниже по оригинальному коду идет строка:
<div class="playlists_list"> <?php if($playlists) { ?>
Но этот плейлист содержит только часть от всех (вывод постраничный). А значит, придется все плейлисты (этого канала, или вообще все, как в моем случае) выдергивать заново.
( движок ранее плейлисты записал в переменную $playlists (она глобальная) в одном из классов, там же отсортировал и обрезал "пагинатором" по переменным $page, $perpage и $total )
Формируем свой $playlists
Для этого сразу после вышуеказанного оригинального кода вставляем свой:
<?php. $playlists = cmsCore::getModel('video')->getPlaylists(); }); $perpage = $total; $page = 1; } ?>
В данном случае, я беру вообще все плейлисты
cmsCore::getModel('video')->getPlaylists()
Далее, по коду: оставляем в массиве только те элементы, которые содержат в ['title'] необходимое слово (в $search_string).
для пагинатора меняем $total,$ perpage и $page — пусть все найденные выводятся валом в одну страницу — их в общем случае не будет много. Короче, пагинатор таким образом выключаем :)
Если $search_string пустой, то $playlists остается оригинальным (каким его построил движок), и все будет как обычно.
Это все.
В данном примере я не рассматривал фильтрацию по номеру канала, не рассматривал проблему исключения остальных параметров GET при поиске, не рассматривал CSS стили для интерфейса кнопок и поля.
Самого движка я не знаю, лишь примерно представляю как он работает. Доку еще толком не читал, занимаюсь iCMS совсем недавно.
P.S. перед изменением шаблона, скопируйте его оригинал.