PbootCMS文章关键词自动添加链接和描述-网站建设-安阳SEO

Jack Cheung

全栈工程师

96%

工作进度

12+

工作经验

¥9K+

RMB/月

当前位置:网站首页 / 网站建设 / PbootCMS文章关键词自动添加链接和描述

PbootCMS文章关键词自动添加链接和描述

作者:安阳SEO / 分类:网站建设 / 日期:2024/02/04

PbootCMS自带文章内链功能,设置内链后,不需要在文章中为关键词添加链接,根据设置的关键词以及外链,全自动添加链接。处于SEO的目的,需要为关键词链接添加链接描述,因此需要对系统文件进行二开,此次需要改动的文件主要有四个,分别为:ParserController.php、ParserModel.php、TagsController.php和tags.html。如果需要链接描述与关键词显示不同的内容,则还需要对数据库中的ay_tags添加相关字段,我会在文章中集中说明。

实现目标:后台新增文章内链,包括关键词+关键词链接+链接描述,更新文章后自动为文章中添加的关键词添加相应链接和链接描述。

首先,需要先对数据库进行添加字段的操作,相对应的表为ay_tags,在表中新增description字段,方法不在阐述,添加后的效果如图。

PbootCMS文章关键词自动添加链接和描述

修改TagsController.php,在代码中添加description的相关代码,由于代码添加位置较多,直接上该文件代码,不同的PbootCMS版本或许略有不同,可参照进行添加。

<?php
/**
 * @copyright (C)2016-2099 Hnaoyun Inc.
 * @author XingMeng
 * @email hnxsh@foxmail.com
 * @date 2019年07月12日
 *  内链链接控制器
 */
namespace appdmincontrollercontent;

use coreasicController;
use appdminmodelcontentTagsModel;

class TagsController extends Controller
{

    private $model;

    public function __construct()
    {
        $this->model = new TagsModel();
    }

    // 文章内链列表
    public function index()
    {
        if ((! ! $id = get('id', 'int')) && $result = $this->model->getTags($id)) {
            $this->assign('more', true);
            $this->assign('tags', $result);
        } else {
            $this->assign('list', true);
            if (! ! ($field = get('field', 'var')) && ! ! ($keyword = get('keyword', 'vars'))) {
                $result = $this->model->findTags($field, $keyword);
            } else {
                $result = $this->model->getList();
            }
            $this->assign('tags', $result);
        }
        $this->display('content/tags.html');
    }

    // 文章内链增加
    public function add()
    {
        if ($_POST) {
            // 获取数据
            $name = post('name');
            $link = post('link');
			$description = post('description');
            
            if (! $name) {
                alert_back('名称不能为空!');
            }
            
            if (! $link) {
                alert_back('链接不能为空!');
            }
			
			if (! $description) {
                alert_back('描述不能为空!');
            }
            
            // 构建数据
            $data = array(
                'acode' => session('acode'),
                'name' => $name,
                'link' => $link,
				'description' => $description,
                'create_user' => session('username'),
                'update_user' => session('username')
            );
            
            // 执行添加
            if ($this->model->addTags($data)) {
                $this->log('新增文章内链成功!');
                if (! ! $backurl = get('backurl')) {
                    success('新增成功!', base64_decode($backurl));
                } else {
                    success('新增成功!', url('/admin/Tags/index'));
                }
            } else {
                $this->log('新增文章内链失败!');
                error('新增失败!', - 1);
            }
        }
    }

    // 文章内链删除
    public function del()
    {
        if (! $id = get('id', 'int')) {
            error('传递的参数值错误!', - 1);
        }
        
        if ($this->model->delTags($id)) {
            $this->log('删除文章内链' . $id . '成功!');
            success('删除成功!', - 1);
        } else {
            $this->log('删除文章内链' . $id . '失败!');
            error('删除失败!', - 1);
        }
    }

    // 文章内链修改
    public function mod()
    {
        if (! $id = get('id', 'int')) {
            error('传递的参数值错误!', - 1);
        }
        
        // 单独修改状态
        if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
            if ($this->model->modTags($id, "$field='$value',update_user='" . session('username') . "'")) {
                location(- 1);
            } else {
                alert_back('修改失败!');
            }
        }
        
        // 修改操作
        if ($_POST) {
            
            // 获取数据
            $name = post('name');
            $link = post('link');
			$description = post('description');
            
            if (! $name) {
                alert_back('名称不能为空!');
            }
            
            if (! $link) {
                alert_back('链接不能为空!');
            }
			
			if (! $description) {
                alert_back('描述不能为空!');
            }
            
            // 构建数据
            $data = array(
                'name' => $name,
                'link' => $link,
				'description' => $description,
                'update_user' => session('username')
            );
            
            // 执行添加
            if ($this->model->modTags($id, $data)) {
                $this->log('修改文章内链' . $id . '成功!');
                if (! ! $backurl = get('backurl')) {
                    success('修改成功!', base64_decode($backurl));
                } else {
                    success('修改成功!', url('/admin/Tags/index'));
                }
            } else {
                location(- 1);
            }
        } else {
            // 调取修改内容
            $this->assign('mod', true);
            if (! $result = $this->model->getTags($id)) {
                error('编辑的内容已经不存在!', - 1);
            }
            $this->assign('tags', $result);
            $this->display('content/tags.html');
        }
    }
}

与此同时,对应的后台HTML文件也需要进行添加相对应的项目,代码如下

