10天学会phpWeChat——第四天:大U函数U()的使用

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

本文重点讲解phpWeChat一个十分重要的前端函数U()。

今天我们进入《10天学会phpWeChat》系列教程的第四天:大U函数U()的使用。

一、U()函数是干什么的?

根据phpWeChat官方手册的解释:http://wiki.phpwechat.com/38

函数:U($mod='',$action='index',$para=array())
参数:$mod 所在功能模块 $action 动作 $para 更多参数
功能:获取模块访问URL


举例1:

1 <?php 
2 <a href="{U('news','index')}">链接</a> // 返回 <a href="index.php?m=news&a=index">链接</a>
3 ?>


举例2:

1 <?php 
2 <a href="{U('news','show',array('id'=>'185'))}">链接</a> // 返回 <a href="index.php?m=news&a=show&id=185">链接</a>
3 ?>

根据以上的官方函数说明,我们可以清晰的认识到U()函数是一个自动生成前台URL地址的函数。

 

二、继续!丰富我们的hello world功能模块,增加文章详情展示

1、改造hello world模块的前端视图文件template/default/index.html

 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>
12         <h1><a href="{U('hello','detail',array('id'=>$r['id']))}">{$r['title']}</a></h1>
13         <p>{$r['content']}</p>
14     </li>
15 {/loop}
16 </ul>
17 </body>
18 </html>

如上面的代码所示,我们为文章标题增加了一个<a>链接,用于指向文章详情的跳转。刷新前端访问URL:http://www.example.com/index.php?m=hello&a=index,则呈现了如下效果:

如上图所示,跟昨天不同的是,每个新闻标题都成了一个<a>链接,在U()函数的自动生成下,每个新闻的链接指向都到了 http://www.example.com/index.php?m=hello&a=detail&id=文章ID。

此时如果访问这个地址,则出现模板不存在的提示。跟第二天讲的一样,我们需要编写a=detail时对应的控制器路由程序case 'detail':和对应的前端视图文件detail.html

2、在template/default/下新建一个detail.html文件,作为文章详情的视图文件。

 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 这是文章详情的视图文件
10 </body>
11 </html>

访问文章详情地址:http://www.example.com/index.php?m=hello&a=detail&id=3 则正常出现了如图的显示:

3、编写文章详情模型读取方法

打开include/hello.class.php,我们新增dataGet()方法用于根据文章Id获取文章数据:

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

 

4、编写文章详情控制器路由,新增case 'detail'规则

 1 <?php
 2     use wechat\hello\hello;
 3     use phpWeChat\Area;
 4     use phpWeChat\CaChe;
 5     use phpWeChat\Config;
 6     use phpWeChat\Member;
 7     use phpWeChat\Module;
 8     use phpWeChat\MySql;
 9     use phpWeChat\Order;
10     use phpWeChat\Upload;
11 
12     !defined('IN_APP') && exit('Access Denied!');
13 
14     switch($action)
15     {
16         case 'index':
17             //从数据表读取数据并赋给数组$data
18             $data=Hello::dataList();
19 
20             break;
21         case 'detail':
22             $data=Hello::dataGet($id); //$id 可以改成$_GET['id']
23             break;
24         //以下 case 条件仅为 示例。您可以根据业务逻辑自由修改和拓展
25 
26         //case 'index':
27 
28             //在此写 index.php?m=hello&a=index 时的逻辑
29 
30             //break;
31 
32         //case 'list':
33 
34             //在此写 index.php?m=hello&a=list 时的逻辑
35 
36             //break;
37 
38         //以此类推...
39 
40         //case '...':
41 
42             //在此写 index.php?m=hello&a=... 时的逻辑
43 
44             //break;
45 
46         default:
47             break;
48     }
49 ?>

 

5、将控制器获取的数据赋给视图文件,我们重新编写template/default/detail.html视图文件

 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>{$data['title']}</title>
 6 </head>
 7 
 8 <body>
 9 这是文章详情的视图文件
10 <h1>{$data['title']}</h1>
11 <div>
12 {$data['content']}
13 </div>
14 </body>
15 </html>

我们再次访问文章详情链接:http://www.example.com/index.php?m=hello&a=detail&id=3 则成功实现了文章详情的展示。

 

至此,一个简单的前端文章列表展示加文章详情展示功能模块就做出来了。

 

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

posted @ 2016-12-28 13:33  奔四少年  阅读(3557)  评论(0编辑  收藏  举报