10天學會phpWeChat——第六天:實現新聞的後臺管理

經過前面五講的系列教程,咱們完成了一個簡單模塊的前端發佈、列表展現、詳情展現。實際生產環境中,全部前臺的數據都會有對應的後臺操做進行統籌管理。咱們稱之爲後臺管理系統。php

今天,咱們開始《10天學會phpWeChat》的第六講:實現新聞的後臺管理。html

一、後臺管理的代碼在哪裏編輯?前端

在第一天和次日,咱們大體瞭解了,對於一個功能模塊來說,後臺管理和前臺的控制器和視圖都分爲兩大部分,前端控制器就是對應模塊文件夾下的index.php,前端視圖文件都在模塊根目錄的template/default/目錄下;後臺控制器就是對應模塊admin目錄下的*.inc.php(此處爲hello.inc.php)文件,後臺視圖文件在admin目錄下的template目錄下。如圖:mysql

hello world模塊目錄結構sql

如上所述,後臺管理的控制器和視圖文件在對應模塊的admin目錄下編輯。數據庫

小貼士:後端和前端共用模型目錄和模型文件,均在對應模塊目錄的include目錄下,*.class.php爲模型文件,*.func.php爲輔助函數。後端

 

二、指定管理菜單微信

管理菜單是指登陸後臺後,對應模塊的左側菜單欄須要呈現的菜單項,假如咱們須要一個[文章管理]功能,咱們在哪裏配置呢?框架

咱們如今來回答這個問題。函數

