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]
<?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>
phpcms 移植【添加相关文章】功能的更多相关文章
- php自动添加相关文章
{pc:content action="relation" relation="$relation" id="$id" catid=&quo ...
- 三种dedecms调用相关文章的方法
在文章的末尾或侧边栏添加相关文章可以提高用户的黏度,提高pv,增加se的好印象(哈哈),那么dedecms如何调用相关文章呢?有三种方法可以实现. 第一种dedecms调用相关文章的方法,用默认的li ...
- phpcms 内容——>评论管理 中添加 打开文章链接的 功能
需要实现的功能:在后台管理系统中的 内容 下的——>评论管理 中添加 打开文章链接的 功能 1.数据库表是 v9_comment和v9_comment_data_1. v9_comment是被 ...
- PHPCMS v9在后台文章管理列表添加类别
进入PHPCMS v9后台—内容,进入PHPCMS的文章管理列表,要实现在文章标题前显示文章类别,就是可以直接在文章列表里看到类别,不需要点击进入编辑页面才可以看到,如下图: PHPCMS v9在后台 ...
- openvpn 移植之buildroot添加相关选项
openvpn 移植第一步,在buildroot 内添加 openssl ,openvpn , 另外还有一个 RSA 的支持,我不确定这个需要程度如何,但是也添加进去了. buildroot 添加相关 ...
- [vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件
前言 今天接到领导布置的一个任务,是之前同事负责的项目.离职了,现在客户有些地方需要修改,由于我之前参与过,就落在我的头上了. 然后我就把代码弄了过来,打开发现其中需要用到水晶报表.(我觉得不好用,不 ...
- 基于SpringBoot从零构建博客网站 - 集成editor.md开发发布文章功能
发布文章功能里面最重要的就是需要集成富文本编辑器,目前富文本编辑器有很多,例如ueditor,CKEditor.editor.md等.这里守望博客里面是集成的editor.md,因为editor.md ...
- ZBLOG PHP调用相关文章列表以及上一篇下一篇文章代码
如果是比较小的个人博客.专题类网站项目,老蒋还是比较喜欢使用ZBLOG PHP程序的,无论是轻便度还是易用性上比WordPress简单很多,虽然WP的功能很强大,比如强大的插件和主题丰富功能是当前最为 ...
- 【目录】Newlife XCode组件相关文章目录
本博客所有文章分类的总目录链接:本博客博文总目录-实时更新 1.Newlife XCode组件相关文章目录 1.Newlife XCode组件资源目录汇总[2013年版] 2.Newlife ...
随机推荐
- ini_set("display_errors","On");和error_reporting(E_ALL);
在用php做网站开发的时候 , 为防止用户看到错误信息,而出现的不友好界面.故一般性会在php.ini里设置:display_errors = Off;不过在开发的时候,我们有时候需要打开错误信息.这 ...
- 一次SSIS Package的调试经历
SSIS Package的调试有时是一个非常艰难的过程,由于SSIS 编译器给出的错误信息,可能并不完善,需要程序员根据错误信息抽丝拨茧,寻找错误的根源,进而解决问题. 第一部分:SSIS提供的调试工 ...
- 大型 JavaScript 应用架构中的模式
原文:Patterns For Large-Scale JavaScript Application Architecture by @Addy Osmani 今天我们要讨论大型 JavaScript ...
- mysqldump导出不包含存储过程
mysqldump导出不包含存储过程 mysqldump -u 数据库用户名 -p -n -t -d -R --triggers=false 数据库名 > 文件名 这样单独把存储过程和函数导出 ...
- DOM动态脚本和动态样式
动态脚本 [定义] 在页面加载时不存在,但将来的某一时刻通过修改DOM动态添加的脚本. [方式] [1]插入外部文件方式 var script = document.createElement(&qu ...
- hdu1962Corporative Network带权回路
/* 有N个企业,每个企业想要实现通信,要用线路来连接,线路的长度为abs(a-b)%1000; 如果企业a 链接到了企业b 那么b就是the center of the serving! 然后有两种 ...
- AIX碎碎念
1. 查看系统版本 oslevel 2. 查看系统内存 svmon -G (注意,size的单位为4k) 3. 查看机器型号 uname -Mu 4. 查看机器硬件信息,如cpu,内存等 prtcon ...
- Java多线程系列--“JUC原子类”02之 AtomicLong原子类
概要 AtomicInteger, AtomicLong和AtomicBoolean这3个基本类型的原子类的原理和用法相似.本章以AtomicLong对基本类型的原子类进行介绍.内容包括:Atomic ...
- spring源码分析之spring jmx
JMX架构定义: https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/architecture.html Archi ...
- ASP.NET和IIS工作原理
图为iis6.0运行asp.net的原理. browser向iis发送HTTP请求,HTTP.SYS将其分发给W3SVC(World Wide Web Publishing Service),后者解析 ...