在第三天,我们创建了一个“增强版”的文章模块,实现了数据从数据库到视图端展示的流程。但是我们仅仅是实现了数据列表的展示,对于文章详情等页面跳转并未涉及。
本文重点讲解phpWeChat一个十分重要的前端函数U()。
今天我们进入《10天学会phpWeChat》系列教程的第四天:大U函数U()的使用。
一、U()函数是干什么的?
根据phpWeChat官方手册的解释:http://wiki.phpwechat.com/38
举例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,则呈现了如下效果:
如上图所示,跟昨天不同的是,每个新闻标题都成了一个<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文件,作为文章详情的视图文件。
<!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 则正常出现了如图的显示:
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: 骑马的少年 <[email protected]> <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 则成功实现了文章详情的展示。
至此,一个简单的前端文章列表展示加文章详情展示功能模块就做出来了。