seo优化

This commit is contained in:
gongfuxiang 2019-06-02 21:45:10 +08:00
parent c8c4880074
commit 8bda4cb4f6
14 changed files with 178 additions and 73 deletions

View File

@ -52,6 +52,11 @@
<label>内容</label> <label>内容</label>
<textarea class="am-radius am-validate" name="content" rows="5" minlength="10" maxlength="105000" {{if !IsMobile()}}id="editor-tag" data-url="{{:MyUrl('admin/ueditor/index', ['path_type'=>'article'])}}" placeholder="内容长度最少 10~105000 个字符" {{else /}} placeholder="内容长度最少 10~105000 个字符更多编辑功能请使用电脑访问" {{/if}} data-validation-message="内容长度最少 10~105000 个字符" required>{{if !empty($data)}}{{$data.content}}{{/if}}</textarea> <textarea class="am-radius am-validate" name="content" rows="5" minlength="10" maxlength="105000" {{if !IsMobile()}}id="editor-tag" data-url="{{:MyUrl('admin/ueditor/index', ['path_type'=>'article'])}}" placeholder="内容长度最少 10~105000 个字符" {{else /}} placeholder="内容长度最少 10~105000 个字符更多编辑功能请使用电脑访问" {{/if}} data-validation-message="内容长度最少 10~105000 个字符" required>{{if !empty($data)}}{{$data.content}}{{/if}}</textarea>
</div> </div>
<div class="am-alert am-alert-secondary">
{{include file="lib/seo" /}}
</div>
<div class="am-form-group am-form-group-refreshing"> <div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="id" {{if !empty($data)}} value="{{$data.id}}"{{/if}} /> <input type="hidden" name="id" {{if !empty($data)}} value="{{$data.id}}"{{/if}} />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button> <button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>

View File

@ -169,6 +169,15 @@
<dt>访问次数</dt> <dt>访问次数</dt>
<dd>{{$v.access_count}}</dd> <dd>{{$v.access_count}}</dd>
<dt>SEO标题</dt>
<dd>{{$v.seo_title}}</dd>
<dt>SEO关键字</dt>
<dd>{{$v.seo_keywords}}</dd>
<dt>SEO描述</dt>
<dd>{{$v.seo_desc}}</dd>
<dt>创建时间</dt> <dt>创建时间</dt>
<dd>{{$v.add_time}}</dd> <dd>{{$v.add_time}}</dd>

View File

@ -368,14 +368,7 @@
<!-- seo --> <!-- seo -->
<div id="goods-nav-seo" class="division-block"> <div id="goods-nav-seo" class="division-block">
<label class="block nav-detail-title">SEO</label> <label class="block nav-detail-title">SEO</label>
<div class="am-form-group"> {{include file="lib/seo" /}}
<label>SEO关键字<span class="am-form-group-label-tips">一般不超过100个字符多个关键字以半圆角逗号 [ , ] 隔开</span></label>
<input type="text" name="seo_keywords" placeholder="SEO关键字" maxlength="130" data-validation-message="SEO关键字格式 最多130个字符" class="am-radius" {{if !empty($data)}} value="{{$data.seo_keywords}}"{{/if}} />
</div>
<div class="am-form-group">
<label>SEO描述<span class="am-form-group-label-tips">一般不超过200个字符</span></label>
<textarea rows="4" name="seo_desc" maxlength="230" class="am-radius" placeholder="SEO描述" data-validation-message="SEO描述格式 最多230个字符">{{if !empty($data)}}{{$data.seo_desc}}{{/if}}</textarea>
</div>
</div> </div>
<div class="am-form-group am-form-group-refreshing"> <div class="am-form-group am-form-group-refreshing">

View File

