magento -- 按某个属性排序上的一个尝试

简介:

Magento的属性可以用来放在产品列表页给产品进行排序,要用来排序的属性只需要在后台属性管理的地方选择应用于排序,默认情况下是name和price这两个属性可以在前台用来排序(Position是例外)。

那么现在有个简单的尝试,就是新增一个属性,只允许填写数字,然后前台的产品可以按照数字的大小来对产品进行排序。看起来很合理的需求,尝试起来却遇到了麻烦。

首先要决定这个属性的输入类型,magento允许的输入类型如下图所示,看上去既能手动输入又能限制输数字的就只能是文本框了。

所以先尝试了用文本框输入类型,然后限制只能输入整数,如下图

    

新增这个属性后,选择将这个属性应用于列表页的排序,然后给几个产品的这个属性分别赋不同的值(数字),现在前台就可以尝试用这个属性来排序了。

      

问题来了,当我按序号降序排列时,序号为96的产品确实排在序号为97的产品的后面,但却同时发现原本应该排在最前面的序号为198的产品却排在了后面,甚至序号为20的产品都在它的前面,这是怎么回事?

检查数据库后发现,凡是文本框类型的属性,在数据库中保存的都是varchar类型的数据,限制输入整数也只是在填写该属性时多了一层整数的验证,也就是说前台用这个属性进行排序时,实际上是一些字符串进行对比之后在排序,字符串排序会优先检查首字母,这也就是为什么降序时序号为20的产品会排在序号为198的产品的前面。

那么Magento就没有办法用某个属性的数值大小来对产品进行排序了吗?也不尽然,检查数据库的时候会发现价格属性在数据库里是按数字类型保存的(这个好像是理所当然的),前台自带的按价格排序也验证了价格类型的属性排序是确实是按数字的大小来排的,而不是比较字符串。

所以现在尝试新增一个属性,输入类型选择价格型,应用于前台排序,用来管理商品时填写某种需要用到的数字(虽然是价格型属性,但不是拿来填价格的)。同预料的一样,这样前台按这个新属性排序是就是完全按数字的大小来排了。

不知道以这种方式来实现需求是不是最合理的方式,对Magento来说,至少我自己先这么用着了。

 

目录
相关文章
|
6月前
|
前端开发
Antd中Table列表行默认包含修改及删除功能的封装
Antd中Table列表行默认包含修改及删除功能的封装
161 0
|
前端开发 JavaScript
Bootstrap Table根据参数搜索功能
Bootstrap Table根据参数搜索功能
95 0
ant Table表格的一些常用的小功能以及常见的报错解决方法
ant Table表格的一些常用的小功能以及常见的报错解决方法
101 0
|
测试技术 数据库管理 关系型数据库
PMS 修改禅道默认首页元素及展示
PMS 修改禅道默认首页元素及展示
461 0
|
JavaScript Java
DataTables单纯的分页 不排序 没有默认搜索
憋了好几天看了中文和英文的文档,终于把分页搞出来了,先前一直纠结这个页码和页容量怎么传的,其实不用纠结这个,会自动识别。
257 0
|
PHP
PHP使用foreach修改数组里边的值方案
PHP使用foreach修改数组里边的值方案
108 0
dedecms如何增加自定义字段
  开源的cms比较好的一点是可以根据自己的需求来开发相应的功能,比如dedecms想要增加一个专家职称字段调用要怎么调用呢?   增加自定义字段:后台找到 “核心” - 频道模型 - 内容模型管理 - 字段管理 - 添加新字段,如下图所示   字段添加好了,怎样把这些字段内容调用出来呢? ...
978 0
|
PHP 移动开发
织梦自定义表单如何取出一个字段的值,并形成option
最近在使用织梦做站的时候,客户用了自定义表单的情况下 其中有一个字段是一个下拉菜单,织梦原带的样式基本不能满足要示,所以自己做了样式,那么怎么才能做到,用户修改了下拉框的值,前台及时做出改变呢, 看了一下代码,发现了大体上流程是这样的 post_diyform.htm中有这样的代码,表示$postform是生成的代码 <?phpecho $postform; ?>
1310 0