Joomla 2.5自定义组件:过滤条目

时间:2013-10-11 00:08:34

标签: joomla joomla2.5 joomla-component

在自定义组件中,在网站视图中,我会显示一个国家/地区列表,每个国家/地区都显示另一个页面的链接,显示居住在该国家/地区的人员。

这是一个链接:

index.php?option=com_example&view=persons&country=1&Itemid=131

缺少什么:
打开人员页面时,会列出所有人员。

我在寻找什么:
我只想在链接中显示国家/地区的人,1在上面的示例中。

我尝试在model-files的{​​{1}}中添加此条件,但失败了。

+++ 编辑 ++++

感谢接受的答案,我能够完成我所需要的。不幸的是,这似乎会产生副作用:

persons

抛出该错误的代码是

Fatal error: Call to a member function getPagesCounter() on a non-object 
in .../view/persons/tmpl/default.php` (...)

在评论该行时,此代码会出现相同的错误:

<?php echo $this->pagination->getPagesCounter(); ?>

这是怎么发生的,我该怎么办?试图追查这个问题,但不知道从哪里开始。

+++ 编辑 +++

还没能解决这个问题。做了<?php echo $this->pagination->getPagesLinks(); ?> ,这是输出:

var_dump($this->pagination);

所以对象确实存在,不是吗?

1 个答案:

答案 0 :(得分:1)

您正在密切编辑模型文件。 在你的Persons模型(ExampleModelPersons)中,你需要确保你有以下元素:

将过滤器名称列入白名单:

<?php
public function __construct($config = array())
    {
        if (empty($config['filter_fields'])) {
            $config['filter_fields'] = array(
                'country',
                // other not standard filters
            );
        }
        parent::__construct($config);
    }
?>

自动填充状态过滤器:

<?php
protected function populateState($ordering = null, $direction = null)
{

    $country = $this->getUserStateFromRequest($this->context.'.filter.country', 'country', '',  null, false);
    $this->setState('filter.country', (int) $country);
        // ....Other states
{
?>

上下文的商店ID:

<?php
protected function getStoreId($id = '')
{
    $id .= ':'.$this->getState('filter.country');
    // Other states
}
?>

最重要的一个是数据库查询

<?php
protected function getListQuery()
{
    // ... Other parts of the querty
    if ($country = $this->getState('filter.country'))
        $query->where("country = ". (int) $country);
}
?>

如果您不需要在用户会话中保存状态,则可以在数据库查询中轻松将其删除为两个班轮。

<?php
    // ... Other parts of the querty
    if ($country = $app->input->getInt('country'))
        $query->where("country = ". (int) $country);
?>