phpcms 移植【添加相关文章】功能
添加相关文章功能相当有用,移植一个过来基本上可以实现比较复杂的页面内包含分类功能,做二次开发时可以省下不少力气。
用例:如果一个产品,属于一个厂家,而这个厂家是动态添加的,既不是一个分类,而是一个厂家的模型,这二者关联的时候使用这个添加相关的功能可以轻易实现。
学会使用phpcms中的类别管理和推荐位管理基本上可以满足文章管理的多数场景,如果能够理解mysql表的设计,可以使用模型管理这个大杀器,
基本上能够想到的功能都能实现,最后再对【添加相关文章】功能进行设计和移植,模型功能能够再次爆发威力,进行各种关系映射。前台配合ajax和json,以及数据表的query函数可以整合实现相当复杂的功能和页面。
1,模型管理中添加一个万能字段。
然后在表单栏中填写:
<input type='hidden' name='info[rt]' id='rt' value='{FIELD_VALUE}' style='50' >
<ul class="list-dot" id="rt_text"></ul>
<div>
<input type='button' value="添加相关" onclick="omnipotent('selectid','?m=content&c=content&a=public_rtlist&modelid=29','添加相关文章',1)" class="button" style="width:66px;">
<span class="edit_content">
<input type='button' value="显示已有" onclick="show_rt({MODELID},{ID})" class="button" style="width:66px;">
</span>
</div>
注意上面的标红字体,需要和相关参数关联
2,在文章修改页面添加如下函数
function show_rt(modelid,id) {
$.getJSON("?<?php echo "token=".$_SESSION['token'];?>&m=content&c=content&a=rt_getjson_ids&modelid="+modelid+"&id="+id, function(json){
var newrt_ids = '';
if(json==null) {
alert('没有添加相关文章');
return false;
}
$.each(json, function(i, n){
newrt_ids += "<li id='"+n.sid+"'>·<span>"+n.title+"</span><a href='javascript:;' class='close' onclick=\"remove_rt('"+n.sid+"',"+n.id+")\"></a></li>";
});
$('#rt_text').html(newrt_ids);
});
}
//移除相关文章
function remove_rt(sid,id) {
var rt_ids = $('#rt').val();
if(rt_ids !='' ) {
$('#'+sid).remove();
var r_arr = rt_ids.split('|');
var newrt_ids = '';
$.each(r_arr, function(i, n){
if(n!=id) {
if(i==0) {
newrt_ids = n;
} else {
newrt_ids = newrt_ids+'|'+n;
}
}
});
$('#rt').val(newrt_ids);
}
}
3,在content.php中填写如下函数
public function public_rtlist() {
ec_main::get_lib_c('format','',0);
$show_header = '';
$model_cache = getcache('model','commons');
if(!isset($_GET['modelid'])) {
showmessage(L('please_select_modelid'));
} else {
$page = intval($_GET['page']);
$modelid = intval($_GET['modelid']);
$this->db->set_model($modelid);
$where = '';
if($_GET['catid']) {
$catid = intval($_GET['catid']);
$where .= "catid='$catid'";
}
$where .= $where ? ' AND status=99' : 'status=99';
if(isset($_GET['keywords'])) {
$keywords = trim($_GET['keywords']);
$field = $_GET['field'];
if(in_array($field, array('id','title','keywords','description'))) {
if($field=='id') {
$where .= " AND `id` ='$keywords'";
} else {
$where .= " AND `$field` like '%$keywords%'";
}
}
}
$infos = $this->db->listinfo($where,'',$page,12);
$pages = $this->db->pages;
include $this->admin_tpl('rtlist');
}
}
public function rt_getjson_ids() {
$modelid = intval($_GET['modelid']);
$id = intval($_GET['id']);
$this->db->set_model($modelid);
$tablename = $this->db->table_name;
$this->db->table_name = $tablename.'_data';
$r = $this->db->get_one(array('id'=>$id),'rt');
if($r['rt']) {
$rt = str_replace('|', ',', $r['rt']);
$rt = trim($rt,',');
$where = "id IN($rt)";
$infos = array();
$this->db->table_name = 'ec_chang';
$datas = $this->db->select($where,'id,title');
foreach($datas as $_v) {
$_v['sid'] = 'v'.$_v['id'];
if(strtolower(CHARSET)=='gbk') $_v['title'] = iconv('gbk', 'utf-8', $_v['title']);
$infos[] = $_v;
}
echo json_encode($infos);
}
}
5增加模板rtlist.tpl.php[content/tpl]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | <?php defined( 'IN_ADMIN' ) or exit ( 'No permission resources.' ); include $this ->admin_tpl( 'header' , 'admin' ); ?> <div class = "pad-10" > <form name= "searchform" action= "" method= "get" > <input type= "hidden" value= "content" name= "m" > <input type= "hidden" value= "content" name= "c" > <input type= "hidden" value= "public_rtlist" name= "a" > <input type= "hidden" value= "<?php echo $modelid;?>" name= "modelid" > <table width= "100%" cellspacing= "0" class = "search-form" > <tbody> <tr> <td align= "center" > <div class = "explain-col" > <select name= "field" > <option value= 'title' <?php if ( $_GET [ 'field' ]== 'title' ) echo 'selected' ;?>><?php echo L( 'title' );?></option> <option value= 'keywords' <?php if ( $_GET [ 'field' ]== 'keywords' ) echo 'selected' ;?> ><?php echo L( 'keywords' );?></option> <option value= 'description' <?php if ( $_GET [ 'field' ]== 'description' ) echo 'selected' ;?>><?php echo L( 'description' );?></option> <option value= 'id' <?php if ( $_GET [ 'field' ]== 'id' ) echo 'selected' ;?>>ID</option> </select> <?php echo form::select_category( '' , $catid , 'name="catid"' ,L( 'please_select_category' ), $modelid ,0,1);?> <input name= "keywords" type= "text" value= "<?php echo stripslashes($_GET['keywords'])?>" style= "width:330px;" class = "input-text" /> <input type= "submit" name= "dosubmit" class = "button" value= "<?php echo L('search');?>" /> </div> </td> </tr> </tbody> </table> </form> <div class = "table-list" > <table width= "100%" cellspacing= "0" > <thead> <tr> <th ><?php echo L( 'title' );?></th> <th width= "100" ><?php echo L( 'belong_category' );?></th> <th width= "100" ><?php echo L( 'addtime' );?></th> </tr> </thead> <tbody> <?php foreach ( $infos as $r ) { ?> <tr onclick= "select_list(this,'<?php echo safe_replace($r['title']);?>',<?php echo $r['id'];?>)" class = "cu" title= "<?php echo L('click_to_select');?>" > <td align= 'left' ><?php echo $r [ 'title' ];?></td> <td align= 'center' ><?php echo $this ->categorys[ $r [ 'catid' ]][ 'catname' ];?></td> <td align= 'center' ><?php echo format:: date ( $r [ 'inputtime' ]);?></td> </tr> <?php }?> </tbody> </table> <div id= "pages" ><?php echo $pages ;?></div> </div> </div> <style type= "text/css" > .line_ff9966,.line_ff9966:hover td{ background-color:#FF9966; } .line_fbffe4,.line_fbffe4:hover td { background-color:#fbffe4; } </style> <SCRIPT LANGUAGE= "JavaScript" > <!-- function select_list(obj,title,id) { var rt_ids = window.top.$( '#rt' ).val(); var sid = 'v<?php echo $modelid;?>' +id; if ($(obj).attr( 'class' )== 'line_ff9966' || $(obj).attr( 'class' )==null) { $(obj).attr( 'class' , 'line_fbffe4' ); window.top.$( '#' +sid).remove(); if (rt_ids != '' ) { var r_arr = rt_ids.split( '|' ); var newrt_ids = '' ; $.each(r_arr, function (i, n){ if (n!=id) { if (i==0) { newrt_ids = n; } else { newrt_ids = newrt_ids+ '|' +n; } } }); window.top.$( '#rt' ).val(newrt_ids); } } else { $(obj).attr( 'class' , 'line_ff9966' ); var str = "<li id='" +sid+ "'>·<span>" +title+ "</span><a href='javascript:;' class='close' onclick=\"remove_rt('" +sid+ "'," +id+ ")\"></a></li>" ; window.top.$( '#rt_text' ).append(str); if (rt_ids == '' ) { window.top.$( '#rt' ).val(id); } else { rt_ids = rt_ids+ '|' +id; window.top.$( '#rt' ).val(rt_ids); } } } //--> </SCRIPT> </body> </html> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2013-06-01 JS中的对象
2013-06-01 JS 数组
2010-06-01 ASP生成静态文件
2010-06-01 ASP上传漏洞
2010-06-01 winform技巧
2010-06-01 Sql Server 分区演练