我有第三方组件使用joomla的分页系统。如何更改每页默认项目的值并仅限制前端的框值,而不更改后端中的任何内容?
答案 0 :(得分:7)
对于J2.5:
您可以直接更改配置名称configuration.php:
public $ list_limit ='20'; TO public $ list_limit ='4'; 例如。
- >但问题是,当你在后端保存任何参数时,你将丢失你的配置,所以你需要改变它的角度和反馈。 (所以这不是最好的解决方案)
最佳解决方案是:
/administrator/components/com_config/models/forms/application.xml
搜索字段名称=“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>
答案 1 :(得分:3)
查看Joomla分页的文档:
http://docs.joomla.org/Using_JPagination_in_your_component
你需要找到一个看起来像的样本:
$limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int');
它可以被称为$ lim,$ limit或开发人员认为合适的任何其他内容。它通常在模型中找到,但它可以在视图中。您需要将此变量更改为:
$limit = 20;
其中20是您要设置的限制值。
答案 2 :(得分:1)
这补充了海员的回答,我认为这是正确答案。
我将编写一个示例,说明如何限制我想在搜索结果页面中显示的页数:
从模板文件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;
RENDERS:
答案 3 :(得分:1)
在我们的几个组件中,我们创建了一个分页扩展来覆盖默认选项,这些选项是硬编码的,否则无法覆盖。
class myCompPagination extends JPagination {
public function getLimitBox() {
.. Your Custom Renderer ..
}
}
基类可以在Joomla 2.5及更高版本的/ libraries / cms / pagination下找到。
包含您的自定义类,并像使用其他方式一样使用它。 $ pagination = new wbCompPagination(...);
答案 4 :(得分:0)
此解决方案不需要更改核心或模板文件。如果您可以控制组件代码,则直接在模型中使用以下代码:
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);
验证,但在从数据库中提取记录之前不会进行限制更改。因此,数据库仍将提供有限的列表。这就是为什么你必须破解模型本身并在查询数据库之前将模型中应用程序的全局列表限制的调用短路。
可能有更周到的方法来做到这一点。有人知道在呈现页面时以及在查询数据库表之前动态更改全局值的方法吗?我认为这样的东西会更安全,可重复使用,而且更通用。
答案 5 :(得分:-1)
在某些joomla更新可能更改后,请注意文件权限,并且修改无法应用于该版本!