10天学会phpWeChat——第六天:实现新闻的后台管理

时间:2022-05-10 09:44:54

通过前面五讲的系列教程,我们完成了一个简单模块的前端发布、列表展示、详情展示。实际生产环境中,所有前台的数据都会有对应的后台操作进行统筹管理。我们称之为后台管理系统。

今天,我们开始《10天学会phpWeChat》的第六讲:实现新闻的后台管理。

1、后台管理的代码在哪里编辑?

在第一天和第二天,我们大致了解了,对于一个功能模块来讲,后台管理和前台的控制器和视图都分为两大部分,前端控制器就是对应模块文件夹下的index.php,前端视图文件都在模块根目录的template/default/目录下;后台控制器就是对应模块admin目录下的*.inc.php(此处为hello.inc.php)文件,后台视图文件在admin目录下的template目录下。如图:

10天学会phpWeChat——第六天:实现新闻的后台管理

hello world模块目录结构

如上所述,后台管理的控制器和视图文件在对应模块的admin目录下编辑。

小贴士:后端和前端共用模型目录和模型文件,均在对应模块目录的include目录下,*.class.php为模型文件,*.func.php为辅助函数。

2、指定管理菜单

管理菜单是指登录后台后,对应模块的左侧菜单栏需要呈现的菜单项,假如我们需要一个[文章管理]功能,我们在哪里配置呢?

我们现在来回答这个问题。

