在学习文章列表之前,先了解一下文章编辑,这里可能会出现错误。
添加文章和编辑文章使用模板。 如果添加文章时模板中没有显示news_name形参,而模板中的值直接使用{$newsinfo.news_name},则会出现错误。
2种处理方法:
1)添加时赋空值
$newsinfo['news_name']='';
View::assign('$newsinfo',$newsinfo);
2)模板中使用php7的写法,并使用“??” 如下:
3)如果保存到数据库时不勾选该复选框,则该名称不会被传递,我们在获取时要添加一个判断
$xuanzhong=isset(input('post.tuiian'))?1:0;
图1 列表样式
文章列表常用功能操作
1.全选或取消
这里我没有使用窃听进行所有选择,而是继续使用jquery
html代码
选择框放置在class='a'的td中
选择div中的all并添加自己的类,selectall
确定全选框是否被选中。 如果选中,则文章列表的选择框也必须选中,否则不应选中。
$(document).ready(function() {
$(".action").click(function(){
$('.a').find('input[name="checkbox[]"]').prop('checked',$(this).find('input').is(':checked')?true:false);
layui.use('form', function(){
var form = layui.form;
form.render('checkbox');
});
});
});
使用layui的布局。 选择或取消后,需要再次刷新,或者称之为渲染。
layui.use('form', function(){
var form = layui.form;
form.render('checkbox');
});
在这里您可以看到只有复选框被刷新。
2. Ajax显示文章列表
html代码:
选择
排序
稍后会显示数组都具有相同的属性,但这里只写了 2 个。
js代码
$(document).ready(function() {
var pager={$p};
getajax(pager);
$(document).delegate(".pager li a", 'click', function() {
var pager=$(this).attr('datapage');
getajax(pager);
});
});
function getajax(pager){
$.ajax({
url: "/admin.php/cmmodule/list.html",
data: {"p":pager},
type: 'post',
dataType: 'json',
success: function(result) {
if (result.error == "0000") {
console.log(result.msg);
var text="";
for (x in result.msg) {
text+=" ";
text+=" ";
text+=" ";
text+=" ";
}
$('.tba').html(text);
$(".pager").html(result.pagels);
layui.use('form', function(){
var form = layui.form;
form.render();
});
}
}
});
1); 因为打开页面时需要使用ajax读取数据,而点击分页时,也需要使用ajax读取数据。 这里定制了一个方法:getajax,它封装了ajax。 我比较懒,直接在getajax中给表添加形参,从而封装起来。 不适合所有人。 可以是ajax(url,参数); 然后根据返回值进行操作,具体看自己的习惯;
2)我设置的返回数据的json格式,msg存放的是正确返回的数据jquery选中checkbox事件,error是错误码,0000是正确的,大家可以根据自己的习惯这样做; 这里我在js中使用for in循环,或者php后台读取时,直接将这个html添加到foreach循环中然后返回;
3)用ajax显示列表时jquery选中checkbox事件,我们不能再使用tp6提供的分页了。 需要我们自己写。 我们之前说过我们创建了一个新的 cm 类。 我们可以说说这个分页的cm类,因为ajax读取的是分页的页码,所以不需要链接;
4)如果ajax返回的是字符串,并且里面写入的内容是json格式,可以使用JSON.parse(ressu); 在js中将其转换为json格式;
字符串结果转为 json:
var ressuobj=JSON.parse(ressu);
分页代码;
public function pager($pagecount,$ipage){
//ipage是当前页 $pagecount 总页码
$pagstr='';
$totalpagt=10;
if($ipage==1){
$pagstr.="- <
";
}else{
$pagstr.="- <
";
}
if($ipage<=5){
$startsp=1;
if($pagecount<=$totalpagt){
$endsp=$pagecount;
}else{
$endsp=$totalpagt;
}
}else{
if($pagecount$pagecount-5){
$endsp=$pagecount;
$startsp=$ipage-($totalpagt-($pagecount-$ipage))+1;
}
}
}
for($is=$startsp;$is<=$endsp;$is++){
if((int)$ipage==(int)$is){
$pagstr.="- ".$is."
";
}else{
$pagstr.="- ".$is."
";
}
}
if($ipage==$pagecount){
$pagstr.="- >
";
}else{
$pagstr.="- >
";
}
$pagstr.="
";
return $pagstr;
}
仅供参考,比较简单,确定起始页脚和结束页脚,然后for循环;
4)后端读取文章列表
public function list(){
$pagesize="1";
$page=(int)input('post.p');
$newslist=Db::name('web_news')->page($page,$pagesize)->order("id desc")->select();
$newscount=Db::name('web_news')->field('id')->count();
$pagecount=ceil($newscount/$pagesize);
echo json_encode(array('error'=>'0000','msg'=>$newslist,'pagels'=>$this->pager($pagecount,$page)));
exit;
}
5)再次渲染,因为之前的表格没有数据,而新添加的样式没有layui。 添加几次就习惯了,就会知道如何持续渲染;
图2 ajax显示列表效果
过程:
(1)打开页面,在控制器中传入模板参数(分页或者其他,默认分页开始是第一页,为1);
(2)渲染模板并在模板中执行ajax,再次请求页面返回文章列表信息;
(3)将返回的列表重新组织为for in循环格式(返回格式也可以写在PHP页面上),通过.html(文本)显示在网页上;
(4)layui重新渲染;
3.删除、更新排序
它们都放在一个表单中,所以就会有一个处理程序,所以我们需要判断按钮名称的值。
php代码
if(input('post.mysub')=='更新排序'){
排序操作
exit;
}
删除操作
排序操作后必须添加exit,否则删除操作也会执行。 也可以用if else,但是必须加exit。
if(){
排序
}else{
删除
}
发表评论