CMS:eyoucms
项目需求:一篇文档对应多个栏目
解决思路:
后端:在文档数据表添加一个附属栏目字段fslm_id,在文档编辑,添加页面添加附属栏目选项,获取当前模型对应的所有栏目放入到附属栏目选项中。
后台修改:
1.添加表字段
文档存储数据表:archives
添加数据字段:fslm_id
2.文章文档编辑
控制器:app>admin>controller>Article.php
列表视图:app>admin>template>article>index.htm
编辑视图:app>admin>template>article>edit.htm
添加视图:app>admin>template>article>add.htm
3.产品文档编辑
控制器:app>admin>controller>Product.php
列表视图:app>admin>template>product>index.htm
编辑视图:app>admin>template>product>edit.htm
添加视图:app>admin>template>product>add.htm
//
/5.5版本后台数据列表*/
//
<!-- 附属栏目 -->
<dl class="row">
<dt class="tit">
<label for="title"><em>*</em>附属栏目</label>
</dt>
<dd class="opt">
<select multiple class="form-control" name="fslm_id[]" id="fslm_id">
{$arctype_html}
</select>
</dd>
</dl>
<!-- 附属栏目 -->
Article.php
/**
* 文章列表
*/
public function index(){
//查询所有文档数据
$fslmcx = Db::name('archives')->select();
/*遍历所有附属栏目id */
foreach($fslmcx as $k => $y){
//筛选附属栏目为空的文档
if($y['fslm_id'] != false){
//附属栏目获取反序列化
$fslm_id = unserialize($y['fslm_id']);
// 获取附属栏目id
foreach($fslm_id as $tyid){
//筛选与当前栏目相同附属栏目id
if($typeid == $tyid){
//筛选同栏目下相同文档(重复文档)
if(!($typeid == $y['typeid'])){
//查询组装文档URL
$newids = [$y['aid']];
$row_fslm = Db::name('archives')
->field($fields)
->alias('a')
->join('__ARCTYPE__ b', 'a.typeid = b.id', 'LEFT')
->where('a.aid', 'in', $newids)
->getAllWithIndex('aid');
// 查询栏目列表
$fslm_column = Db::name('arctype')->where('id',$y['typeid'])->select();
// 获取所属栏目名称
$y['typename'] = $fslm_column['0']['typename'];
// 获取文档URL,get_arcurl:自定义函数,可用url()助手函数重新定义
$y['arcurl'] = get_arcurl($row_fslm[$y['aid']]);
//放入$list数组中
$list[] = $y;
}
}
}
}
}
/*附属栏目*/
}
//
/5.5版本前端数据获取*/
//
前端修改:
根据项目需求:首页有多个分类栏目需要展示附属栏目文档
修改文件:
视图:app>template>pc>index.htm
<!-- 获取附属栏目 -->
{php}
$fslmd = [];
foreach ($fslmcx as $ks => $wendang){
if($wendang['fslm_id'] != false){
$fslm_id = unserialize($wendang['fslm_id']);
foreach($fslm_id as $fskms){
if($fskms == $field3['typeid']){
if(!($field3['typeid'] == $wendang['typeid'])){
// 获取文档URL
$wendang['arcurl'] = url('home/View/index','aid='.$wendang['aid']);
$fslmd[] = $wendang;
}
}
}
}
}
{/php}
<!-- 获取附属栏目.end -->
{volist name="fslmd" id="vo" offset="0" length='6'}
<li class="tupian_Column_p cpbk_changdu">
<a href="{$vo.arcurl}"><div><img src="{$vo.litpic}" alt=""></div></a>
<a href="{$vo.arcurl}"><p>{$vo.title}</p></a>
</li>
{/volist}
控制器:app>home>controller>index.php
//查询附属栏目数据
$fslmcx = Db::name('archives')->where('is_recom', '1')->where('lang', 'cn')->select();
$this->assign('fslmcx', $fslmcx);
*5.6版本后不需要另外单独调用前端数据,只需把后台数据调用出来方便后台管理
/**********************/
/5.6版本后台数据列表/
/**********************/
//查询所有文档数据
$fslmcx = Db::name('archives')->select();
// 获取附属栏目文章
foreach($fslmcx as $k => $chanping){
if(!empty($chanping['stypeid'])){
$chanping['stypeid'] = explode(',',$chanping['stypeid']);
foreach($chanping['stypeid'] as $kstypeid => $fushulm){
if($fushulm == $typeid){
$newids = [$chanping['aid']];
$fields = "b.*, a.*, a.aid as aid";
$row_fslm = Db::name('archives')
->field($fields)
->alias('a')
->join('__ARCTYPE__ b', 'a.typeid = b.id', 'LEFT')
->where('a.aid', 'in', $newids)
->getAllWithIndex('aid');
// 查询栏目列表
$fslm_column = Db::name('arctype')->where('id',$chanping['typeid'])->select();
$chanping['typename'] = $fslm_column['0']['typename'];
$chanping['arcurl'] = get_arcurl($row_fslm[$chanping['aid']]);
$list[] = $chanping;
}
}
}
}
/**********************/
//编辑
public function edit(){
//序列化数组
$fslm_id = serialize($post['fslm_id']);
// 存储数据,添加一条记录
$newData = array(
'fslm_id' => $fslm_id,
);
}