[TOC]
要实现的功能
用表单里的提交过来的sort数据,批量修改表里的排序值 界面效果:
思路:
视图层表单提交数据主键=>sort值
控制器调用扩展类里的 public function cateSort($data, $obj) 方法 //处理栏目排序 $data数组,$obj是实例化的表的对象
cateSort验证数据并修改表里sort的值,如果提交的不是大于0的整数,就报错.
视图层
提交的数据排序数据是要 主键=>sort值
ID分类名称类型显示到导航栏排序操作
{volist name="cateRes" id="cate"}
{$cate.id}<?php echo str_repeat('-', $cate['level']*8)?>{$cate.cate_name}{if condition="$cate['cate_type'] eq 1"}
系统分类
{elseif condition="$cate['cate_type'] eq 2" /}
帮助分类
{elseif condition="$cate['cate_type'] eq 3" /}
网店帮助
{elseif condition="$cate['cate_type'] eq 4" /}
网店信息
{else /}
普通分类
{/if}
{if condition="$cate['show_nav'] eq 1"}
{else /}
{/if}
编辑
{notin name="$cate['id']" value="1,2,3"}
删除
{else /}
删除
{/notin}
{/volist}
打印提交的数据:
D:\xampp\htdocs\shop\thinkphp\library\think\Debug.php:165: array (size=1) 'sort' => array (size=17) 20 => string '4' (length=1) 22 => string '3' (length=1) 21 => string '3' (length=1) 1 => string '2' (length=1) 3 => string '12' (length=2) 2 => string '11' (length=2) 4 => string '55' (length=2) 5 => string '54' (length=2) 7 => string '53' (length=2) 16 => string '52' (length=2) 17 => string '51' (length=2) 23 => string '2' (length=1) 25 => string '50' (length=2) 24 => string '50' (length=2) 19 => string '1' (length=1) 18 => string '1' (length=1) 26 => string '1' (length=1)
控制器里:
public function lst()
{
$Category = new Catetree();
$CategoryObj = db('Category');
if (request()->isPost()) {
$data = input('post.');
$cateres = $Category->cateSort($data['sort'], $CategoryObj);
if ($cateres === false) {
$this->error('只能填写大于0的数字');
}
$this->success('排序成功!', url('lst'));
}
$CategoryRes = $CategoryObj->order('sort DESC')->select();
$CategoryRes = $Category->Catetree($CategoryRes);
$this->assign([
'CategoryRes' => $CategoryRes,
]);
return view('list');
}
扩展函数里
D:\xampp\htdocs\shop\extend\catetree\Catetree.php
namespace catetree;
use think\Validate;
class Catetree
{
//处理栏目排序 $data数组,$obj是实例化的表的对象
public function cateSort($data, $obj)
{
foreach ($data as $k => $v) {
//数组里的排序值只能填写大于0的数字
$is_num = (!empty(intval($v)) && $v > 0 && Validate::is(intval($v), 'integer')) ? 1 : 0;
// dump($is_num);
if ($is_num == 0) {
return false;
}
$obj->update(['id' => $k, 'sort' => $v]);
}
}