@ -97,6 +97,9 @@
<input type="number" placeholder="顺序" name="sort" min="0" max="255" data-validation-message="顺序 0~255 之间的数值" class="am-radius" value="0" required /> <input type="number" placeholder="顺序" name="sort" min="0" max="255" data-validation-message="顺序 0~255 之间的数值" class="am-radius" value="0" required />
</div> </div>
{{include file="lib/enable" /}} {{include file="lib/enable" /}}
<div class="am-alert am-alert-secondary">
{{include file="lib/seo" /}}
</div>
<div class="am-form-group am-form-group-refreshing"> <div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="id" /> <input type="hidden" name="id" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button> <button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
@ -109,7 +112,7 @@
<!-- save win end --> <!-- save win end -->
<!-- list start --> <!-- list start -->
<div id="tree" class="m-t-15" data-rank="3" data-additional='[{"field":"bg_color", "value":"", "type":"input"}, {"field":"bg_color", "value":"", "type":"css", "tag":"button.colorpicker-submit", "style":"background-color"}, {"field":"icon", "value":"", "type":"input"}, {"field":"icon_url", "value":"{{$attachment_host}}/static/admin/default/images/default-images.jpg", "type":"attr", "tag":"ul.goods-category-icon-images-view li img", "style":"src"}, {"field":"big_images", "value":"", "type":"input"}, {"field":"big_images_url", "value":"{{$attachment_host}}/static/admin/default/images/default-images.jpg", "type":"attr", "tag":"ul.goods-category-big_images-images-view li img", "style":"src"}, {"field":"vice_name", "value":"", "type":"input"}, {"field":"describe", "value":"", "type":"textarea"}, {"field":"is_home_recommended", "value":"0", "type":"input"}]'> <div id="tree" class="m-t-15" data-rank="3" data-additional='[{"field":"bg_color", "value":"", "type":"input"}, {"field":"bg_color", "value":"", "type":"css", "tag":"button.colorpicker-submit", "style":"background-color"}, {"field":"icon", "value":"", "type":"input"}, {"field":"icon_url", "value":"{{$attachment_host}}/static/admin/default/images/default-images.jpg", "type":"attr", "tag":"ul.goods-category-icon-images-view li img", "style":"src"}, {"field":"big_images", "value":"", "type":"input"}, {"field":"big_images_url", "value":"{{$attachment_host}}/static/admin/default/images/default-images.jpg", "type":"attr", "tag":"ul.goods-category-big_images-images-view li img", "style":"src"}, {"field":"vice_name", "value":"", "type":"input"}, {"field":"describe", "value":"", "type":"textarea"}, {"field":"is_home_recommended", "value":"0", "type":"input"}, {"field":"seo_title", "value":"", "type":"input"}, {"field":"seo_keywords", "value":"", "type":"input"}, {"field":"seo_desc", "value":"", "type":"textarea"}]'>
<div class="m-t-30 t-c"> <div class="m-t-30 t-c">
<img src="{{$attachment_host}}/static/common/images/loading.gif" /> <img src="{{$attachment_host}}/static/common/images/loading.gif" />
<p>处理中...</p> <p>处理中...</p>

View File

@ -0,0 +1,12 @@
<div class="am-form-group">
<label>SEO标题<span class="am-form-group-label-tips">一般不超过80个字符</span></label>
<input type="text" name="seo_title" placeholder="SEO标题" maxlength="100" data-validation-message="SEO标题格式 最多80个字符" class="am-radius" {{if !empty($data['seo_title'])}} value="{{$data.seo_title}}"{{/if}} />
</div>
<div class="am-form-group">
<label>SEO关键字<span class="am-form-group-label-tips">一般不超过100个字符多个关键字以半圆角逗号 [ , ] 隔开</span></label>
<input type="text" name="seo_keywords" placeholder="SEO关键字" maxlength="130" data-validation-message="SEO关键字格式 最多130个字符" class="am-radius" {{if !empty($data['seo_keywords'])}} value="{{$data.seo_keywords}}"{{/if}} />
</div>
<div class="am-form-group">
<label>SEO描述<span class="am-form-group-label-tips">一般不超过200个字符</span></label>
<textarea rows="4" name="seo_desc" maxlength="230" class="am-radius" placeholder="SEO描述" data-validation-message="SEO描述格式 最多230个字符">{{if !empty($data['seo_desc'])}}{{$data.seo_desc}}{{/if}}</textarea>
</div>

View File

@ -38,8 +38,8 @@
<!-- plugins config start --> <!-- plugins config start -->
{{if !empty($data['element'])}} {{if !empty($data['element'])}}
<div class="plugins-element"> <div class="am-alert am-alert-secondary">
<p class="tips">该区域为插件配置填写项,请按照插件文档填写相应的值。</p> <label class="am-text-sm am-text-warning">该区域为插件配置填写项,请按照插件文档填写相应的值。</label>
{{foreach $data.element as $element}} {{foreach $data.element as $element}}
<div class="am-form-group"> <div class="am-form-group">
<label class="block">{{$element.title}}</label> <label class="block">{{$element.title}}</label>

View File

@ -48,7 +48,7 @@ class Article extends Common
$id = input('id'); $id = input('id');
$params = [ $params = [
'where' => ['a.is_enable'=>1, 'a.id'=>$id], 'where' => ['a.is_enable'=>1, 'a.id'=>$id],
'field' => 'a.id,a.title,a.title_color,a.jump_url,a.content,a.access_count,a.article_category_id,a.add_time', 'field' => 'a.id,a.title,a.title_color,a.jump_url,a.content,a.access_count,a.article_category_id,seo_title,seo_keywords,seo_desc,a.add_time',
'm' => 0, 'm' => 0,
'n' => 1, 'n' => 1,
]; ];
@ -64,13 +64,22 @@ class Article extends Common
return redirect($article['data'][0]['jump_url']); return redirect($article['data'][0]['jump_url']);
} }
// 浏览器标题
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle($article['data'][0]['title']));
// 获取分类和文字 // 获取分类和文字
$article_category_content = ArticleService::ArticleCategoryListContent(); $article_category_content = ArticleService::ArticleCategoryListContent();
$this->assign('category_list', $article_category_content['data']); $this->assign('category_list', $article_category_content['data']);
// seo
$seo_title = empty($article['data'][0]['seo_title']) ? $article['data'][0]['title'] : $article['data'][0]['seo_title'];
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle($seo_title, 2));
if(!empty($article['data'][0]['seo_keywords']))
{
$this->assign('home_seo_site_keywords', $article['data'][0]['seo_keywords']);
}
if(!empty($article['data'][0]['seo_desc']))
{
$this->assign('home_seo_site_description', $article['data'][0]['seo_desc']);
}
$this->assign('article', $article['data'][0]); $this->assign('article', $article['data'][0]);
return $this->fetch(); return $this->fetch();
} else { } else {

View File

@ -78,14 +78,15 @@ class Goods extends Common
$this->assign('goods', $ret['data'][0]); $this->assign('goods', $ret['data'][0]);
// seo // seo
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle($ret['data'][0]['title'], 2)); $seo_title = empty($ret['data'][0]['seo_title']) ? $ret['data'][0]['title'] : $ret['data'][0]['seo_title'];
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle($seo_title, 2));
if(!empty($ret['data'][0]['seo_keywords'])) if(!empty($ret['data'][0]['seo_keywords']))
{ {
$this->assign('home_seo_site_keywords', SeoService::BrowserSeoTitle($ret['data'][0]['seo_keywords'], 2)); $this->assign('home_seo_site_keywords', $ret['data'][0]['seo_keywords']);
} }
if(!empty($ret['data'][0]['seo_desc'])) if(!empty($ret['data'][0]['seo_desc']))
{ {
$this->assign('home_seo_site_description', SeoService::BrowserSeoTitle($ret['data'][0]['seo_desc'], 2)); $this->assign('home_seo_site_description', $ret['data'][0]['seo_desc']);
} }
// 二维码 // 二维码

View File

