完成交叉生成关键词功能
This commit is contained in:
parent
239ffcc1fb
commit
d5dc1bc7dd
|
|
@ -18,7 +18,7 @@
|
||||||
<div class="sbtns">
|
<div class="sbtns">
|
||||||
<button data-lang class="btn" type="submit">查询</button>
|
<button data-lang class="btn" type="submit">查询</button>
|
||||||
<a data-lang class="btn" onclick="ManyKeyWordAdd()">批量添加</a>
|
<a data-lang class="btn" onclick="ManyKeyWordAdd()">批量添加</a>
|
||||||
<a data-lang class="btn" onclick="">交叉生成</a>
|
<a data-lang class="btn" onclick="GenerateKeywords()">交叉生成</a>
|
||||||
<a data-lang class="btn" onclick="">AI联想</a>
|
<a data-lang class="btn" onclick="">AI联想</a>
|
||||||
<a data-lang class="btn" onclick="multiin()">导入</a>
|
<a data-lang class="btn" onclick="multiin()">导入</a>
|
||||||
<a data-lang class="btn" onclick="exportxls()">导出</a>
|
<a data-lang class="btn" onclick="exportxls()">导出</a>
|
||||||
|
|
@ -40,11 +40,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="alert_pagehelp" style="display:none;">
|
<div id="alert_pagehelp" style="display:none;">
|
||||||
<b>标题</b>
|
<b>标题</b>
|
||||||
<div style="margin:0 0 1em 1em">
|
<div style="margin:0 0 1em 1em">
|
||||||
第一行
|
第一行<br />第二行
|
||||||
<br />第二行
|
|
||||||
</div>
|
</div>
|
||||||
<b>标题</b>
|
<b>标题</b>
|
||||||
<ol style="margin:0 0 1em -1em">
|
<ol style="margin:0 0 1em -1em">
|
||||||
|
|
@ -53,11 +53,10 @@
|
||||||
<li>第三行</li>
|
<li>第三行</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="alert_multiin" style="display:none;">
|
<div id="alert_multiin" style="display:none;">
|
||||||
<div style="display:flex;">
|
<div style="display:flex;">
|
||||||
<div>
|
<div><ciy-upload com="file" /></div>
|
||||||
<ciy-upload com="file" />
|
|
||||||
</div>
|
|
||||||
<div style="margin-left:0.3em;">
|
<div style="margin-left:0.3em;">
|
||||||
<a data-lang class="btn btn-sm def" href="/ud/inpl/www_keyword.xlsx" target="_blank">下载导入模板</a><br />
|
<a data-lang class="btn btn-sm def" href="/ud/inpl/www_keyword.xlsx" target="_blank">下载导入模板</a><br />
|
||||||
<div data-lang>每次导入建议不超过1000条</div>
|
<div data-lang>每次导入建议不超过1000条</div>
|
||||||
|
|
@ -71,75 +70,96 @@
|
||||||
<div class="char4 row">
|
<div class="char4 row">
|
||||||
<div class="ciy-form col-24 col-sm-24">
|
<div class="ciy-form col-24 col-sm-24">
|
||||||
<label data-lang class="imp">所属栏目</label>
|
<label data-lang class="imp">所属栏目</label>
|
||||||
<div>
|
<div><ciy-select com="cateid" /></div>
|
||||||
<ciy-select com="cateid" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="ciy-form col-24 col-sm-24">
|
<div class="ciy-form col-24 col-sm-24">
|
||||||
<label data-lang class="imp">关键词</label>
|
<label data-lang class="imp">关键词</label>
|
||||||
<div>
|
<div><input type="text" name="name" style="width:100%;" /></div>
|
||||||
<input type="text" name="name" style="width:100%;" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 新建_批量添加 -->
|
<!-- 批量添加 -->
|
||||||
<div id="alert_batchAdd" style="display:none;">
|
<div id="alert_batchAdd" style="display:none;">
|
||||||
<div style="margin-bottom:10px;">
|
<div style="margin-bottom:10px;">
|
||||||
<label data-lang class="imp">所属栏目</label>
|
<label class="imp">所属栏目</label>
|
||||||
<ciy-select com="batch_cateid" id="batch_cateid" style="width:200px;"></ciy-select>
|
<ciy-select com="batch_cateid" style="width:200px;"></ciy-select>
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-bottom:10px;">
|
<div style="margin-bottom:10px;">
|
||||||
<label data-lang class="imp">关键词</label><br>
|
<label class="imp">关键词</label><br>
|
||||||
<textarea name="batch_names" style="width:100%;height:280px;padding:10px;" placeholder="请一行输入一个关键词,例如:
|
<textarea name="batch_names" style="width:100%;height:280px;padding:10px;" placeholder="请一行输入一个关键词,例如:
|
||||||
手机
|
手机
|
||||||
电脑
|
电脑
|
||||||
耳机
|
耳机"></textarea>
|
||||||
"></textarea>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
<!-- 交叉生成关键词功能 -->
|
||||||
|
<div id="generateKeywords" style="display:none;">
|
||||||
|
<div style="margin-bottom:10px;">
|
||||||
|
<label class="imp">所属栏目</label>
|
||||||
|
<ciy-select com="cross_cateid" style="width:200px;"></ciy-select>
|
||||||
|
</div>
|
||||||
|
<div style="margin-bottom:10px;">
|
||||||
|
<label class="imp">核心词</label><br>
|
||||||
|
<textarea name="cross_dim1" style="width:100%;height:120px;padding:10px;" placeholder="一行一个,例如:
|
||||||
|
手机
|
||||||
|
电脑
|
||||||
|
耳机"></textarea>
|
||||||
|
</div>
|
||||||
|
<div style="margin-bottom:10px;">
|
||||||
|
<label class="imp">修饰词</label><br>
|
||||||
|
<textarea name="cross_dim2" style="width:100%;height:120px;padding:10px;" placeholder="一行一个,例如:
|
||||||
|
新款
|
||||||
|
特价
|
||||||
|
防水
|
||||||
|
无线"></textarea>
|
||||||
|
</div>
|
||||||
|
<div style="margin-bottom:10px;">
|
||||||
|
<label>扩展词</label><br>
|
||||||
|
<textarea name="cross_dim3" style="width:100%;height:80px;padding:10px;" placeholder="一行一个,例如:
|
||||||
|
包邮
|
||||||
|
官方正品
|
||||||
|
2025款"></textarea>
|
||||||
|
</div>
|
||||||
|
<div style="color:#666;">
|
||||||
|
生成规则:维度1 × 维度2 × 维度3,自动去重、过滤空行
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
<script type="text/javascript" src="/jscss/ciy.js"></script>
|
||||||
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
<script type="text/javascript" src="/jscss/ciycmp.js"></script>
|
||||||
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
<script type="text/javascript" src="/jscss/ciytable.js"></script>
|
||||||
<script type="text/javascript" src="../common.js"></script>
|
<script type="text/javascript" src="../common.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
'use strict';
|
'use strict';
|
||||||
var table;
|
var table;
|
||||||
var Glob = {};
|
var Glob = {};
|
||||||
|
|
||||||
ciyfn.pageload(function () {
|
ciyfn.pageload(function () {
|
||||||
table = new ciyclass.table({
|
table = new ciyclass.table({
|
||||||
dom: '.table'
|
dom: '.table',
|
||||||
, url: 'list'
|
url: 'list',
|
||||||
, pagecount: 10
|
pagecount: 10,
|
||||||
, chkbox: true
|
chkbox: true,
|
||||||
, fn_beforedata: function (json) {
|
fn_beforedata: function (json) {
|
||||||
ciyfn.fillsearch({
|
ciyfn.fillsearch({ searchdom: '.search', data: json });
|
||||||
searchdom: '.search'
|
|
||||||
, data: json
|
|
||||||
});
|
|
||||||
return json;
|
return json;
|
||||||
}
|
},
|
||||||
, fn_tdcontent: function (key, datashow, field, data) {
|
fn_tdcontent: function (key, datashow, field, data) {
|
||||||
if (key == '_btn') {
|
if (key == '_btn') {
|
||||||
var html = '';
|
return `<a data-lang class="btn" onclick="menubtn(this, 'edit')">修改</a>`;
|
||||||
html += `<a data-lang class="btn" onclick="menubtn(this, 'edit')">修改</a>`;
|
|
||||||
return html;
|
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
, fn_done: function (json) {
|
fn_done: function (json) {}
|
||||||
// table.mergecol('auditstatus');
|
|
||||||
// table.mergefix('总计', 'center', 6, 0, 8, 1);
|
|
||||||
// table.footertotal();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
table.callpage(1);
|
table.callpage(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
function menubtn(dom, btn) {
|
function menubtn(dom, btn) {
|
||||||
var id = $5(dom).parent('tr').attr('data-id');
|
var id = $5(dom).parent('tr').attr('data-id');
|
||||||
if (btn == 'edit') {
|
if (btn == 'edit') edit(id);
|
||||||
edit(id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getdata(id, act, cb) {
|
function getdata(id, act, cb) {
|
||||||
|
|
@ -149,18 +169,16 @@
|
||||||
function edit(id) {
|
function edit(id) {
|
||||||
getdata(id, 'edit', function (jsndat) {
|
getdata(id, 'edit', function (jsndat) {
|
||||||
ciyfn.alert({
|
ciyfn.alert({
|
||||||
title: '修改'
|
title: '修改',
|
||||||
, width: 'pc'
|
width: 'pc',
|
||||||
, content: document.getElementById("alert_edit").innerHTML
|
content: document.getElementById("alert_edit").innerHTML,
|
||||||
//, noparent:true
|
fn_showed: function (doc, dom) {
|
||||||
, fn_showed: function (doc, dom) {
|
|
||||||
var dat = jsndat.data;
|
var dat = jsndat.data;
|
||||||
ciycmp({ dom: $5('[com=cateid]', dom), value: dat.cateid, range: table.json.www_list_cate });
|
ciycmp({ dom: $5('[com=cateid]', dom), value: dat.cateid, range: table.json.www_list_cate });
|
||||||
$5('[name=name]', dom).val(dat.name);
|
$5('[name=name]', dom).val(dat.name);
|
||||||
}
|
},
|
||||||
, cb: function (opn) {
|
cb: function (opn) {
|
||||||
if (opn.btn == "关闭")
|
if (opn.btn == "关闭") return opn.close();
|
||||||
return opn.close();
|
|
||||||
opn.inputs.id = id;
|
opn.inputs.id = id;
|
||||||
if (ciyfn.throttle(opn.dombtn)) return;
|
if (ciyfn.throttle(opn.dombtn)) return;
|
||||||
ciyfn.callfunc('update', opn.inputs, function (json) {
|
ciyfn.callfunc('update', opn.inputs, function (json) {
|
||||||
|
|
@ -173,6 +191,7 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function multiin() {
|
function multiin() {
|
||||||
ciyfn.table_multiin('importxls', document.getElementById("alert_multiin").innerHTML, function (json) {
|
ciyfn.table_multiin('importxls', document.getElementById("alert_multiin").innerHTML, function (json) {
|
||||||
ciyfn.toast('导入成功');
|
ciyfn.toast('导入成功');
|
||||||
|
|
@ -184,63 +203,82 @@
|
||||||
function exportxls() {
|
function exportxls() {
|
||||||
ciyfn.table_exportxls('exportxls', table, function (json) {
|
ciyfn.table_exportxls('exportxls', table, function (json) {
|
||||||
ciyfn.alert({
|
ciyfn.alert({
|
||||||
content: '<div style="text-align:center;"><span data-lang>导出数据已生成</span><br/><br/><a data-lang class="btn lg" href="' + json.url + '" target="_blank">下载数据</a></div>'
|
content: '<div style="text-align:center;"><span data-lang>导出数据已生成</span><br/><br/><a data-lang class="btn lg" href="' + json.url + '" target="_blank">下载数据</a></div>',
|
||||||
, btns: null
|
btns: null
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function pagehelp() {
|
function pagehelp() {
|
||||||
ciyfn.alert({
|
ciyfn.alert({
|
||||||
title: '页面帮助'
|
title: '页面帮助',
|
||||||
, width: 'pc'
|
width: 'pc',
|
||||||
, content: document.getElementById("alert_pagehelp").innerHTML
|
content: document.getElementById("alert_pagehelp").innerHTML
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量添加
|
// 批量添加
|
||||||
function ManyKeyWordAdd(){
|
function ManyKeyWordAdd() {
|
||||||
ciyfn.alert({
|
ciyfn.alert({
|
||||||
title: '批量添加关键词'
|
title: '批量添加关键词',
|
||||||
, width: 'pc'
|
width: 'pc',
|
||||||
, content: document.getElementById("alert_batchAdd").innerHTML
|
content: document.getElementById("alert_batchAdd").innerHTML,
|
||||||
, fn_showed: function (doc, dom) {
|
fn_showed: function (doc, dom) {
|
||||||
ciycmp({ dom: $5('[com=batch_cateid]', dom), value: 0, range: table.json.www_list_cate });
|
ciycmp({ dom: $5('[com=batch_cateid]', dom), value: 0, range: table.json.www_list_cate });
|
||||||
}
|
},
|
||||||
, cb: function (opn){
|
cb: function (opn) {
|
||||||
if (opn.btn == "关闭") return opn.close();
|
if (opn.btn == "关闭") return opn.close();
|
||||||
|
let cateid = $5('[com=batch_cateid]', opn.dom).val();
|
||||||
let cateid = $5('[com=batch_cateid]', opn.dom).val();
|
let names = $5('[name=batch_names]', opn.dom).val();
|
||||||
let names = $5('[name=batch_names]', opn.dom).val();
|
if (!cateid) { ciyfn.toast('请选择所属栏目'); return; }
|
||||||
console.log("我是cateid:"+cateid);
|
if (!names) { ciyfn.toast('请输入关键词'); return; }
|
||||||
console.log("我是names:"+names);
|
ciyfn.callfunc('BatchAdd', { cateid, names }, function (json) {
|
||||||
|
table.cachecount = -1;
|
||||||
|
table.callpage();
|
||||||
if (!cateid) {
|
opn.close();
|
||||||
ciyfn.toast('请选择所属栏目');
|
ciyfn.toast('批量添加成功');
|
||||||
return;
|
});
|
||||||
}
|
},
|
||||||
if (!names) {
|
btns: ["批量添加", "*关闭"],
|
||||||
ciyfn.toast('请输入关键词');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ciyfn.callfunc('BatchAdd', {
|
|
||||||
cateid: cateid,
|
|
||||||
names: names
|
|
||||||
}, function (json) {
|
|
||||||
table.cachecount = -1;
|
|
||||||
table.callpage();
|
|
||||||
// console.log("php:"+json.data);
|
|
||||||
// console.log("php:"+json.cateid);
|
|
||||||
opn.close();
|
|
||||||
ciyfn.toast('批量添加成功');
|
|
||||||
});
|
});
|
||||||
},
|
}
|
||||||
btns: ["确认批量添加", "*关闭"],
|
|
||||||
});
|
function GenerateKeywords() {
|
||||||
}
|
ciyfn.alert({
|
||||||
|
title: '交叉生成关键词',
|
||||||
|
width: 'pc',
|
||||||
|
content: document.getElementById("generateKeywords").innerHTML,
|
||||||
|
fn_showed: function (doc, dom) {
|
||||||
|
ciycmp({ dom: $5('[com=cross_cateid]', dom), value: 0, range: table.json.www_list_cate });
|
||||||
|
},
|
||||||
|
cb: function (opn) {
|
||||||
|
if (opn.btn == "关闭") return opn.close();
|
||||||
|
|
||||||
|
let cateid = $5('[com=cross_cateid]' , opn.dom).val();
|
||||||
|
let cross_dim1 = $5('[name=cross_dim1]' , opn.dom).val();//核心词
|
||||||
|
let cross_dim2 = $5('[name=cross_dim2]' , opn.dom).val();//修饰词
|
||||||
|
let cross_dim3 = $5('[name=cross_dim3]',opn.dom).val();//扩展词
|
||||||
|
// console.log(cross_dim1);
|
||||||
|
if(!cateid) {ciyfn.toast('请选择所属栏目'); return;}
|
||||||
|
if (!cross_dim1) { ciyfn.toast('请填写核心词'); return; }
|
||||||
|
if (!cross_dim2) { ciyfn.toast('请填写修饰词'); return; }
|
||||||
|
|
||||||
|
ciyfn.callfunc('GenerateKeywords', {
|
||||||
|
cateid : cateid,
|
||||||
|
dim1 : cross_dim1,
|
||||||
|
dim2 : cross_dim2,
|
||||||
|
dim3 : cross_dim3
|
||||||
|
}, function (json) {
|
||||||
|
table.cachecount = -1;
|
||||||
|
table.callpage();
|
||||||
|
opn.close();
|
||||||
|
ciyfn.toast(json.msg);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
btns: ["生成", "*关闭"],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// }
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -160,7 +160,7 @@ class keyword
|
||||||
{
|
{
|
||||||
global $db;
|
global $db;
|
||||||
$rsuser = verifyfast();
|
$rsuser = verifyfast();
|
||||||
//if (nopower($db, $rsuser['id'], 'p e'))
|
//if (nopower($db, $rsuser['id'], 'p e'))a
|
||||||
// return errjson('您未被授权操作');
|
// return errjson('您未被授权操作');
|
||||||
$post = new \ciy\post();
|
$post = new \ciy\post();
|
||||||
list($where, $csql) = self::setwhere($db, $post, $rsuser);
|
list($where, $csql) = self::setwhere($db, $post, $rsuser);
|
||||||
|
|
@ -436,4 +436,96 @@ public static function json_BatchAdd()
|
||||||
return errjson('错误:'.$ex->getMessage());
|
return errjson('错误:'.$ex->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 交叉生成关键词
|
||||||
|
public static function json_GenerateKeywords()
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
$rsuser = verifyfast();
|
||||||
|
$post = new \ciy\post();
|
||||||
|
|
||||||
|
// 获取前端传参
|
||||||
|
$cateid = $post->getint('cateid');
|
||||||
|
$dim1 = trim($post->get('dim1'));
|
||||||
|
$dim2 = trim($post->get('dim2'));
|
||||||
|
$dim3 = trim($post->get('dim3'));
|
||||||
|
|
||||||
|
if ($cateid == 0) {
|
||||||
|
return errjson('请选择所属栏目');
|
||||||
|
}
|
||||||
|
if (empty($dim1) || empty($dim2)) {
|
||||||
|
return errjson('核心词 和 修饰词 不能为空');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转为数组
|
||||||
|
$toArray = function ($text) {
|
||||||
|
$arr = explode("\n", $text);
|
||||||
|
$arr = array_map('trim', $arr);
|
||||||
|
$arr = array_filter($arr);
|
||||||
|
return array_unique($arr);
|
||||||
|
};
|
||||||
|
|
||||||
|
$arr1 = $toArray($dim1);
|
||||||
|
$arr2 = $toArray($dim2);
|
||||||
|
$arr3 = $toArray($dim3);
|
||||||
|
$keywords = [];
|
||||||
|
|
||||||
|
if (!empty($arr3)) {
|
||||||
|
foreach ($arr2 as $a) {
|
||||||
|
foreach ($arr1 as $b) {
|
||||||
|
foreach ($arr3 as $c) {
|
||||||
|
$kw = $a . $b . $c;
|
||||||
|
$keywords[$kw] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
foreach ($arr2 as $a) {
|
||||||
|
foreach ($arr1 as $b) {
|
||||||
|
$kw = $a . $b;
|
||||||
|
$keywords[$kw] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$finalList = array_keys($keywords);
|
||||||
|
$total = count($finalList);
|
||||||
|
$added = 0;
|
||||||
|
|
||||||
|
if ($total == 0) {
|
||||||
|
return errjson('未生成有效关键词');
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
|
foreach ($finalList as $name) {
|
||||||
|
$csql = new \ciy\sql('www_keyword');
|
||||||
|
$csql->where('name', $name);
|
||||||
|
$csql->column = 'id';
|
||||||
|
|
||||||
|
$exists = $db->get1($csql);
|
||||||
|
|
||||||
|
if ($exists) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$insert = [
|
||||||
|
'cateid' => $cateid,
|
||||||
|
'name' => $name,
|
||||||
|
'usetime' => 0,
|
||||||
|
'addtimes' => tostamp()
|
||||||
|
];
|
||||||
|
$db->insert(new \ciy\sql('www_keyword'), $insert);
|
||||||
|
$added++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->commit();
|
||||||
|
return succjson("生成成功:共 {$total} 条,新增 {$added} 条");
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$db->rollback();
|
||||||
|
return errjson("错误:" . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user