本站使用PBOOTCMS内核,此文为二次开发记录,以防止今后升级忘记!
一、注意事项
确定需求:首先需要明确二次开发的目的和需求,比如添加新功能、优化用户体验、改进网站布局等。
确定技术方案:根据需求确定合适的技术方案,比如选择合适的前端框架、后端语言等。
数据备份:在进行二次开发之前,务必备份原始网站数据,以防意外情况发生。
修改代码:根据需求对网站代码进行修改,添加新功能或优化现有功能。
测试:在修改完成后,进行全面的测试,确保新功能正常运行且没有影响原有功能。
上线:经过测试确认无误后,将修改后的网站部署上线。
监控和维护:上线后需要定期监控网站运行情况,及时处理出现的问题,并定期进行维护和更新。
用户反馈:收集用户反馈意见,根据用户需求不断优化网站,提升用户体验。
二、二开记录
(一)文章标题查重
1.修改/apps/admin/controller/content/ContentController.php,在// 文章列表 上方加入以下代码!
// 文章标题查重 public function checktitle() { if ($_POST) { $title = post('title'); $id = post('id'); $mcode = post('mcode'); if (!$mcode) { error('传递的模型编码参数有误,请核对后重试!'); } $result = $this->model->findContentAll($mcode,$title); if($result){ success('有重复', - 1); }else{ success('正常', - 1); } } }
2.在apps/admin/view/default/content/content.html中,搜索【内容标题】,大致在195行,内容修改为:
<div class="layui-form-item"> <label class="layui-form-label">内容标题 <span class="layui-text-red">*</span></label> <div class="layui-input-inline" style="width:80%;"> <input type="text" name="title" id="title" required lay-verify="required" placeholder="请输入内容标题" class="layui-input"> </div> <div class="layui-form-mid layui-word-aux" id="email_msg">*</div> </div>
3.在页面底部{include file='common/ueditor.html'}内容前增加如下代码:
<script> $(document).ready(function() { $("input").blur(function() { var $parent = $(this).parent(); $parent.find(".formtips").remove(); if ($(this).is("#title")) { var title = this.value; if (title == "") { $("#email_msg").html("<span class='reg-error' style='display: inline;'>标题不能为空!</span>") } else { $.ajax({ url:"你的后台文件名.php?p=/Content/checktitle/", data:{ "formcheck":'{$formcheck}', "mcode":{$get.mcode}, "title":title, }, type:"POST", dataType:"json", success:function (data) { if (data.data =="有重复") { $("#email_msg").html("<a style='color:red'>"+data.data+"</a>"); }else { $("#email_msg").html("<span style='color:#08a600'>"+data.data+"</span>") } } }) } } }); }); </script>
(二)自动获取TDK、TAG、网站缩略图、网站ICO等信息
1.在apps/admin/view/default/content/content.html中底部加入以下JS代码:
//获取TDK <script> function getTDK(){ var ext_web_domain = document.getElementById('ext_web_domain').value; if(ext_web_domain === ''){ alert('请先输入域名!'); return; } var xhr = new XMLHttpRequest(); xhr.open('POST', '/api/tdk_wd.php', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ var response = JSON.parse(xhr.responseText); if(response.title){ document.getElementById('title').value = response.title; document.getElementById('ext_web_title').value = response.title; document.getElementById('ext_web_kw').value = response.keywords; document.getElementById('ext_jiyu').value = response.description; document.getElementById('ext_web_icp').value = response.icp; document.getElementById('ext_web_ip').value = response.ip; document.getElementById('ext_wangzhi').value = response.url; // 填充网站URL clearTimeout(timeout); // 清除超时计时器 } else { alert('获取TDK信息失败,请检查网址是否正确或网络是否畅通!'); } } }; var timeout = setTimeout(function(){ xhr.abort(); alert('获取TDK信息超时,请检查网址是否正确或网络是否畅通!'); }, 20000); xhr.onerror = function(){ clearTimeout(timeout); alert('获取TDK信息失败,请检查网址是否正确或网络是否畅通!'); }; xhr.send('ext_web_domain=' + ext_web_domain); } //获取ICO function getICO() { var domain = document.getElementById('ext_web_domain').value; // 获取填写的域名 // 判断输入的域名是否包含http://或https://前缀 if (domain.startsWith('http://')) { domain = domain.replace('http://', ''); // 去除http://前缀 } else if (domain.startsWith('https://')) { domain = domain.replace('https://', ''); // 去除https://前缀 } var domainWithoutPath = domain.split('/')[0]; // 去除路径信息,只保留域名部分 var url = '/api/getico.php?url=' + domainWithoutPath; // 调用获取ICO的API fetch(url) .then(response => response.text()) .then(data => { if (data === 'default.ico') { document.getElementById('ext_web_ico').value = 'default.ico'; // 显示默认ICO地址 } else { document.getElementById('ext_web_ico').value = data; // 将ICO地址填写到指定框中 } }) .catch(error => { console.error('Error:', error); }); } //获取缩略图 function getThumbnail() { var domain = document.getElementById('ext_web_domain').value; var requestUrl = "/api/getpic.php?url=" + domain; fetch(requestUrl) .then(response => { if (!response.ok) { throw new Error('获取缩略图失败'); } return response.text(); }) .then(data => { document.getElementById('ico').value = data; alert('获取缩略图成功'); }) .catch(error => { console.error('Error:', error); alert('获取缩略图失败:' + error.message); }); } </script> //获取TAGS <script> document.getElementById('getTagsBtn').addEventListener('click', function(event) { event.preventDefault(); // 阻止默认行为 var title = document.getElementById('title').value; if(title.trim() !== '') { var url = '/api/gettags.php?ext_web_title=' + title; fetch(url) .then(response => response.json()) .then(data => { var tags = data.tags.join(','); // 将标签数组转换为逗号分隔的字符串 document.getElementsByName('tags')[0].value = tags; // 将标签值填充到tags输入框中 }) .catch(error => console.error('Error:', error)); } else { alert('请输入文章标题后再点击获取标签按钮'); } }); </script>
2.apps/admin/view/default/content/content.html中改造输入框增加对应ID
{if($value->mcode==3)} <p style="margin-top:10px;margin-bottom:10px;"><a href="#" onclick=getThumbnail(); return false;" class="custom-button">一键获取缩略图</a></p> {/if}
{if($value->name==ext_web_ico)} <p style="margin-top:10px;"><a href="#" onclick="getICO(); return false;" class="custom-button">获取网站ICO</a></p> {/if}
<p style="margin-top:10px;"><a href="#" id="getTagsBtn" class="custom-button">获取TAGS</a></p>
三、文章数量统计
1.修改/apps/home/controller/ExtLabelController.php 如下:
<?php /** * @copyright (C)2020-2099 Hnaoyun Inc. * @author XingMeng * @email [email protected] * @date 2020年3月8日 * 个人扩展标签可编写到本类中,升级不会覆盖 */ namespace apphomecontroller; use coreasicController; class ExtLabelController { protected $content; /* 必备启动函数 */ public function run($content) { // 接收数据 $this->content = $content; // 执行个人自定义标签函数 $this->test(); // 前台调用文章总数 $this->zmtcount(); // 前台调用留言数量 $this->messsgecount(); // 前台调用投稿数量 $this->tgcount(); // 返回数据 return $this->content; } // 测试扩展单个标签 private function test() { $this->content = str_replace('{pboot:userip}', get_user_ip(), $this->content); } // 前台调用文章总数 private function zmtcount() { $count = coreasicDb::table('ay_content_ext')->count(); $this->content = str_replace('{pboot:zmtcount}', $count, $this->content); } // 前台调用留言数量 private function messsgecount() { $count = coreasicDb::table('ay_message')->count(); $this->content = str_replace('{pboot:messsgecount}', $count, $this->content); } // 前台调用投稿数量 private function tgcount() { $count = coreasicDb::table('ay_diy_tougao')->count(); $this->content = str_replace('{pboot:tgcount}', $count, $this->content); } }
前台使用:{pboot:zmtcount} {pboot:messsgecount} {pboot:tgcount}
四、去除PBOOTCMS描述中有特殊符号%而产生报错
找到/core/function/helper.php,将
$res = $arr[0] % $arr[1];注释掉,完整代码如下
function compareSymbol2($str){ $res = null; $symbol2 = ['%']; foreach ($symbol2 as $items) { if (strpos($str, $items) !== false) { $arr = explode($items, $str); if ($items == '%') { //$res = $arr[0] % $arr[1]; } break; } } if($res === null) { $str = trim($str); $str = trim($str,"'"); $res = (string)$str; } return $res; }
标签: