代码拉取完成,页面将自动刷新
/**
* 生成分类信息中的筛选菜单
*/
function filters($modelid)
{
$options = cache('ModelField')[$modelid];
$data = [];
foreach ($options as $_k => $_v) {
if (isset($_v['filtertype']) && $_v['filtertype']) {
$_v['options'] = parse_attr($_v['options']);
} else {
continue;
}
$data[$_v['name']] = $_v;
}
// 保存了顺序
$_sort_map = [];
foreach ($data as $name => $rs) {
$data[$name]['options'] = array_merge(array('0' => '全部'), $data[$name]['options']);
$_sort_map[$name] = array_keys($data[$name]['options']);
}
$param = paramdecode(input('condition'));
$catid = input('catid');
$conditionParam = [];
foreach ($data as $name => $rs) {
//判断是否是单选条件
$ifradio = 'checkbox' == $data[$name]['type'] ? false : true;
if ($ifradio) {
//单选选中参数
if (!empty($param[$name])) {
$conditionParam[$name]['options'][$param[$name]]['active'] = true;
$nowParam = $param;
$nowParam[$name] = '';
$conditionParam[$name]['options'][$param[$name]]['param'] = paramencode($nowParam);
unset($nowParam);
}else{
// 在没有选中的情况下,选中 全部。由于没用到多选,还没兼顾多选
$conditionParam[$name]['options']['0']['active'] = true;
$nowParam = $param;
$nowParam[$name] = '';
$conditionParam[$name]['options']['0']['param'] = paramencode($nowParam);
unset($nowParam);
}
} else {
//多选选中参数
if (!empty($param[$name])) {
$paramContent = explode('_', $param[$name]);
foreach ($paramContent as $k => $v) {
$nowParamContent = $paramContent;
unset($nowParamContent[$k]);
$nowParam = $param;
$nowParam[$name] = implode('_', $nowParamContent);
$conditionParam[$name]['options'][$v]['active'] = true;
$conditionParam[$name]['options'][$v]['param'] = paramencode($nowParam);
unset($nowParam);
unset($nowParamContent);
}
unset($paramContent);
}
}
$conditionParam[$name]['title'] = $rs['title'];
$conditionParam[$name]['name'] = $rs['name'];
//未选中 active param title url
foreach ($data[$name]['options'] as $k => $v) {
$conditionParam[$name]['options'][$k]['title'] = $v;
//未选中条件参数生成
if (!isset($conditionParam[$name]['options'][$k]['active'])) {
//未选中条件参数生成
$conditionParam[$name]['options'][$k]['active'] = 0;
if ($ifradio) {
$nowParam = $param;
$nowParam[$name] = $k;
$conditionParam[$name]['options'][$k]['param'] = paramencode($nowParam);
} else {
$nowParam = $param;
$nowParam[$name] = empty($param[$name]) ? $k : $param[$name] . '_' . $k;
$conditionParam[$name]['options'][$k]['param'] = paramencode($nowParam);
}
}
$conditionParam[$name]['options'][$k]['url'] = url('cms/index/lists', ['catid' => $catid, 'condition' => $conditionParam[$name]['options'][$k]['param']]);
// ksort($conditionParam[$name]['options']);
}
// 这里处理了一下排序的问题。先把 全部 拿出来,保证全部是在最前面的
$_item = $conditionParam[$name]['options']['0'];
unset($conditionParam[$name]['options']['0']);
$conditionParam[$name]['options'] = array_merge(array_flip($_sort_map[$name]), $conditionParam[$name]['options']);
$conditionParam[$name]['options']['0']=$_item;
}
return $conditionParam;
}
可能有的时候我们并不需要全部。我们可以判断全部的时候不显示这一项,需要的时候就直接循环出就好了
{volist name=":filters($modelid)" id="vo"}
{if $vo.title == '楼盘'}
{volist name="$vo.options" id="vs"}
{if $vs.title != '全部'}
<a target="_self" href="{$vs.url}" {if $vs.active}class="on"{/if}>{$vs.title}</a>
{/if}
{/volist}
{/if}
{/volist}
可以的 兄die
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论