首先进入后台——顶部系统设置——左侧模块管理,找到要管理的模块,点击[配置模块]进入模块配置页面(请确保您的phpWeChat核心框架版本为1.0.8+,框架下载:http://bbs.phpwechat.com/thread-189-1-1.html)。如下图出现类似的配置界面:

10天学会phpWeChat——第六天:实现新闻的后台管理

点击配置模块,如下图:

10天学会phpWeChat——第六天:实现新闻的后台管理

如上图所示:我们点击[增加菜单项]增加一项菜单,菜单图标、菜单名称、菜单action都是可以选择修改的。

菜单图标:即后台模块左侧菜单的ICO图标;

菜单名称:即后台模块左侧菜单显示的名称;

菜单action:用来给控制器指明操作路由。

如上图所示,提交后,我们就添加了一个[文章管理]菜单。如图:

10天学会phpWeChat——第六天:实现新闻的后台管理

此时点击文章管理菜单,右侧出现空白页,因为我们还没有编写相应的控制器逻辑和视图文件。

3、编写后台管理控制器

打开hello world模块的后台控制器文件:admin/hello.inc.php ,由于前面我们定义了路由叫manage,所以我们需要写一个case 'manage':方法。

 <?php

 /**
* 本文件是 hello 模块的后端控制器
*
* 您可以通过 switch 的 case 分支来实现不同的业务逻辑
*/ use wechat\Hello\Hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_MANAGE') && exit('Access Denied!'); $mod=@return_edefualt(str_callback_w($_GET['mod']),'hello');
$file=@return_edefualt(str_callback_w($_GET['file']),'hello');
$action=@return_edefualt(str_callback_w($_GET['action']),'config'); $_parent=Module::getModuleByKey(Module::getModule($mod,'parentkey'));
$_mod=$_parent['folder'].'/'.$mod.'/'; switch($action)
{ // case 'config' 是系统默认自带操作,用于进行模块选项配置的操作
case 'config':
if(isset($dosubmit))
{
Config::setConfig($_mod,$config);
operation_tips('操作成功!','?mod=hello&file=hello&action=config');
}
include_once parse_admin_tlp($file.'-'.$action,$mod);
break;
case 'manage':
echo '这里将呈现文章列表和对应的管理';
break; //以下 case 条件仅为 示例。您可以根据业务逻辑*修改和拓展
//case 'manage':
//在此写 phpwechat.php?mod=hello&file=hello&action=manage 时的逻辑
//break;
//case 'add':
//在此写 phpwechat.php?mod=hello&file=hello&action=add 时的逻辑
//break;
//以此类推...
//case '...':
//在此写 phpwechat.php?mod=hello&file=hello&action=... 时的逻辑
//break;
default:
break;
}
?>

此时后台呈现如下效果:

10天学会phpWeChat——第六天:实现新闻的后台管理

以上的步骤是为了展示控制器的效果,实际上,我们需要将数据从数据读出,然后呈现给视图。

与前端不一样的是,后台需要显式加载视图文件代码为:

 include_once parse_admin_tlp($file.'-'.$action,$mod);

这样我们重新定义控制器如下:

 <?php

 /**
* 本文件是 hello 模块的后端控制器
*
* 您可以通过 switch 的 case 分支来实现不同的业务逻辑
*/ use wechat\Hello\Hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_MANAGE') && exit('Access Denied!'); $mod=@return_edefualt(str_callback_w($_GET['mod']),'hello');
$file=@return_edefualt(str_callback_w($_GET['file']),'hello');
$action=@return_edefualt(str_callback_w($_GET['action']),'config'); $_parent=Module::getModuleByKey(Module::getModule($mod,'parentkey'));
$_mod=$_parent['folder'].'/'.$mod.'/'; switch($action)
{ // case 'config' 是系统默认自带操作,用于进行模块选项配置的操作
case 'config':
if(isset($dosubmit))
{
Config::setConfig($_mod,$config);
operation_tips('操作成功!','?mod=hello&file=hello&action=config');
}
include_once parse_admin_tlp($file.'-'.$action,$mod);
break;
case 'manage':
//echo '这里将呈现文章列表和对应的管理';
$data=Hello::dataList();
include_once parse_admin_tlp($file.'-'.$action,$mod);
break; //以下 case 条件仅为 示例。您可以根据业务逻辑*修改和拓展
//case 'manage':
//在此写 phpwechat.php?mod=hello&file=hello&action=manage 时的逻辑
//break;
//case 'add':
//在此写 phpwechat.php?mod=hello&file=hello&action=add 时的逻辑
//break;
//以此类推...
//case '...':
//在此写 phpwechat.php?mod=hello&file=hello&action=... 时的逻辑
//break;
default:
break;
}
?>

4、建立后台操作视图文件

此时,后台刷新,提示视图文件不存在:

10天学会phpWeChat——第六天:实现新闻的后台管理

我们需要在admin/template/下建立hello-manage.tlp.php视图文件。

10天学会phpWeChat——第六天:实现新闻的后台管理

具体代码:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文章管理</title>
</head> <body>
<ul>
{loop $data $r}
<li>{$r['title']}&nbsp;<a href="?mod=hello&file=hello&action=delete&id={$r['id']}">删除</a></li>
{/loop}
</ul>
</body>
</html>

在上面的视图文件中,我们定义了一个删除操作,并指明了路由规则action为delete。效果如下图:

10天学会phpWeChat——第六天:实现新闻的后台管理

5、定义删除模型操作方法和控制器路由

由于没定义delete的路由,所以现在点击是空白页。此时我们需要在模型里增加删除方法和后端控制器里增加case 'delete':路由规则:

模型文件include/hello.class.php

 <?php
// +----------------------------------------------------------------------
// | phpWeChat hello 操作类 Last modified 2016-12-28 00:02:22
// +----------------------------------------------------------------------
// | Copyright (c) 2009-2016 phpWeChat http://www.phpwechat.com All rights reserved.
// +----------------------------------------------------------------------
// | Author: 骑马的少年 <phpwechat@126.com> <http://www.phpwechat.com>
// +----------------------------------------------------------------------
namespace wechat\Hello; use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\DataInput;
use phpWeChat\DataList;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; class Hello
{
public static $mPageString=''; // 这个静态成员是系统自带,请勿删除
private static $mArticleTable='wechat_hello_article'; static public function dataList()
{
//DB_PRE常量是phpWeChat自带常量,指数据表前缀。 $data=MySql::fetchAll("SELECT * FROM `".DB_PRE.self::$mArticleTable."` ORDER BY `id` DESC"); return $data;
} static public function dataGet($id)
{
//DB_PRE常量是phpWeChat自带常量,指数据表前缀。 $id=intval($id); $data=MySql::fetchOne("SELECT * FROM `".DB_PRE.self::$mArticleTable."` WHERE `id` =".$id); return $data;
} static public function dataDelete($id)
{
//DB_PRE常量是phpWeChat自带常量,指数据表前缀。 $id=intval($id); return MySql::mysqlDelete(DB_PRE.self::$mArticleTable,$id);
} static function dataInsert($data)
{
return MySql::insert(DB_PRE.self::$mArticleTable,$data);
}
}
?>

后端控制器(admin/hello.inc.php):

 <?php

 /**
* 本文件是 hello 模块的后端控制器
*
* 您可以通过 switch 的 case 分支来实现不同的业务逻辑
*/ use wechat\Hello\Hello;
use phpWeChat\Area;
use phpWeChat\CaChe;
use phpWeChat\Config;
use phpWeChat\Member;
use phpWeChat\Module;
use phpWeChat\MySql;
use phpWeChat\Order;
use phpWeChat\Upload; !defined('IN_MANAGE') && exit('Access Denied!'); $mod=@return_edefualt(str_callback_w($_GET['mod']),'hello');
$file=@return_edefualt(str_callback_w($_GET['file']),'hello');
$action=@return_edefualt(str_callback_w($_GET['action']),'config'); $_parent=Module::getModuleByKey(Module::getModule($mod,'parentkey'));
$_mod=$_parent['folder'].'/'.$mod.'/'; switch($action)
{ // case 'config' 是系统默认自带操作,用于进行模块选项配置的操作
case 'config':
if(isset($dosubmit))
{
Config::setConfig($_mod,$config);
operation_tips('操作成功!','?mod=hello&file=hello&action=config');
}
include_once parse_admin_tlp($file.'-'.$action,$mod);
break;
case 'manage':
//echo '这里将呈现文章列表和对应的管理';
$data=Hello::dataList();
include_once parse_admin_tlp($file.'-'.$action,$mod);
break;
case 'delete':
$op=Hello::dataDelete($id);
if($op)
{
exit('删除成功');
}
else
{
exit('删除失败');
}
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑*修改和拓展
//case 'manage':
//在此写 phpwechat.php?mod=hello&file=hello&action=manage 时的逻辑
//break;
//case 'add':
//在此写 phpwechat.php?mod=hello&file=hello&action=add 时的逻辑
//break;
//以此类推...
//case '...':
//在此写 phpwechat.php?mod=hello&file=hello&action=... 时的逻辑
//break;
default:
break;
}
?>

此时点击删除操作,则提示删除成功,至此后台删除功能完成。

10天学会phpWeChat——第六天:实现新闻的后台管理

至此,一个小型的后台管理功能完成了,在这里我们只做了一个删除操作,当然您也可以拓展下想象力,增加诸如编辑等操作,相信您一定能够完成。

《10天学会phpWeChat》系列教程传送门:

10天学会phpWeChat——第六天:实现新闻的后台管理的更多相关文章

  1. 10天学会phpWeChat——第五天:实现新闻投稿功能

    在前几讲里,我们逐渐实现了自己小模块的新闻列表展示.新闻详情展示功能,现在您已经初步有能力开发一个phpWeChat小模块了,本文将在已开发的hello world模块基础上,增加一个新的功能--新闻 ...

  2. 10天学会phpWeChat——第七天:创建一个自适应PC网站&plus;H5移动端的模块

    本教程基于phpWeChat核心框架1.1.0+版本.下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20 通过前面六讲的系 ...

  3. 10天学会phpWeChat——第四天:大U函数U&lpar;&rpar;的使用

    在第三天,我们创建了一个"增强版"的文章模块,实现了数据从数据库到视图端展示的流程.但是我们仅仅是实现了数据列表的展示,对于文章详情等页面跳转并未涉及. 本文重点讲解phpWeCh ...

  4. 10天学会phpWeChat——第三天:从数据库读取数据到视图

    在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...

  5. 10天学会phpWeChat——第二天:hello world!我的第一个功能模块

    今天我们开始进入<10天学会phpWeChat>系列教程的第二天:创建我的第一个hello world! 功能模块. 1.登录后台,进入 系统设置--自定义模块,如图: 自定义模块参数说明 ...

  6. 10天学会phpWeChat——第一天:核心框架的目录结构

    phpWeCaht是一款优秀的PC网站+微信公共号开发框架. 本博客系列将图文结合,详细介绍phpWeChat 的使用方法,今天进入phpWeChat系列教程之<10天学会phpWeChat&g ...

  7. 10天学会phpWeChat——第八天:Form类,丰富表单提交的字段类型

    通过前面七讲的系列教程,我们完成了一个包含后台并自适应PC+h5移动端的文章管理模块. 在实际的生产环境中,文章投稿.商品上传等操作并不会简单局限于一个text和textarea组成的表单.在实际中, ...

  8. 10天学会phpWeChat——第九天:数据库增、删、改、查&lpar;CRUD&rpar;操作

    数据库的操作(CRUD)是一个现代化计算机软件的核心,尤其针对web应用软件.虽然在前面的几讲里,我们针对数据库操作大致有了一些了解,但今天我们需要再次强化下. 除了新瓶装老酒,我们今天还引入一个新的 ...

  9. 10天学会phpWeChat——第十天:phpWeChat的会员注册、登录以及微信网页开发

    通过前面的系列教程,我们系统的讲解了phpWeChat从视图端.控制器端到模型端的操作流程:熟悉了phpWeChat的目录结构:掌握了视图端模板如何创建一个丰富的表单和模型端如何操作数据库.这一切都是 ...

随机推荐

  1. LeedCode-Two Sum

    1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  2. Windows消息过滤

    在C#编程中,经常会遇到一些场景,如禁止鼠标拖动窗体,启用某些快捷键,禁止鼠标移动等.遇到这些需求,可以通过窗体的MouseMove事件,OnDragDrop,OnMove等事件来解决问题, 但是该方 ...

  3. linux集群运维工具&colon;clustershell和pssh

    由于需要安装hadoop集群,有10台机器需要安装,一开始打算用SCP复制,后来觉得不可接受(实际现场可能数倍的机器集群,就是10台也不想干).后来在网上找了,发现了clustershell和pssh ...

  4. C&num;--深入分析委托与事件

    本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Delegate ...

  5. X64 Win7(win2008)连接SqlServer2005慢的解决办法

    问题描述:数据库版本:SQL SERVER 2005数据库安装环境: Win 2003 X64 客户端环境:Win 2008 x64连接工具:ODBC或ado.net测试连接时间:4-6秒 客户端环境 ...

  6. JAVA的网络编程【转】

    JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...

  7. mac下nginx安装

    一.安装 Nginx 终端执行: brew search nginx brew install nginx 当前版本 1.10.2,通过brew可以把nginx需要的pcre,openssl,zlib ...

  8. 一个项目中mysql数据库经常死锁的问题解决记录

    1.问题描述 此项目为一个物流系统,需要使用PDA对货物进行入库.备货.出货等操作,在系统开发测试过程中,经常发现死锁问题. 有这样一种业务场景:仓库对备货单上货进行扫码备货后,点击"完成& ...

  9. No input file specified&period;

    no input file specified 解决方法 2018年02月23日 14:25:07 tiramisuer8023 阅读数:36607   版权声明:本文为博主原创文章,未经博主允许不得 ...

  10. Mybatis中传入时间值

    <if test="search_content2 != null and search_content2 != ''"> AND add_time <![CDA ...