{include file='common/head.html'}
<div class="layui-body">
	{if([$list])}
	<div class="layui-tab layui-tab-brief" lay-filter="tab">
	  <ul class="layui-tab-title">
	    <li class="layui-this" lay-id="t1">文章内链列表</li>
	    <li lay-id="t2">文章内链新增</li>
	  </ul>
	  <div class="layui-tab-content">
	  	<div class="layui-tab-item layui-show">
	  		<table class="layui-table">
	  			<thead>
                    <tr>
                    	<th>序号</th>
                        <th>名称</th>
                        <th>链接</th>
                        <th>描述</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    {foreach $tags(key,value)}
                    <tr>
                    	<td>[num]</td>
                        <td>[value->name]</td>
                        <td>[value->link]</td>
                        <td>[value->description]</td>
                        <td>
                            {fun=get_btn_del($value->id)}
                            {fun=get_btn_mod($value->id)}
                        </td>
                    </tr>
                    {/foreach}
                </tbody>
	  		</table>
	  		<div class="page">{$pagebar}</div>
	  	</div>
	  	<div class="layui-tab-item">
	  		 <form action="{url./admin/Tags/add}" method="post" class="layui-form">
	  		 	<input type="hidden" name="formcheck" value="{$formcheck}" > 

                 <div class="layui-form-item">
                     <label class="layui-form-label">名称</label>
                     <div class="layui-input-block">
                     	<input type="text" name="name" required  lay-verify="required" placeholder="请输入名称"  class="layui-input">
                     </div>
                </div>
                
                <div class="layui-form-item">
                     <label class="layui-form-label">链接</label>
                     <div class="layui-input-block">
                     	<input type="text" name="link" required  lay-verify="required" placeholder="请输入链接"  class="layui-input">
                     </div>
                </div>
                <div class="layui-form-item">
                     <label class="layui-form-label">描述</label>
                     <div class="layui-input-block">
                     	<input type="text" name="description" required  lay-verify="required" placeholder="请输入描述"  class="layui-input">
                     </div>
                </div>

                <div class="layui-form-item">
					 <div class="layui-input-block">
					    <button class="layui-btn" lay-submit>立即提交</button>
					    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
					 </div>
				</div>
	  		 </form>
	  	</div>
	  </div>
	</div>
	{/if} 
	
	{if([$mod])}
	<div class="layui-tab layui-tab-brief" lay-filter="tab">
	  <ul class="layui-tab-title">
	    <li class="layui-this">文章内链修改</li>
	  </ul>
	  <div class="layui-tab-content">
	  	<div class="layui-tab-item layui-show">
	  		 <form action="{url./admin/Tags/mod/id/'.[$get.id].'}{$backurl}" method="post" class="layui-form">
	  		 	<input type="hidden" name="formcheck" value="{$formcheck}" > 

                <div class="layui-form-item">
                     <label class="layui-form-label">名称</label>
                     <div class="layui-input-block">
                     	<input type="text" name="name" required  lay-verify="required" value="{$tags->name}" placeholder="请输入名称"  class="layui-input">
                     </div>
                </div>
                
                <div class="layui-form-item">
                     <label class="layui-form-label">链接</label>
                     <div class="layui-input-block">
                     	<input type="text" name="link" required  lay-verify="required" value="{$tags->link}" placeholder="请输入链接"  class="layui-input">
                     </div>
                </div>
                <div class="layui-form-item">
                     <label class="layui-form-label">描述</label>
                     <div class="layui-input-block">
                     	<input type="text" name="description" required  lay-verify="required" value="{$tags->description}" placeholder="请输入描述"  class="layui-input">
                     </div>
                </div>
                 <div class="layui-form-item">
					 <div class="layui-input-block">
					    <button class="layui-btn" lay-submit>立即提交</button>
					    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
					    {fun=get_btn_back()}
					 </div>
				</div>
				
	  		 </form>
	  	</div>
	  </div>
	 </div>
	{/if} 
</div>
{include file='common/foot.html'}

之后,会发现可以通过后台的文章内链功能添加关键词描述了,并可以修改和删除,但浏览前台文章内容页面,会发现并没有变化,这是因为ParserController.php这个文件没有添加相对应的内容的原因,首先打开此文件,搜索 // 执行内链替换 将

// 执行内链替换
                    foreach ($tags as $value) {
                        $data->content = preg_replace('/' . $value->name . '/', '<a href="' . $value->link . '">' . $value->name . '</a>', $data->content, $this->config('content_tags_replace_num') ?: 3);
                    }

替换为

// 执行内链替换
                    foreach ($tags as $value) {
                        $data->content = preg_replace('/' . $value->name . '/', '<a href="' . $value->link . '" title="' . $value->description . '" target="_blank">' . $value->name . '</a>', $data->content, $this->config('content_tags_replace_num') ?: 3);
                    }

此时,浏览内容页面,会发现title=""没有任何内容,这是因为ParserModel.php没有解析description字段的原因,打开此文件,找到 // 文章内链 将

    // 文章内链
    public function getTags()
    {
        return parent::table('ay_tags')->field('name,link')
            ->where("acode='" . get_lg() . "'")
            ->order('length(name) desc')
            ->select();
    }

替换为

    // 文章内链
    public function getTags()
    {
        return parent::table('ay_tags')->field('name,link,description')
            ->where("acode='" . get_lg() . "'")
            ->order('length(name) desc')
            ->select();
    }

从新浏览前台文章内容页面发现一切正常,至此实现文章关键词自动添加链接和描述的目的。如果不需要描述和关键词显示不同的内容,只需要更改ParserController.php的代码即可。

上一篇:新域名和老域名哪个建设网站更好?
给我留言:
提交

谢谢,您的信息已成功发送。我将尽快与您联系!