首先進入後臺——頂部系統設置——左側模塊管理,找到要管理的模塊,點擊[配置模塊]進入模塊配置頁面(請確保您的phpWeChat核心框架版本爲1.0.8+,框架下載:http://bbs.phpwechat.com/thread-189-1-1.html)。以下圖出現相似的配置界面:

點擊配置模塊,以下圖:

如上圖所示:咱們點擊[增長菜單項]增長一項菜單,菜單圖標、菜單名稱、菜單action都是能夠選擇修改的。

菜單圖標:即後臺模塊左側菜單的ICO圖標;

菜單名稱:即後臺模塊左側菜單顯示的名稱;

菜單action:用來給控制器指明操做路由。

如上圖所示,提交後,咱們就添加了一個[文章管理]菜單。如圖:

此時點擊文章管理菜單,右側出現空白頁,由於咱們尚未編寫相應的控制器邏輯和視圖文件。

三、編寫後臺管理控制器

打開hello world模塊的後臺控制器文件:admin/hello.inc.php ,因爲前面咱們定義了路由叫manage,因此咱們須要寫一個case 'manage':方法。

 1 <?php
 2 
 3 /**
 4      * 本文件是 hello 模塊的後端控制器
 5      *
 6      * 您能夠經過 switch 的 case 分支來實現不一樣的業務邏輯
 7      */
 8 
 9 use wechat\Hello\Hello;
10 use phpWeChat\Area;
11 use phpWeChat\CaChe;
12 use phpWeChat\Config;
13 use phpWeChat\Member;
14 use phpWeChat\Module;
15 use phpWeChat\MySql;
16 use phpWeChat\Order;
17 use phpWeChat\Upload;
18 
19 !defined('IN_MANAGE') && exit('Access Denied!'); 
20 
21 $mod=@return_edefualt(str_callback_w($_GET['mod']),'hello');
22 $file=@return_edefualt(str_callback_w($_GET['file']),'hello');
23 $action=@return_edefualt(str_callback_w($_GET['action']),'config');
24 
25 $_parent=Module::getModuleByKey(Module::getModule($mod,'parentkey'));
26 $_mod=$_parent['folder'].'/'.$mod.'/';
27 
28 switch($action)
29 {
30 
31     // case 'config' 是系統默認自帶操做,用於進行模塊選項配置的操做
32     case 'config':
33         if(isset($dosubmit))
34         {
35             Config::setConfig($_mod,$config);
36             operation_tips('操做成功!','?mod=hello&file=hello&action=config');
37         }
38         include_once parse_admin_tlp($file.'-'.$action,$mod);
39         break;
40     case 'manage':
41         echo '這裏將呈現文章列表和對應的管理';
42         break;
43 
44     //如下 case 條件僅爲 示例。您能夠根據業務邏輯自由修改和拓展
45     //case 'manage':
46         //在此寫 phpwechat.php?mod=hello&file=hello&action=manage 時的邏輯
47         //break;
48     //case 'add':
49         //在此寫 phpwechat.php?mod=hello&file=hello&action=add 時的邏輯
50         //break;
51     //以此類推...
52     //case '...':
53         //在此寫 phpwechat.php?mod=hello&file=hello&action=... 時的邏輯
54         //break;
55     default:
56         break;
57 }
58 ?>

此時後臺呈現以下效果:

以上的步驟是爲了展現控制器的效果,實際上,咱們須要將數據從數據讀出,而後呈現給視圖。

與前端不同的是,後臺須要顯式加載視圖文件代碼爲:

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



 

這樣咱們從新定義控制器以下:

 1 <?php
 2 
 3 /**
 4      * 本文件是 hello 模塊的後端控制器
 5      *
 6      * 您能夠經過 switch 的 case 分支來實現不一樣的業務邏輯
 7      */
 8 
 9 use wechat\Hello\Hello;
10 use phpWeChat\Area;
11 use phpWeChat\CaChe;
12 use phpWeChat\Config;
13 use phpWeChat\Member;
14 use phpWeChat\Module;
15 use phpWeChat\MySql;
16 use phpWeChat\Order;
17 use phpWeChat\Upload;
18 
19 !defined('IN_MANAGE') && exit('Access Denied!'); 
20 
21 $mod=@return_edefualt(str_callback_w($_GET['mod']),'hello');
22 $file=@return_edefualt(str_callback_w($_GET['file']),'hello');
23 $action=@return_edefualt(str_callback_w($_GET['action']),'config');
24 
25 $_parent=Module::getModuleByKey(Module::getModule($mod,'parentkey'));
26 $_mod=$_parent['folder'].'/'.$mod.'/';
27 
28 switch($action)
29 {
30 
31     // case 'config' 是系統默認自帶操做,用於進行模塊選項配置的操做
32     case 'config':
33         if(isset($dosubmit))
34         {
35             Config::setConfig($_mod,$config);
36             operation_tips('操做成功!','?mod=hello&file=hello&action=config');
37         }
38         include_once parse_admin_tlp($file.'-'.$action,$mod);
39         break;
40     case 'manage':
41         //echo '這裏將呈現文章列表和對應的管理';
42         $data=Hello::dataList();
43         include_once parse_admin_tlp($file.'-'.$action,$mod);
44         break;
45 
46     //如下 case 條件僅爲 示例。您能夠根據業務邏輯自由修改和拓展
47     //case 'manage':
48         //在此寫 phpwechat.php?mod=hello&file=hello&action=manage 時的邏輯
49         //break;
50     //case 'add':
51         //在此寫 phpwechat.php?mod=hello&file=hello&action=add 時的邏輯
52         //break;
53     //以此類推...
54     //case '...':
55         //在此寫 phpwechat.php?mod=hello&file=hello&action=... 時的邏輯
56         //break;
57     default:
58         break;
59 }
60 ?>

四、創建後臺操做視圖文件

此時,後臺刷新,提示視圖文件不存在:

咱們須要在admin/template/下創建hello-manage.tlp.php視圖文件。

具體代碼:

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

在上面的視圖文件中,咱們定義了一個刪除操做,並指明瞭路由規則action爲delete。效果以下圖:

五、定義刪除模型操做方法和控制器路由

因爲沒定義delete的路由,因此如今點擊是空白頁。此時咱們須要在模型裏增長刪除方法和後端控制器裏增長case 'delete':路由規則:

模型文件include/hello.class.php

 1 <?php
 2 // +----------------------------------------------------------------------
 3 // | phpWeChat hello 操做類 Last modified 2016-12-28 00:02:22
 4 // +----------------------------------------------------------------------
 5 // | Copyright (c) 2009-2016 phpWeChat http://www.phpwechat.com All rights reserved.
 6 // +----------------------------------------------------------------------
 7 // | Author: 騎馬的少年 <phpwechat@126.com> <http://www.phpwechat.com>
 8 // +----------------------------------------------------------------------
 9 namespace wechat\Hello;
10 
11 use phpWeChat\Area;
12 use phpWeChat\CaChe;
13 use phpWeChat\Config;
14 use phpWeChat\DataInput;
15 use phpWeChat\DataList;
16 use phpWeChat\Member;
17 use phpWeChat\Module;
18 use phpWeChat\MySql;
19 use phpWeChat\Order;
20 use phpWeChat\Upload;
21 
22 class Hello
23 {
24     public static $mPageString=''; // 這個靜態成員是系統自帶,請勿刪除
25     private static $mArticleTable='wechat_hello_article';
26     
27     static public function dataList()
28     {
29         //DB_PRE常量是phpWeChat自帶常量,指數據表前綴。
30 
31         $data=MySql::fetchAll("SELECT * FROM `".DB_PRE.self::$mArticleTable."` ORDER BY `id` DESC");
32 
33         return $data;
34     }
35 
36     static public function dataGet($id)
37     {
38         //DB_PRE常量是phpWeChat自帶常量,指數據表前綴。
39 
40         $id=intval($id);
41 
42         $data=MySql::fetchOne("SELECT * FROM `".DB_PRE.self::$mArticleTable."` WHERE `id` =".$id);
43 
44         return $data;
45     }
46 
47     static public function dataDelete($id)
48     {
49         //DB_PRE常量是phpWeChat自帶常量,指數據表前綴。
50 
51         $id=intval($id);
52 
53         return MySql::mysqlDelete(DB_PRE.self::$mArticleTable,$id);
54     }
55 
56     static function dataInsert($data)
57     {
58         return MySql::insert(DB_PRE.self::$mArticleTable,$data);
59     }
60 }
61 ?>

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

 1 <?php
 2 
 3 /**
 4      * 本文件是 hello 模塊的後端控制器
 5      *
 6      * 您能夠經過 switch 的 case 分支來實現不一樣的業務邏輯
 7      */
 8 
 9 use wechat\Hello\Hello;
10 use phpWeChat\Area;
11 use phpWeChat\CaChe;
12 use phpWeChat\Config;
13 use phpWeChat\Member;
14 use phpWeChat\Module;
15 use phpWeChat\MySql;
16 use phpWeChat\Order;
17 use phpWeChat\Upload;
18 
19 !defined('IN_MANAGE') && exit('Access Denied!'); 
20 
21 $mod=@return_edefualt(str_callback_w($_GET['mod']),'hello');
22 $file=@return_edefualt(str_callback_w($_GET['file']),'hello');
23 $action=@return_edefualt(str_callback_w($_GET['action']),'config');
24 
25 $_parent=Module::getModuleByKey(Module::getModule($mod,'parentkey'));
26 $_mod=$_parent['folder'].'/'.$mod.'/';
27 
28 switch($action)
29 {
30 
31     // case 'config' 是系統默認自帶操做,用於進行模塊選項配置的操做
32     case 'config':
33         if(isset($dosubmit))
34         {
35             Config::setConfig($_mod,$config);
36             operation_tips('操做成功!','?mod=hello&file=hello&action=config');
37         }
38         include_once parse_admin_tlp($file.'-'.$action,$mod);
39         break;
40     case 'manage':
41         //echo '這裏將呈現文章列表和對應的管理';
42         $data=Hello::dataList();
43         include_once parse_admin_tlp($file.'-'.$action,$mod);
44         break;
45     case 'delete':
46         $op=Hello::dataDelete($id);
47         if($op)
48         {
49             exit('刪除成功');
50         }
51         else
52         {
53             exit('刪除失敗');
54         }
55         break;
56     //如下 case 條件僅爲 示例。您能夠根據業務邏輯自由修改和拓展
57     //case 'manage':
58         //在此寫 phpwechat.php?mod=hello&file=hello&action=manage 時的邏輯
59         //break;
60     //case 'add':
61         //在此寫 phpwechat.php?mod=hello&file=hello&action=add 時的邏輯
62         //break;
63     //以此類推...
64     //case '...':
65         //在此寫 phpwechat.php?mod=hello&file=hello&action=... 時的邏輯
66         //break;
67     default:
68         break;
69 }
70 ?>

此時點擊刪除操做,則提示刪除成功,至此後臺刪除功能完成。

 

至此,一個小型的後臺管理功能完成了,在這裏咱們只作了一個刪除操做,固然您也能夠拓展下想象力,增長諸如編輯等操做,相信您必定可以完成。

 

《10天學會phpWeChat》系列教程傳送門:

相關文章
相關標籤/搜索