как динамически изменять кол-во выводимых нод на странице?

Главные вкладки

Аватар пользователя oOLokiOo oOLokiOo 29 октября 2012 в 18:31

Доброго времени суток.
Есть вьюха которая выводить определённый тип контента. Пагинация по умолчанию настроена на 20 нод на странице.
По мимо постраничной навигации, есть ещё дропдаун с количеством выводимых элементов на странице. Не подскажите, как реализовать его функционал? Что-то в интернетах не могу ничего найти на столь тривиальную задачку...

Комментарии

Аватар пользователя oOLokiOo oOLokiOo 30 октября 2012 в 12:51

Короче, выкрутился как-то так.
Без аякса.

Нагуглил про hook_views_pre_build():

<?php
function qph_common_views_pre_build(&$view) {
  
// Make sure this is only for the specific view you want to modified
  
if ($view->name == "my_view_name" && isset($_GET['per_page'])) {
    
$view->set_items_per_page(intval($_GET['per_page']));
  }
}
?>

Далее, преобразовал свой дропдаун вот так:

<select onchange="insertParamToUrl('per_page', jQuery(this).val());">
 <option <?php if(isset($_GET['per_page']) && $_GET['per_page'] == 20) echo 'selected="selected"'; ?> >20</option>
 <option <?php if(isset($_GET['per_page']) && $_GET['per_page'] == 10) echo 'selected="selected"'; ?> >10</option>
 <option <?php if(isset($_GET['per_page']) && $_GET['per_page'] == 5) echo 'selected="selected"'; ?> >5</option>
</select>

Ну и собственно, JS функция для вставки параметра в URL:

function insertParamToUrl(key, value)
{
    var kvp = document.location.search.substr(1).split('&');
    var i=kvp.length; var x;

    while(i--)
    {
        x = kvp[i].split('=');

        if (x[0]==key)
        {
            x[1] = value;
            kvp[i] = x.join('=');
            break;
        }
    }

    if(i<0) {kvp[kvp.length] = [key,value].join('=');}

    //this will reload the page, it's likely better to store this until finished
    document.location.search = kvp.join('&');
}

Как-то так Smile
Берите, пользуйтесь на здоровье)