GVKun编程网logo

DedeCMS多条件筛选带删除功能

6

在本文中,我们将给您介绍关于DedeCMS多条件筛选带删除功能的详细内容,此外,我们还将为您提供关于CRM多条件筛选和分页——第16天、dedecmstag标签伪静态的修改方法_dedecms_CMS

在本文中,我们将给您介绍关于DedeCMS多条件筛选带删除功能的详细内容,此外,我们还将为您提供关于CRM 多条件筛选和分页 —— 第 16 天、dedecms tag标签伪静态的修改方法_dedecms_CMS教程、dedecms {dede:php}标签用法介绍,dedecmsdede、dedecms {dede:php}标签用法介绍,dedecmsdede_PHP教程的知识。

本文目录一览:

DedeCMS多条件筛选带删除功能

DedeCMS多条件筛选带删除功能

 

多条件筛选功能常用在图片、装修、机械设备、商城网站等,一般筛选的条件是用户较关注的项目,没必要什么条件都加入。DedeCMS多条件筛选PHP开发并不带有删除所选条件功能,PHP筛选和JS筛选原理不一样,实现起来并不复杂。

笔者做的装修企业装修效果图实现多条件筛选带删除功能分享给大家。

效果参考图

参考页面:?tid=85&zxfg=%CF%D6%B4%FA%BC%F2%D4%BC&zxmj=40-60%C6%BD%C3%D7,点击“x”符号即可删除筛选条件。

DedeCMS多条件筛选带删除功能

先参考新闻《DedeCMS多条件筛选以筛选词为标题》,download两个必要的文件,链接:

修改download后的extend.func.php文件,找到

} } } } echo $dede_addonfields; }  

在这段代码之前(switch条件case 2 的下面增加case 3)增加如下代码:

