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

时间:2023-03-09 03:57:39
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:

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

举例2:

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

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

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

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

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

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

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

如上图所示,跟昨天不同的是,每个新闻标题都成了一个<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文件,作为文章详情的视图文件。

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

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

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

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

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

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

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

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

 <?php
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_APP') && exit('Access Denied!'); switch($action)
{
case 'index':
//从数据表读取数据并赋给数组$data
$data=Hello::dataList(); break;
case 'detail':
$data=Hello::dataGet($id); //$id 可以改成$_GET['id']
break;
//以下 case 条件仅为 示例。您可以根据业务逻辑*修改和拓展 //case 'index': //在此写 index.php?m=hello&a=index 时的逻辑 //break; //case 'list': //在此写 index.php?m=hello&a=list 时的逻辑 //break; //以此类推... //case '...': //在此写 index.php?m=hello&a=... 时的逻辑 //break; default:
break;
}
?>

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

 <!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>{$data['title']}</title>
</head> <body>
这是文章详情的视图文件
<h1>{$data['title']}</h1>
<div>
{$data['content']}
</div>
</body>
</html>

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

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

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

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