首页 > 解决方案 > Javascript 如何在下拉菜单中实现条件/嵌套过滤器

问题描述

我有一个类别 dropdown1 (带有 id: #blogcat),它过滤 wordpress 的博客文章,这是默认功能。

我有另一个自定义类型下拉列表(带有 id: #blogarticletype)。

要求是:

考虑博客:

Blog 4属于类别Category 1和类型abc

Blog 5 属于类别Category 1和类型xyz

这仅适用于 dd 类别

如果我从第一个下拉列表(即类别下拉列表)中选择类别 1,它会将我过滤掉 Blog4 和 Blog5 - http://example.com/index.php/blog/category1

这仅适用于文章类型 dd: http ://example.com/index.php/blog/?article_type=xyz

这里有问题。 http://example.com/index.php/blog/category1/?article_type=xyz

如果我再次xyz从第二个下拉菜单中选择(即输入下拉菜单),它应该只给我 Blog5 -

如何在Javascript中的下拉菜单中实现条件过滤器

两个过滤器分别工作,即)

如果我从第一个 dd 中选择值,它会给出正确的过滤器,并且在第二个 dd 中相同

问题是当我尝试做一个孩子或二级过滤器时

下面是代码

第一个下拉菜单

jQuery('#blogcat').on('change', function() {
    var baseurl ='<?php echo Mage::getBlockSingleton('wordpress/homepage')->getBlogHomepageUrl(); ?>'   
    var baseurl_events ='<?php echo Mage::getBaseUrl(); ?>events'   
    var category_slug = jQuery(this).val();
    if(category_slug == 'events'){
        var categories_redirect = baseurl_events;
        jQuery( location ).attr("href", baseurl_events);
    }else{
        var categories_redirect = baseurl + category_slug;  
        jQuery( location ).attr("href", categories_redirect);
    }
});

第二个下拉

jQuery('#blogarticletype').on('change', function() {
    var baseurl ='<?php echo Mage::getBlockSingleton('wordpress/homepage')->getBlogHomepageUrl(); ?>'
    var baseurl_events ='<?php echo Mage::getBaseUrl(); ?>events'
    var baseurl_glossary ='<?php echo Mage::getBaseUrl(); ?>glossary'
    var baseurl_catalogs ='<?php echo Mage::getBaseUrl(); ?>catalogs'

    var category_slug = jQuery('#blogcat').val();
    var article_slug = jQuery(this).val();
    if(article_slug == 'events'){
        var categories_redirect = baseurl_events;
        jQuery( location ).attr("href", baseurl_events);
    }
    else if(article_slug == 'glossary'){
        var categories_redirect = baseurl_glossary;
        jQuery( location ).attr("href", baseurl_glossary);
    }
    else if(article_slug == 'catalogs'){
        var categories_redirect = baseurl_catalogs;
        jQuery( location ).attr("href", baseurl_catalogs);
    }
    else if(article_slug == null || article_slug == ''){
        var categories_redirect = baseurl;
        jQuery( location ).attr("href", baseurl);
    }   
    else{           
        var redirect_url = baseurl+category_slug+'?article_type='+article_slug;
        alert(redirect_url);
        jQuery( location ).attr("href", redirect_url);
    }

});

关于我的自定义下拉过滤器如何工作的代码 - magento 代码更新如下

Fishpig\Wordpress\Block\Post\List.php

protected function _getPostCollection()
{
    //RAMD-641: Custom query to get the Article Filter types
    $artical_type = Mage::app()->getRequest()->getParam('article_type');
    if (is_null($this->_postCollection) && $this->getWrapperBlock()) {
        $this->_postCollection = $this->getWrapperBlock()->getPostCollection();

        if ($this->_postCollection) {
            if ($this->getPostType()) {
                $this->_postCollection->addPostTypeFilter($this->getPostType());
                if(!empty($artical_type)) {
                    $posttypevalue = Mage::helper('wordpress')->getPostMetaData();
                    if(!empty($posttypevalue)) {
                        $this->_postCollection = $this->_postCollection->addFieldToFilter('ID',array('in' => $posttypevalue));
                    }
                }
            }

            if ($this->getPagerBlock()) {
                $this->getPagerBlock()->setCollection($this->_postCollection);
            }
        }
    }

    return $this->_postCollection;
}

助手/Data.php

public function getPostMetaData()
{
    $artical_type = Mage::app()->getRequest()->getParam('article_type');
    try{
        if(!empty($artical_type)) {
            $resource = Mage::getSingleton('core/resource');
            $readConnection = $resource->getConnection('new_db');
            $currentUrl = Mage::helper('core/url')->getCurrentUrl();
            $url = Mage::getSingleton('core/url')->parseUrl($currentUrl);
            $query = 'SELECT b.post_id FROM wp_posts AS a, wp_postmeta AS b WHERE a.ID=b.post_id AND b.meta_key="type" AND a.post_status="publish"';
            $query .= " AND b.meta_value LIKE '%".$artical_type."%' ORDER BY a.post_date DESC";
            //var_dump($query);
            $post_ids = $readConnection->fetchAll($query);
            if(!empty($post_ids)) {
                $_post_id_array = array();
                foreach($post_ids as $post) {
                    $_post_id_array[] = $post['post_id'];
                }
                $_post_id_array = array_unique($_post_id_array);
                return $_post_id_array;
            }
        }
        return false;
    } catch (Exception $e) {
        return false;
    }
}

标签: javascriptphp

解决方案


推荐阅读