通过对 ThinkCMF的框架的学习,这次的内容是在框架自带的门口那个模块下面,Portal下面
我们知道后台编辑文章对应的是AdminPost 下面的add.html
首先我们去改add.html界面
首先我们需要的是去看懂它的表单提交和跳转是怎么设置的
他的方式是 action="{:u('AdminPost/add_post')}"
或者是:href="{:U('AdminPost/index')}"
或者是:href="{:U('AdminPost/add',array('term'=>empty($term['term_id'])?'':$term['term_id']))}"
前面对ThinkCMF框架结构的学习我们知道,对应的add_post 这个方法一定是在application的控制器Controller下面的AdminPostController.class.php里面定义的
当然模块应该是Portal下面的,这是表单提交的,也就是把表单里面的各个输入框,富文本编辑器里面的东西都提交给这个方法处理了
我现在新建了一张表,里面就是专门来放文章的各个来源
对应的数据库是这样的,当然数据库外键什么的就先忽略,因为目前只是学习 不需要记录是谁发的这个文章等userid什么的
CREATE TABLE `zhuanti`(
id int unsigned not null primary key auto_increment COMMENT '编号',
type enum('travel','hotel','food') not null default 'travel' COMMENT '类型',
title varchar(35) not null default '' COMMENT '标题',
recommended tinyint not null default '0' COMMENT '推荐',
istop tinyint not null default '0' COMMENT '置顶',
pubdate varchar(50) not null default '0' COMMENT '发布时间',
keywords varchar(50) not null default '' COMMENT '关键词',
com_source varchar(50) not null default '' COMMENT '机构来源',
zhuanti_content varchar(250) not null default '' COMMENT '专题内容',
imgsrc varchar(500) not null default '' COMMENT '图片地址',
picdomain varchar(500) not null default '' COMMENT '前图片缀地址'
)engine=MyISAM DEFAULT CHARSET=UTF8;
后台发布文章对应的界面如下所示:
因为我的目的很明确,就是只要富文本的编辑器里面的东西,编程纯html页面,而且传给android段的是一个html地址,用webview打开的,
所以这里面其他的东西都可以忽略掉,
然后把 ThinkCMF的验证都去掉,那个东西目前还么有研究,只要这个表单就行
接下来就是需要去重写 add_post方法了
<span style="font-size:18px;"><strong> public function add_post(){ if (IS_POST) { $data['pubdate'] = $_POST['post']['pubdate']; $data['istop'] = $_POST['post']['istop']; $data['recommended'] = $_POST['post']['recommended']; $data['title'] = $_POST['post']['title']; $data['keywords'] = $_POST['post']['keywords']; $data['com_source'] = $_POST['post']['com_source']; $data['zhuanti_content'] = $this->getHTMLurl(); $data['type'] = $_POST['type'][0]; $data['imgsrc'] = implode('|',$_POST['photos_url']); $m = M('Zhuanti'); if($id = $m->data($data)->add()){ // insert into zhuanti (bupdate,istop...)values(值); $this->success('添加成功'); exit(); } $this->error('添加失败 : '.$m->getError()); } }</strong></span>这里面只关心两个东西,
$data['zhuanti_content'] = $this->getHTMLurl();这个里面返回来的就是content对应的html地址
$data['imgsrc'] = implode('|',$_POST['photos_url']);这个是把多张图放在一个字符串里面
自定义的方法是下面这样的
<span style="font-size:18px;"><strong> private function getHTMLurl(){ $content = $_POST['post']['content']; $src = './tpl/html/'.time().'.html'; file_put_contents($src, $content); return $src; }</strong></span>
这里面是什么意思呢,首先获取内容,然后生成相应的html地址,加上时间蹉 保证唯一 其实这里简单了,还需要优化的
然后生成html
<span style="font-size:18px;"><strong> file_put_contents($src, $content);</strong></span>
<span style="font-size:18px;"><strong> </strong></span>
<span style="font-size:18px;"><strong>到这里还没有结束,是会报错的,因为html是需要前台显示的,也就是那个html是见在tpl下面的,那么在application的控制器里面必须要建立一个控制器了</strong></span>
<span style="font-size:18px;"><strong> </strong></span>
<span style="font-size:18px;"><strong><?php namespace Portal\Controller; use Common\Controller\HomeBaseController; class PostController extends HomeBaseController{ public function getHTML(){//这里随便取个什么名字的,无所谓, </strong></span>
<span style="font-size:18px;"><strong>}</strong></span>
<span style="font-size:18px;"><strong>}</strong></span>
<span style="font-size:18px;"><strong> </strong></span>
<span style="font-size:18px;"><strong>就这样结束了,然后是后台接口的编写了,这里先不介绍了</strong></span>