基于字段的 Joomla AdsManager 过滤器列表

Posted

技术标签:

【中文标题】基于字段的 Joomla AdsManager 过滤器列表【英文标题】:Joomla AdsManager filter list on field based 【发布时间】:2016-09-17 09:11:38 【问题描述】:

我正在为一个基于网站的 sj 实时模板 adsmanger 组件工作。我需要在列表视图中添加一个过滤器来过滤字段 ad_location。我已经编写代码为所有位置创建下拉列表,每个选项值如下所示

<?php echo TRoute::_("index.php?option=com_adsmanager&view=list&catid=".$this->catid."&ad_location=".$fields->fieldvalueid); ?>

但是当我选择一个选项时,网址变成这样

index.php/ads-manager/6-verktyg-foer-fordon?ad_location=58

index.php/ads-manager/6-verktyg-foer-fordon?ad_location=paris

但页面重新加载时的结果与以前相同。 我选择了“广告可以按此字段排序吗?”对于位置字段是。

请指导我如何实现这一点,以便可以根据位置过滤特定类别。

提前致谢。

【问题讨论】:

这发生在您的 sef url 启用时。通过禁用 sef 选项进行检查。如果这样可行,那么您可能需要修改 adsmanager 组件的 router.php 文件。 问题不是 SEF 网址。我想要列表视图上的位置下拉菜单应该像订单过滤器一样工作 【参考方案1】:

以下解决方案不完全匹配,但您可以尝试使用逻辑。 您可以创建自定义函数,表单提交每个选项选择的值以获取名称的值,结果在sql中

  Class AdsLocation 

        public static function ListLocations($selected = -1) 
            $options[] = Jhtml::_('select.option', '-1', JText::_('Filter Locations') );
            $options[] = JHTML::_('select.option', 'USA', JText::_('USA') );
            .
            .
            .
            $uri = JFactory::getURI();
            $uri->delVar('limitstart');
            $uri->delVar('start'); 

            $attr  = 'onchange="this.form.action=\''.$uri.'\';';
            $attr .= ' this.form.submit();"';
            $attr .= " class='select'";
            return JHTML::_('select.genericlist', $options, 'filter_location', $attr, 'value', 'text', $selected);  
    

你可以使用函数名的类名选择id,name

例如:加载页面:echo AdsLocation::ListLocations('USA');

获取值 JRequest::getVar('filter_location');

【讨论】:

感谢您的努力。我应该在哪里同时使用前:加载页面:echo AdsLocation::ListLocations('USA');获取值 JRequest::getVar('filter_location');这将是很大的帮助。 哪些视图(列表/网格)使用此代码,回显 AdsLocation::ListLocations('USA');模型 GetItems sql 查询 -- JRequest::getVar('filter_location'); if(JRequest::getVar('filter_location') > -1) 它只会出现在我已经添加的下拉位置字段中。我需要更改列表控制器,以便它接受位置过滤器来更改列表视图的结果。 是的。那是正确的..您按控制器文件中的位置过滤。【参考方案2】:

Adsmanager 列表视图对除日期之外的过滤器没有排序。因此需要使用结果视图,因此选项值应该是这样的

`<?php echo TRoute::_("index.php?option=com_adsmanager&view=result&new_search=1&catid=".$this->catid."&ad_location=".$fields->fieldvalueid); ?>`

还有一个我错过了使用正确的字段 id 值应该是 fieldvalue 而不是 fieldvalueid 所以选项值应该是这样的

<?php echo TRoute::_("index.php?option=com_adsmanager&view=result&new_search=1&catid=".$this->catid."&ad_location=".$fields->fieldvalueid); ?>

位置字段的完整代码将是这样的

<select onchange="jumpmenu('parent',this)">         
        <option value="<?php echo TRoute::_("index.php?option=com_adsmanager&view=result&new_search=1&catid=".$this->catid); ?>">Please Select a Location</option>
        <?php 
        $ad_location = JRequest::getVar('ad_location');
        $fieldmodel     = $this->getModel("field");
        $field_values = $fieldmodel->getFieldValues();
        foreach($field_values[17] as $fields) //print_r($fields); ?>
        <option value="<?php echo TRoute::_("index.php?option=com_adsmanager&view=result&new_search=1&catid=".$this->catid."&ad_location=".$fields->fieldvalue); ?>" <?php if ($fields->fieldvalue == $ad_location) echo 'selected="selected"'; ?> ><?php echo $fields->fieldtitle; ?></option>
        <?php ?>
        </select>

【讨论】:

以上是关于基于字段的 Joomla AdsManager 过滤器列表的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句为joomla文章数据库基于另一个字段创建一个字段

将选项卡和字段添加到自定义 joomla 组件

在joomla中通过JTable手动设置表格行的id

Joomla 2.5 组件实现

没有插件的Joomla自定义类型/自定义字段?

Joomla! K2 - K2 类别的额外字段