Joomla Pagination List Limit value - PullRequest
       18

Joomla Pagination List Limit value

5 голосов
/ 27 марта 2012

У меня есть сторонний компонент, который использует систему нумерации страниц Joomla.Как я могу изменить значения элементов по умолчанию на странице и ограничить значения полей только для внешнего интерфейса, не меняя ничего в фоновом режиме?

Ответы [ 6 ]

7 голосов
/ 03 мая 2013

Для J2.5:

Вы можете напрямую изменить значение из файла configuration.php:

public $ list_limit = '20'; TO public$ list_limit = '4'; , например.

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

Лучшее решение - перейти по адресу:

/ administrator / components / com_config / models / forms / application.xml

Поискдля поля name = "list_limit"

вы найдете конфигурацию по умолчанию joomla!в строке 661:

<field
            name="list_limit"
            type="list"
            default="20"
            label="COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_LABEL"
            description="COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_DESC"
            filter="integer">
            <option
                value="5">J5</option>
            <option
                value="10">J10</option>
            <option
                value="15">J15</option>
            <option
                value="20">J20</option>
            <option
                value="25">J25</option>
            <option
                value="30">J30</option>
            <option
                value="50">J50</option>
            <option
                value="100">J100</option>
        </field>

ДОБАВИТЬ такую ​​опцию, как:

<option value="3">J3</option>

она становится:

<field
            name="list_limit"
            type="list"
            default="20"
            label="COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_LABEL"
            description="COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_DESC"
            filter="integer">
            <option
                value="3">J3</option>
            <option
                value="5">J5</option>
            <option
                value="10">J10</option>
            <option
                value="15">J15</option>
            <option
                value="20">J20</option>
            <option
                value="25">J25</option>
            <option
                value="30">J30</option>
            <option
                value="50">J50</option>
            <option
                value="100">J100</option>
        </field>
3 голосов
/ 27 марта 2012

Посмотрите документы для пагинации Joomla:

http://docs.joomla.org/Using_JPagination_in_your_component

Вам нужно будет найти vaiable, который выглядит как:

$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');

Это можно назвать $ lim, $ limit или что-то еще, что разработчик считает подходящим. Обычно он встречается в модели, но может быть и в виде. Вам нужно изменить эту переменную на что-то вроде:

$limit = 20;

Где 20 - значение лимита, который вы хотите установить.

1 голос
/ 07 марта 2014

В некоторых наших компонентах мы создали расширение для разбиения на страницы для переопределения параметров по умолчанию, которые жестко запрограммированы и не могут быть перезаписаны в противном случае.

class myCompPagination extends JPagination {

  public function getLimitBox() {
     .. Your Custom Renderer ..
  }

}

Базовый класс находится в каталоге / library / cms /нумерация страниц в Joomla 2.5 и выше.

Включите ваш пользовательский класс и используйте его так же, как и вы.$ pagination = new wbCompPagination (...);

1 голос
/ 13 декабря 2013

Это дополняет ответ моряка, который, на мой взгляд, является правильным ответом.

Я приведу пример того, как я ограничил количество страниц, которые я хотел отображать на странице результатов поиска:

Из файла шаблона root / templates / mytemplate / html / com_search / search / default.php

// number of max pages you want in pagination
$mylimit = 3; 

// to prevent showing pages with no resutls
$limit = min($mylimit, $this->pagination->pagesTotal);

// set the limit
$this->pagination->pagesStop = $limit;

ОКАЗЫВАЕТ:

enter image description here

0 голосов
/ 15 мая 2016

Это решение не требует изменения файлов ядра или шаблонов.Если у вас есть контроль над кодом компонента, используйте следующий код непосредственно в вашей модели:

protected function populateState($ordering = null, $direction = null)
{
// Initialise variables.
$app = JFactory::getApplication();

// List state information
$limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->get('list_limit'));

Измените строку:

$limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->get('list_limit'));

на эту

$limit = 50;

или любое другое число, которое вы хотите.

Если вы попытаетесь установить для свойства пагинации объекта JPagination в представлении что-то еще, как было предложено в ответе @IberoMedia, то JPaginationСвойства будут изменены, как проверяется с помощью echo var_dump($this->pagination);, но изменения в пределах не будут внесены до того, как записи будут извлечены из базы данных.Поэтому база данных по-прежнему будет предоставлять ограниченный список.Вот почему вам нужно взломать саму модель и замкнуть вызов ограничения глобального списка для приложения в модели, прежде чем запрашивать базу данных.

Вероятно, есть более продуманный способ сделать это.Кто-нибудь знает способ изменить глобальное значение на лету при визуализации страницы и до запроса таблицы базы данных?Я должен думать, что такая вещь будет более безопасной, многоразовой и более универсальной.

0 голосов
/ 28 июля 2014

Обратите внимание на разрешение файла после того, как может измениться обновление Joomla, и модификация не может быть применена к версии!

...