@ -68,19 +68,44 @@ class Search extends Common
// 参数 // 参数
$this->assign('params', $this->params); $this->assign('params', $this->params);
// 浏览器名称 // seo
if(!empty($this->params['category_id'])) $this->SetSeo();
{
$seo_name = GoodsService::GoodsCategoryValue($this->params['category_id'], 'name', '商品搜索');
} else {
$seo_name = empty($this->params['wd']) ? '商品搜索' : $this->params['wd'];
}
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle($seo_name, 1));
return $this->fetch(); return $this->fetch();
} }
} }
/**
* seo设置
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-06-02T21:29:04+0800
*/
private function SetSeo()
{
$seo_title = $this->params['wd'];
if(!empty($this->params['category_id']))
{
$category = GoodsService::GoodsCategoryRow(['id'=>$this->params['category_id'], 'field'=>'name,seo_title,seo_keywords,seo_desc']);
if(!empty($category))
{
$seo_title = empty($category['seo_title']) ? $category['name'] : $category['seo_title'];
// 关键字和描述
if(!empty($category['seo_keywords']))
{
$this->assign('home_seo_site_keywords', $category['seo_keywords']);
}
if(!empty($category['seo_desc']))
{
$this->assign('home_seo_site_description', $category['seo_desc']);
}
}
}
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle(empty($seo_title) ? '商品搜索' : $seo_title, 1));
}
/** /**
* 参数初始化 * 参数初始化
* @author Devil * @author Devil

View File

@ -181,6 +181,27 @@ class ArticleService
'checked_data' => '10,105000', 'checked_data' => '10,105000',
'error_msg' => '内容 10~105000 个字符', 'error_msg' => '内容 10~105000 个字符',
], ],
[
'checked_type' => 'length',
'key_name' => 'seo_title',
'checked_data' => '100',
'is_checked' => 1,
'error_msg' => 'SEO标题格式 最多100个字符',
],
[
'checked_type' => 'length',
'key_name' => 'seo_keywords',
'checked_data' => '130',
'is_checked' => 1,
'error_msg' => 'SEO关键字格式 最多130个字符',
],
[
'checked_type' => 'length',
'key_name' => 'seo_desc',
'checked_data' => '230',
'is_checked' => 1,
'error_msg' => 'SEO描述格式 最多230个字符',
],
]; ];
$ret = ParamsChecked($params, $p); $ret = ParamsChecked($params, $p);
if($ret !== true) if($ret !== true)
@ -203,6 +224,9 @@ class ArticleService
'image_count' => count($image), 'image_count' => count($image),
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0, 'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
'is_home_recommended' => isset($params['is_home_recommended']) ? intval($params['is_home_recommended']) : 0, 'is_home_recommended' => isset($params['is_home_recommended']) ? intval($params['is_home_recommended']) : 0,
'seo_title' => empty($params['seo_title']) ? '' : $params['seo_title'],
'seo_keywords' => empty($params['seo_keywords']) ? '' : $params['seo_keywords'],
'seo_desc' => empty($params['seo_desc']) ? '' : $params['seo_desc'],
]; ];
if(empty($params['id'])) if(empty($params['id']))

View File

@ -130,7 +130,7 @@ class GoodsService
public static function GoodsCategoryList($where = []) public static function GoodsCategoryList($where = [])
{ {
$where['is_enable'] = 1; $where['is_enable'] = 1;
$field = 'id,pid,icon,name,vice_name,describe,bg_color,big_images,sort,is_home_recommended'; $field = 'id,pid,icon,name,vice_name,describe,bg_color,big_images,sort,is_home_recommended,seo_title,seo_keywords,seo_desc';
$data = Db::name('GoodsCategory')->field($field)->where($where)->order('sort asc')->select(); $data = Db::name('GoodsCategory')->field($field)->where($where)->order('sort asc')->select();
return self::GoodsCategoryDataDealWith($data); return self::GoodsCategoryDataDealWith($data);
} }
@ -998,6 +998,13 @@ class GoodsService
'key_name' => 'buy_min_number', 'key_name' => 'buy_min_number',
'error_msg' => '请填写有效的最低起购数量', 'error_msg' => '请填写有效的最低起购数量',
], ],
[
'checked_type' => 'length',
'key_name' => 'seo_title',
'checked_data' => '100',
'is_checked' => 1,
'error_msg' => 'SEO标题格式 最多100个字符',
],
[ [
'checked_type' => 'length', 'checked_type' => 'length',
'key_name' => 'seo_keywords', 'key_name' => 'seo_keywords',
@ -1070,6 +1077,7 @@ class GoodsService
'home_recommended_images' => $attachment['data']['home_recommended_images'], 'home_recommended_images' => $attachment['data']['home_recommended_images'],
'brand_id' => isset($params['brand_id']) ? intval($params['brand_id']) : 0, 'brand_id' => isset($params['brand_id']) ? intval($params['brand_id']) : 0,
'video' => $attachment['data']['video'], 'video' => $attachment['data']['video'],
'seo_title' => empty($params['seo_title']) ? '' : $params['seo_title'],
'seo_keywords' => empty($params['seo_keywords']) ? '' : $params['seo_keywords'], 'seo_keywords' => empty($params['seo_keywords']) ? '' : $params['seo_keywords'],
'seo_desc' => empty($params['seo_desc']) ? '' : $params['seo_desc'], 'seo_desc' => empty($params['seo_desc']) ? '' : $params['seo_desc'],
]; ];
@ -2002,7 +2010,7 @@ class GoodsService
$id = isset($params['id']) ? intval($params['id']) : 0; $id = isset($params['id']) ? intval($params['id']) : 0;
// 获取数据 // 获取数据
$field = 'id,pid,icon,name,sort,is_enable,bg_color,big_images,vice_name,describe,is_home_recommended'; $field = 'id,pid,icon,name,sort,is_enable,bg_color,big_images,vice_name,describe,is_home_recommended,seo_title,seo_keywords,seo_desc';
$data = Db::name('GoodsCategory')->field($field)->where(['pid'=>$id])->order('sort asc')->select(); $data = Db::name('GoodsCategory')->field($field)->where(['pid'=>$id])->order('sort asc')->select();
if(!empty($data)) if(!empty($data))
{ {
@ -2052,6 +2060,27 @@ class GoodsService
'is_checked' => 1, 'is_checked' => 1,
'error_msg' => '描述格式 最多200个字符', 'error_msg' => '描述格式 最多200个字符',
], ],
[
'checked_type' => 'length',
'key_name' => 'seo_title',
'checked_data' => '100',
'is_checked' => 1,
'error_msg' => 'SEO标题格式 最多100个字符',
],
[
'checked_type' => 'length',
'key_name' => 'seo_keywords',
'checked_data' => '130',
'is_checked' => 1,
'error_msg' => 'SEO关键字格式 最多130个字符',
],
[
'checked_type' => 'length',
'key_name' => 'seo_desc',
'checked_data' => '230',
'is_checked' => 1,
'error_msg' => 'SEO描述格式 最多230个字符',
],
]; ];
$ret = ParamsChecked($params, $p); $ret = ParamsChecked($params, $p);
if($ret !== true) if($ret !== true)
@ -2079,6 +2108,9 @@ class GoodsService
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0, 'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
'icon' => $attachment['data']['icon'], 'icon' => $attachment['data']['icon'],
'big_images' => $attachment['data']['big_images'], 'big_images' => $attachment['data']['big_images'],
'seo_title' => empty($params['seo_title']) ? '' : $params['seo_title'],
'seo_keywords' => empty($params['seo_keywords']) ? '' : $params['seo_keywords'],
'seo_desc' => empty($params['seo_desc']) ? '' : $params['seo_desc'],
]; ];
// 父级id宇当前id不能相同 // 父级id宇当前id不能相同
@ -2163,21 +2195,5 @@ class GoodsService
} }
return DataReturn('删除失败', -100); return DataReturn('删除失败', -100);
} }
/**
* 获取商品分类字段字段数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-06-02T01:51:31+0800
* @param [int] $category_id [商品分类id]
* @param [string] $field [指定字段值]
* @param [string] $default [默认值]
*/
public static function GoodsCategoryValue($category_id, $field, $default = null)
{
$value = Db::name('GoodsCategory')->where(['id'=>intval($category_id)])->value($field);
return ($value === null) ? $default : $value;
}
} }
?> ?>

File diff suppressed because one or more lines are too long

View File

@ -565,3 +565,10 @@ table.am-table .am-btn-danger:hover {
#tree table.am-table td button.am-btn { #tree table.am-table td button.am-btn {
vertical-align: unset; vertical-align: unset;
} }
/**
* 警告框下表单最后一个去掉虚线
*/
.am-alert .am-form-group:last-child {
border-bottom: 0;
}

View File

@ -5,9 +5,3 @@ table.am-table .th-desc { width: 20%; }
table.am-table .td-desc, table.am-table .td-version { font-size: 12px; } table.am-table .td-desc, table.am-table .td-version { font-size: 12px; }
table.am-table .td-version { color: #d2364c; margin: 0; } table.am-table .td-version { color: #d2364c; margin: 0; }
.am-form-file input[type="file"] { margin-top: 0; } .am-form-file input[type="file"] { margin-top: 0; }
/**
* 插件部分
*/
.plugins-element { border: 1px dotted #FFC107; background: #fffcf2; padding: 10px 10px 0 10px; margin-bottom: 10px; border-radius: 2px; }
.plugins-element .tips { color: #FF9800; margin: 0 0 10px 0; font-size: 12px; }