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


通過前面五講的系列教程,我們完成了一個簡單模塊的前端發布、列表展示、詳情展示。實際生產環境中,所有前台的數據都會有對應的后台操作進行統籌管理。我們稱之為后台管理系統。

今天,我們開始《10天學會phpWeChat》的第六講:實現新聞的后台管理。

1、后台管理的代碼在哪里編輯?

在第一天和第二天,我們大致了解了,對於一個功能模塊來講,后台管理和前台的控制器和視圖都分為兩大部分,前端控制器就是對應模塊文件夾下的index.php,前端視圖文件都在模塊根目錄的template/default/目錄下;后台控制器就是對應模塊admin目錄下的*.inc.php(此處為hello.inc.php)文件,后台視圖文件在admin目錄下的template目錄下。如圖:

hello world模塊目錄結構

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

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

 

2、指定管理菜單

管理菜單是指登錄后台后,對應模塊的左側菜單欄需要呈現的菜單項,假如我們需要一個[文章管理]功能,我們在哪里配置呢?

我們現在來回答這個問題。

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

點擊配置模塊,如下圖:

如上圖所示:我們點擊[增加菜單項]增加一項菜單,菜單圖標、菜單名稱、菜單action都是可以選擇修改的。

菜單圖標:即后台模塊左側菜單的ICO圖標;

菜單名稱:即后台模塊左側菜單顯示的名稱;

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

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

此時點擊文章管理菜單,右側出現空白頁,因為我們還沒有編寫相應的控制器邏輯和視圖文件。

3、編寫后台管理控制器

打開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 ?>

4、建立后台操作視圖文件

此時,后台刷新,提示視圖文件不存在:

我們需要在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。效果如下圖:

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

由於沒定義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》系列教程傳送門:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM