以下是一个简单的 Typecho 接口插件的示例代码:
创建一个名为 api.php 的文件,并将其放置在 Typecho 的插件目录中。
在 api.php 文件中,添加插件的头文件和插件类定义:
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
require_once 'ApiHandler.php';
class ApiPlugin implements Typecho_Plugin_Interface
{
public static function activate() {
// 插件激活时执行的操作
}
public static function deactivate() {
// 插件停用时执行的操作
}
public static function config(Typecho_Widget_Helper_Form $form) {
// 插件设置页面的表单
}
public static function personalConfig(Typecho_Widget_Helper_Form $form) {
// 插件个人设置页面的表单
}
public static function handle() {
// 处理接口请求
$handler = new ApiHandler();
$handler->handleRequest();
}
}
?>
在上面的代码中,ApiHandler 是我们将要创建的接口处理类,处理客户端请求并返回结果。
创建一个名为 ApiHandler.php 的文件,并将其放置在插件目录下。
在 ApiHandler.php 文件中,添加代码以处理客户端请求:
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
class ApiHandler
{
public function handleRequest() {
// 处理客户端请求
switch ($_REQUEST['action']) {
case 'get_post':
$this->getPost();
break;
case 'get_page':
$this->getPage();
break;
default:
$this->returnError('Invalid action');
}
}
private function getPost() {
// 获取文章数据
$pid = $_REQUEST['pid'];
$post = Typecho_Widget::widget('Widget_Abstract_Contents')->filter('cid=' . $pid)->create();
if (empty($post)) {
$this->returnError('Post not found');
} else {
$data = array(
'title' => htmlspecialchars($post->title),
'content' => $post->content,
'date' => $post->date->format('Y-m-d H:i:s')
);
$this->returnData($data);
}
}
private function getPage() {
// 获取页面数据
$pid = $_REQUEST['pid'];
$page = Typecho_Widget::widget('Widget_Abstract_Contents')->filter('cid=' . $pid)->create();
if (empty($page)) {
$this->returnError('Page not found');
} else {
$data = array(
'title' => htmlspecialchars($page->title),
'content' => $page->content,
'date' => $page->date->format('Y-m-d H:i:s')
);
$this->returnData($data);
}
}
private function returnData($data) {
// 返回正常响应
header('Content-Type: application/json');
echo json_encode($data);
exit;
}
private function returnError($errorMsg) {
// 返回错误响应
header('Content-Type: application/json');
echo json_encode(array('error' => $errorMsg));
exit;
}
}
?>
在这个代码中,我们定义了处理客户端请求的 ApiHandler 类,它有三个私有方法:
getPost():获取文章数据。
getPage():获取页面数据。
returnData():返回正常响应。
returnError():返回错误响应。
这个插件提供了两个 API:
get_post:获取指定 ID 的文章数据。
get_page:获取指定 ID 的页面数据。
最后,在 Typecho 的插件管理页面激活该插件即可。现在,可以使用下面的代码从客户端调用这些 API:
// 获取文章数据
$.ajax({
url: '/api.php',
type: 'GET',
data: {
action: 'get_post',
pid: 1
},
dataType: 'json',
success: function(data) {
console.log(data);
},
error: function(xhr, status, error) {
console.error(error);
}
});
// 获取页面数据
$.ajax({
url: '/api.php',
type: 'GET',
data: {
action: 'get_page',
pid: 1
},
dataType: 'json',
success: function(data) {
console.log(data);
},
error: function(xhr, status, error) {
console.error(error);
}
});
上面的代码将获取 ID 为 1 的文章和页面的数据。注意,为了简洁起见,这里我们直接返回了整个文章或页面的内容,你可以根据需要对返回数据进行调整。