case 3: $addonfields_items = explode(",",$ctag->GetAtt('default')); for ($i=0; $i<count($addonfields_items); $i++) { $href = stripos($filterarr,$ctag->GetName() . '=' ) ? str_replace("=" . $fields_value,"=" . urlencode($addonfields_items[$i]),$filterarr) : $filterarr . '&' . $ctag->GetName() . '=' . urlencode($addonfields_items[$i] );//echo $href; $dede_addonfields .= $fields_value != urlencode($addonfields_items[$i]) ? '' : '<span>' . $addonfields_items[$i]; } $dede_addonfields .= (preg_match("/&".$ctag->GetName()."=http://www.dede58.com/is",$filterarr,$regm) ? '<a title="删除" href="' . $GLOBALS['cfg_basehost'] . str_replace("&" . $ctag->GetName() . "=" . $fields_value,"",$filterarr) . '"> x </a></span>' : ''); break;  
源码部分PHP调用

增加未筛选时不显示“筛选条件”字样,用PHP判断自定义字段不为空则显示。

<p> {dede:php} $a = $_GET['zxfg']; $b = $_GET['hx']; $c = $_GET['zxmj']; if($a != '' || $b != '' || $c != '') echo "筛选条件:"; AddFilter(7,3,'zxfg,hx,zxmj'); //“7”是自定义字段(橙色部分)所在的频道模型ID,“3”是上面修改部分,下面同理; {/dede:php} </p> <p> {dede:php} AddFilter(7,1,'zxfg,hx,zxmj'); {/dede:php} </p>  
CSS样式 .shaixuanbox{width:100%;height:auto;margin:0 auto 10px;border-bottom:1px solid #c0c0c0} .shaixuan{padding:10px;text-align:left;font-size:14px;line-height:14px} .shaixuan a{margin:0 6px;color:#000} .shaixuan a:hover{color:#32B9AB} .shaixuan .hover,.shaixuan span{padding:0 5px;color:#fff;background:#32B9AB} .tiao{position:relative;padding:0 20px 0 5px;border:1px solid #eee;border-radius:5px;margin-right:5px;} .tiao a{position:absolute;right:5px;top:0;font-size:20px;color:#ccc;line-height:31px;} .tiao a:hover{text-decoration:none;}  

本文章网址:http://www.ppssdd.com/code/14852.html。转载请保留出处,谢谢合作!

CRM 多条件筛选和分页 —— 第 16 天

CRM 多条件筛选和分页 —— 第 16 天

--- 恢复内容开始 ---

1.1  CRM 先显示要过滤的字段

前端代码如下:

 {% for condtion in admin_class.list_filters%}
     <div class="col-lg-2">
           <span>{{condtion}}</span>

 </div>

在 kind_admin.py 文件中在 Customer (admin_class) 类中已经定义 list_filters 筛选的字段值,在.html 文件中循环遍历展示过滤的字段

<div class="row">
            <form class="" method="get">
                {% for condtion in admin_class.list_filters%}
                <div class="col-lg-2">
                    <span>{{condtion}}</span>
                    {% render_filter_ele condtion admin_class filter_condtions %}
                </div>
                {% endfor %}
                <button type="SUBMIT" class="btn btn-success">检索</button>
            </form>
 </div>

 

1.2 CRM 显示过滤字段的值,利用 form 表单和 get 的方式请求

  方式:1、利用 form 表单和 get 方式请求

     2、在 app 名 kind_admin 文件下新建一个 utils.py 文件用于保存前端请求的数据放在一个变量名为 dictfilter_condtions 的 dict 类型

     3、在 view.py 文件中返回 admin_class,filter_condtions

     4、在自定义标签 tags.py 里面判断过滤的值展示,在前端传入 tags.py 里面函数的调用

  1、利用 form 表单和 get 方式请求,前端代码 table_objs.html 文件:

<div class="row">
            <form class="" method="get">
                {% for condtion in admin_class.list_filters%}
                <div class="col-lg-2">
                    <span>{{condtion}}</span>
                    {% render_filter_ele condtion admin_class filter_condtions %}
                </div>
                {% endfor %}
                <button type="SUBMIT" class="btn btn-success">检索</button>
            </form>
</div>

  2、在 app 名 kind_admin 文件下新建一个 utils.py 文件用于保存前端请求的数据放在一个 dictfilter_condtions 里面,uttils.py 文件代码

这个是请求数据的过滤
admin_class.model.objects.filter (**filter_conditions) 相当于
>>> m={"source":0}
>>> models.Customer.objects.filter(**m)
<QuerySet [<Customer: 5676567@qq.com>]> 或者

如果 dict 里面没有数据,会筛选所有的数据如下:
>>> m={}
>>> models.Customer.objects.filter(**m)
<QuerySet [<Customer: 5676567@qq.com>, <Customer: 25064568@qq.com>, <Customer: 787874859@qq.com>, <Customer: 2165
64732@qqcom>]>

 

def table_filter(request,admin_class):
    """进行条件过滤并返回过滤后的数据"""

    filter_conditions = {}
    for k,v in request.GET.items():
        if v:
            filter_conditions[k]=v
    print("filter_conditions:",filter_conditions)
    print("admin_class.model.objects.filter(**filter_conditions)",admin_class.model.objects.filter(**filter_conditions))
    return admin_class.model.objects.filter(**filter_conditions),filter_conditions

 3、在 view.py 文件中返回 admin_class,filter_condtions,view.py 代码如下:

def display_table_objs(request,app_name,table_name):

    print("-->",app_name,table_name)
    #models_module = importlib.import_module(''%s.models''%(app_name))
    #model_obj = getattr(models_module,table_name)
    admin_class = kind_admin.enabled_admins[app_name][table_name]
    #admin_class = king_admin.enabled_admins[crm][userprofile]

    #object_list = admin_class.model.objects.all()
    object_list,filter_condtions = table_filter(request,admin_class)
    paginator = Paginator(object_list, admin_class.list_per_page) # Show 25 contacts per page
    print("paginator------",paginator)
    page = request.GET.get(''page'')
    try:
        query_sets = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        query_sets = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        query_sets = paginator.page(paginator.num_pages)
    print("query_sets------------",query_sets)
    return render(request,"kindadmin/table_objs.html",{"admin_class":admin_class,
                                                        "query_sets":query_sets,
                                                        "filter_condtions":filter_condtions})

 

有部分 page 代码是分页的代码

4、在自定义标签 tags.py 里面判断过滤的值展示,在前端传入 tags.py 里面函数的调用,tags.py 文件代码:

    4.1 有判断这个这类 Customer 里面字段的属性,如是有 choices 属性,或者是 ForeignKey 属性,

    4.2 其他属性的没有判断,导致其他有值的字段没有显示数据筛选

如果请求数据的值等于循环筛选框的值那么这个就是被选中有 selected 属性,没有这无这个属性

查找类里面字段的属性信息
filed_obj = admin_class.model._meta.get_field (condtion) 相当于 

>>> m = models.Customer._meta.get_field("source")
>>> m
<filed_obj.choices.db.models.fields.SmallIntegerField: source>

类属性信息里面是否有 choices :filed_obj.choices 相当于:

>>> m.choices
((0, '' 转介绍 ''), (1, ''QQ 群 ''), (2, '' 官网 ''), (3, '' 百度推广 ''),

type(filed_obj).__name__查找属性的类型 相当于:

>>> type(m).__name__

''ForeignKey''

如果是外键的时候的用 get_choices 取值如

filed_obj.get_choices ()[1:]: 相当于
>>> m.get_choices()
[('''', ''---------''), (1, ''python'')]
前面 list [0] 是上面的标题,所以的从 list [1:] 开始切割

 

 

@register.simple_tag
def render_filter_ele(condtion,admin_class,filter_condtions):
    #后台返回筛选框里面的值
    """
    :param condtion: 需要过滤的字段名
    :param admin_class: 比如Customer
    :param filter_condtions: 前端请求数据的json
    :return:
    """
    select_ele = ''''''<selectname=''%s''><option value=''''>----</option>''''''%(condtion)
    filed_obj = admin_class.model._meta.get_field(condtion)
    #判断如果是choices类型
    if filed_obj.choices:
        selected=''''
        for choice_item in filed_obj.choices:
            print("choice", choice_item, filter_condtions.get(condtion), type(filter_condtions.get(condtion)))
            if filter_condtions.get(condtion) == str(choice_item[0]):
                selected = "selected"

            select_ele+=''''''<option value=''%s'' %s>%s</option>''''''%(choice_item[0],selected,choice_item[1])
            selected=''''
    #判断如果是属于ForeignKey类型的时候
    if type(filed_obj).__name__ == ''ForeignKey'':
        selected = ''''
        for choice_item in filed_obj.get_choices()[1:]:
            if filter_condtions.get(condtion) == str(choice_item[0]):
                selected ="selected"

            select_ele += ''''''<option value=''%s'' %s>%s</option>'''''' % (choice_item[0], selected, choice_item[1])
            selected = ''''

    select_ele+="<select/>"

    return mark_safe(select_ele)

剩下的分页明天在写吧,昨天睡觉都在想着那个分页为什么那里错了

    

 

 

 

 

 

 

  

 

dedecms tag标签伪静态的修改方法_dedecms_CMS教程

dedecms tag标签伪静态的修改方法_dedecms_CMS教程

dedecms tag标签伪静态的修改方法,需要的朋友可以参考下。 

一、dede后台开启伪静态
二、修改 /include/taglib/tag.lib.php
找到 $row[''link''] = $cfg_cmsurl."/tags.php?/".urlencode($row[''keyword''])."/";
改成 $row[''link''] = $cfg_cmsurl."/tags/".urlencode($row[''keyword'']).".html";
三、打开templets/default/taglist.htm
找到
当前位置::主页 > TAG标签 > {dede:field.title /}
修改为
当前位置::主页 > TAG标签 > {dede:field.title /}
四、httpd.ini 文件里加
RewriteRule ^(.*)/tags\.html $1/tags\.php
RewriteRule ^(.*)/tags/(.*).html $1/tags\.php\?$2
搞定啦~
新版本可以用下面的方法:
一、dede后台开启伪静态
二、修改 /include/taglib/tag.lib.php,找到:
$row[''link''] = $cfg_cmsurl."/tags.php?/".urlencode($row[''keyword''])."/";改成
$row[''link''] = $cfg_cmsurl."/tags/".urlencode($row[''keyword'']).".html";三、打开templets/default/taglist.htm,找到:
当前位置::主页 > TAG标签 > {dede:field.title /}修改为
当前位置::主页 > TAG标签 > {dede:field.title /}四、httpd.ini 文件里加
RewriteRule ^(.*)/tags\.html $1/tags.php;RewriteRule ^(.*)/tags/(.*).html $1/tags.php?/$2;
然后进入dede后台更新缓存后,就搞定了。

dedecms {dede:php}标签用法介绍,dedecmsdede

dedecms {dede:php}标签用法介绍,dedecmsdede

dedecms {dede:php}标签用法介绍,dedecmsdede

最简单的输入如

代码如下 复制代码
{dede:php}

  $numA = 1;

  $numB = 2;

  echo $numA + $numB;

立即学习“PHP免费学习笔记(深入)”;

{/dede:php}

从上面语句可以看出dede:php标签可以名符其实的让在php中一样的用法,上面语句在php写法如下

代码如下 复制代码

$numA=1;
$numB=2;
echo $numA+$numB;
?>


是不是看上去很像啊,再看一个再有if else 条件判断的

代码如下 复制代码
[field:global runphp=''yes'' name=autoindex]
$a="";
$b="
";
$c="";
if (@me > 3) @me = $c.@me.$b;
else @me = $a.@me.$b;
[/field:global]

这个在php中写法我就不写了,下面我们要看dede php标签结合起来sql标签使用。


结合SQL查询输出单条内容

代码如下 复制代码
{dede:php}
$row = $dsql->GetOne(''select id,typename from dede_arctype where id=2'');
print_r($row);
{/dede:php}
这个输出的内容是
Array
(
[id] => 2
[typename] => 问答
)

是不是很简单啊,有需要学习的朋友可以参考一下本文章哈。
from:http://www.111cn.net/wy/CMS/42052.htm

dedecms {dede:php}标签用法介绍,dedecmsdede_PHP教程

dedecms {dede:php}标签用法介绍,dedecmsdede_PHP教程

dedecms {dede:php}标签用法介绍,dedecmsdede

最简单的输入如

代码如下 复制代码
{dede:php}

  $numA = 1;

  $numB = 2;

  echo $numA + $numB;

立即学习“PHP免费学习笔记(深入)”;

{/dede:php}

从上面语句可以看出dede:php标签可以名符其实的让在php中一样的用法,上面语句在php写法如下

代码如下 复制代码

$numA=1;
$numB=2;
echo $numA+$numB;
?>


是不是看上去很像啊,再看一个再有if else 条件判断的

代码如下 复制代码
[field:global runphp=''yes'' name=autoindex]
$a="";
$b="
";
$c="";
if (@me > 3) @me = $c.@me.$b;
else @me = $a.@me.$b;
[/field:global]

这个在php中写法我就不写了,下面我们要看dede php标签结合起来sql标签使用。


结合SQL查询输出单条内容

代码如下 复制代码
{dede:php}
$row = $dsql->GetOne(''select id,typename from dede_arctype where id=2'');
print_r($row);
{/dede:php}
这个输出的内容是
Array
(
[id] => 2
[typename] => 问答
)

是不是很简单啊,有需要学习的朋友可以参考一下本文章哈。
from:http://www.111cn.net/wy/CMS/42052.htm

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/908457.htmlTechArticlededecms {dede:php}标签用法介绍,dedecmsdede 最简单的输入如 代码如下 复制代码 {dede:php} $numA = 1; $numB = 2; echo $numA + $numB; {/dede:php} 从上面语句可...

今天关于DedeCMS多条件筛选带删除功能的分享就到这里,希望大家有所收获,若想了解更多关于CRM 多条件筛选和分页 —— 第 16 天、dedecms tag标签伪静态的修改方法_dedecms_CMS教程、dedecms {dede:php}标签用法介绍,dedecmsdede、dedecms {dede:php}标签用法介绍,dedecmsdede_PHP教程等相关知识,可以在本站进行查询。

本文标签: