① 尝试设置一个页面模板
①.)拷贝一个index.php并改名为其它名,如list.php;
php /*
Template Name: 友链
*/
以上两步就可以创建一个页面模板了,修改并保存好这个文件后,创建一个新页面或者修改已存在的页面.在右下边有个"页面模板"的面板,在下拉菜单中选中"友链"后保存就可以了.
然后在页面中添加任何内容,包括html代码就可以显示了.可是我的需求是要自己完成PHP代码获取数据并展示,它不能这么做.
这种方法的自由度较高,并且可以创建非WordPress格式的URL.比如我们要把 转交给主题文件夹下的 /custom/list.php 来处理,就可以用这种方式来处理.这种方法用到 template redirect 钩子,template redirect 是 WordPress 在预处理好所有参数设置之后决定调用主题模板的时候调用的.
在functions.php模板函数文件中添加以下实例代码:
function loadCustomTemplate($template) {
global $wp_query;
if(!file_exists($template))return;
$wp_query-is_page = true;
$wp_query-is_single = false;
$wp_query-is_home = false;
$wp_query-comments = false;
unset($wp_query-query["error"]);
$wp_query-query_vars["error"]="";
}
//load our template
include($template);
exit;
function templateRedirect() {
$basename = basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']);
loadCustomTemplate(TEMPLATEPATH.'/custom/'."/$basename.php");
add_action('template_redirect', 'templateRedirect');
这样就实现了 WordPress 查找 /custom 文件夹下的 php 文件,并且将相匹配的 URL 请求转交给对应的 php 文件来处理的效果,与此同时,这个 php 文件还保持了对 WordPress API 的调用,所以呢留给我们的空间非常大.
此时此刻呢就可以在 /custom 文件夹下自定义一个list.php文件然后通过链接访问.
然后就可以根据需要自己需要来实现自己想要的功能,这里需要有以下几点要处理:
①.)如何操作数据库
WordPress提供了一个全局变量$wpdb,并将其实例化为wpdb类的对象.这样我们就可以直接使用$wpdb来调用所有的数据库操作函数.通过这个$wpdb对象,我们可以对WordPress数据库进行任何操作,包括建表、查询、删除、更新等.使用$wpdb-get_results实现执行sql语句操作数据库,并获取结果.
global $wpdb;
$sql= "SELECT * FROM ".$wpdb-prefix.table;
$a = $wpdb-get_results($sql);
wordpress已经默认支持翻页,格式如:,只要在自定义的页面里面定义好每页返回正确的内容就好啦.
可读性强的URL一定不能是这样的格式,对爬虫也不友好,那就需要配置好rewrite规则,我使用的是nginx的配置为:
到现在为止,离成功只有一步之遥了,那就是新建一个页面, 大功告成!
在 数据表 的基础上 加一个标签表 再加一个数据标签关联表 然后根据数据ID去查找 标签,也可以根据标签 查找出数据
cms提供直接输出、PHP代码体两种方便开发者使用的数据输出接口.
①.、直接输出
返回格式为:
本类型数据内容必须是一个json格式的数组字符串
本类型需要有CMS模板标签的使用经验,直接写标签代码返回结果
例如调用news模块全部数据:
{module module=news} 或者 {list action=module module=news}
模板标签只能写一段,不能写多段
通过以上的list查询方法可调用循环标签的全部数据,当然你可以对结果进行格式化处理,使用回调方法.
这里循环出news模块的全部数据,只显示id,title,再把thumb转换为url地址.
也可以这样写,原理是将输出变量赋值给$api数组:
以上语法格式为:
本类型需要有PHP的开发使用经验,直接将php业务代码写进去
$api变量为直接返回,例如:
$api = '我的自定义返回变量值';
返回截图如下:
也可以自定义强制返回
$api = '我的自定义返回变量值'; PhpcmfService::C()-_json(1, '我的返回脚本成功了', $api); // 成功写法 PhpcmfService::C()-_json(0, '我的返回脚本失败了'); // 失败写法
查看一下代码:
php
//?获取表单提交值
$student_id?=?intval(trim($_POST['student_id']));
//?页面表单?可以放单独的html文件中,如果放单独的html页面中?form?的action的地址要改成下面的PHP文件名
echo?'form?action=""?method="post"
input?type="text"?name="student_id"?value="{$student_id}"/
input?type="submit"?name="submit"?value="查询"/
/form';
//?当有数据提交时
if?($student_id)
{
$con=?mysql_connect("localhost","root","111")?or?die("连接错误");
mysql_select_db("examination",$con);
//?查询
$sql?=?"SELECT?*?FROM?tablename?WHERE?student_id?=?$student_id?";
$res=mysql_query($sql);
$row=mysql_fetch_array($res);
//?输出
echo?'学号:'.$row['student_id'].'br姓名:'.$row['name'].'br性别:'.$row['gender'].'br分数:'.$row['score'];
你是想说百度的实时搜索那样的功能吗?
百度不是用datalist,是根据输入的关键词用AJAX技术到服务器端拿到这个关键词相关的热门搜索再放到一个普通的ul下面,用li循环出来的
而且datalist这个标签很多浏览器不兼容,不建议使用