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

本文重点讲解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,则呈现了如下效果:

如上图所示,跟昨天不同的是,每个新闻标题都成了一个<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: 骑马的少年 <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》系列教程传送门:

10天学会phpWeChat——第四天:大U函数U()的使用的更多相关文章

  1. 10天学会phpWeChat——第七天:创建一个自适应PC网站+H5移动端的模块

    本教程基于phpWeChat核心框架1.1.0+版本.下载地址:http://s.phpwechat.com/app_38026ed22fc1a91d92b5d2ef93540f20 通过前面六讲的系 ...

  2. 10天学会phpWeChat——第六天:实现新闻的后台管理

    通过前面五讲的系列教程,我们完成了一个简单模块的前端发布.列表展示.详情展示.实际生产环境中,所有前台的数据都会有对应的后台操作进行统筹管理.我们称之为后台管理系统. 今天,我们开始<10天学会 ...

  3. 10天学会phpWeChat——第五天:实现新闻投稿功能

    在前几讲里,我们逐渐实现了自己小模块的新闻列表展示.新闻详情展示功能,现在您已经初步有能力开发一个phpWeChat小模块了,本文将在已开发的hello world模块基础上,增加一个新的功能--新闻 ...

  4. 10天学会phpWeChat——第三天:从数据库读取数据到视图

    在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...

  5. 10天学会phpWeChat——第二天:hello world!我的第一个功能模块

    今天我们开始进入<10天学会phpWeChat>系列教程的第二天:创建我的第一个hello world! 功能模块. 1.登录后台,进入 系统设置--自定义模块,如图: 自定义模块参数说明 ...

  6. 10天学会phpWeChat——第一天:核心框架的目录结构

    phpWeCaht是一款优秀的PC网站+微信公共号开发框架. 本博客系列将图文结合,详细介绍phpWeChat 的使用方法,今天进入phpWeChat系列教程之<10天学会phpWeChat&g ...

  7. 10天学会phpWeChat——第八天:Form类,丰富表单提交的字段类型

    通过前面七讲的系列教程,我们完成了一个包含后台并自适应PC+h5移动端的文章管理模块. 在实际的生产环境中,文章投稿.商品上传等操作并不会简单局限于一个text和textarea组成的表单.在实际中, ...

  8. 10天学会phpWeChat——第九天:数据库增、删、改、查(CRUD)操作

    数据库的操作(CRUD)是一个现代化计算机软件的核心,尤其针对web应用软件.虽然在前面的几讲里,我们针对数据库操作大致有了一些了解,但今天我们需要再次强化下. 除了新瓶装老酒,我们今天还引入一个新的 ...

  9. 10天学会phpWeChat——第十天:phpWeChat的会员注册、登录以及微信网页开发

    通过前面的系列教程,我们系统的讲解了phpWeChat从视图端.控制器端到模型端的操作流程:熟悉了phpWeChat的目录结构:掌握了视图端模板如何创建一个丰富的表单和模型端如何操作数据库.这一切都是 ...

随机推荐

  1. JavaScript测试工具比较: QUnit, Jasmine, and Mocha

    1. QUnit A JavaScript Unit Testing framework. QUnit is a powerful, easy-to-use JavaScript unit testi ...

  2. Yosemite系统怎么录制 iOS8设备屏幕

    我一年前一直想要的一个功能,发布时很想用.一直没找到 ,很巧的是今天被测试发现了. 感谢CCTV.自己在这里也记录下: 你好!    在 OS X Yosemite  系统中,QuickTime 支持 ...

  3. java 多线程

    1.继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是 ...

  4. Javascript闭包(狗血剧情,通俗易懂)

    我们先来看一个闭包的函数: function a() { var i = 0; function b() { alert(++i); } return b; } var c = a(); c(); c ...

  5. django使用ldap认证

    pip3 install django-auth-ldap python-ldap urls.py, from app0104 import views urlpatterns = [ url(r'^ ...

  6. 使用USRP探索无线世界 Part 1:USRP从入门到追踪飞机飞行轨迹

    温馨提示:请自觉遵守无线电管理法规,依法设置和使用无线电设备 0×00 前言 USRP是数款流行的SDR硬件中功能和应用都相对成熟的一款产品,从WIFI协议.ZigBee协议.RFID协议.GSM通信 ...

  7. Android开发学习笔记:Intent的简介以及属性的详解【转】

    一.Intent的介绍 Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述 ...

  8. 错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    我们在利用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not found on ...

  9. 1.3 PROGRAM DEVELOPMENT ENVIRONMENT

    1.3 PROGRAM DEVELOPMENT ENVIRONMENT 1.4 WIN32 EXECUTEABLE FILE FORMAT We should also know that compl ...

  10. CSharper~

    昨天晚上开始,重启读clr via c#大计.Jeffery大神的大作基本上没人不推荐的,所以我也抱了很大的期待,希望读完以后对.net的认识能有质的飞跃.争取五月份内读完.昨天看完了第一章,感觉.n ...