TP6 H5文本正则替换代码预览
功能描叙
1.编写脚本对静态页面内容进行更新
2.需要定时更新页面数据:每隔30分钟更新一次
1.页面1
URL:/top
修改:底部加上:小说推荐外链到言情最新页面】调用40本言情最新
更新文件数:1
2.页面2
URL:/Palm
修改:底部的最新资讯替换为全库最新小说。三列排列,每列20本,一共调用60本
更新文件数:21636
3.页面3
URL:/item/16084327943
修改:底部品牌标签换成:精选小说,调用短篇、古代、都市各20本
更新文件数:101931
<?php
namespace app\command;
use app\index\model\BookModel;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\Output;
class CustomReplace2291 extends Command
{
protected function configure()
{
$this->setName('custom-replace-2291')
->addArgument('htmlType', Argument::REQUIRED, "things you need")
->setDescription('To replace!');
}
protected function execute(Input $input, Output $output)
{
$html_type = $input->getArgument('htmlType');
$t1 = time();
switch ($html_type) {
case 'top':
$this->topHtmlReplace();
$output->writeln("完成top.html页面替换");
break;
case 'palm':
$this->palmHtmlReplace();
$output->writeln("完成palm.html页面替换");
break;
case 'item':
$this->itemHtmlReplace();
$output->writeln("完成item文件*.html页面替换");
break;
case 'all':
$this->topHtmlReplace();
$this->palmHtmlReplace();
$this->itemHtmlReplace();
$output->writeln("完成项目所有html页面替换");
}
$t2 =time();
$output->writeln("[总耗时]: " . ($t2-$t1) . '.s');
}
/*
* 获取书本限制列表
*/
private function getBookData($clss_id = 'all', $limit = 10, $is_new = false)
{
return (new BookModel)
->field('id,book_name,seo_title')
->when($clss_id != 'all', function ($q) use ($clss_id) {
$q->where('class_id', $clss_id);
})
->when($is_new, function ($q) {
$q->order('update_time', 'desc');
})
->limit($limit)
->select()
->toArray();
}
/**
* top.html 替换
* 1.读取文件
* 2.组合需要插入的内容 -- 言情小说40本
* 3.匹配替换字符串
* 4.写入内容
*/
private function topHtmlReplace()
{
//1.读取文件
$html_path = app()->getRootPath() . 'html/htmlold/top.html';
$html_str = file_get_contents($html_path);
//2.需要插入的内容 -- 言情小说40本
$book = $this->getBookData(1, 40, true);
$sstr = '<div class="toprow" id="book_recommend">
<ul>
<li><span class="first"><a id="class_id_1" href="'. getClassUrl(1, '最新') .'" target="_blank" title="'. '小说' .'" >【小说推荐】»
</a></span></li>' . "\r\n";
foreach ($book as $value) {
$sstr.= '<li><span>
<a target="_blank" title="'. $value['book_name'] .'小说" href="'. getBookUrl($value['id']) .'">'. $value['book_name'] .'</a>
</span></li>' . "\r\n";
}
$sstr.= '</ul>
</div>';
//3.匹配字符串
$regular = '/<div class="toprow" id="book_recommend"([\s\S]*)<\/div>/U';
if (!preg_match($regular, $html_str)) { //是否进行第一次插入
$s_matching = '</div>
</div>
<div class="clearfix"></div>';
//$s_len = strlen($s);
$location = strripos($html_str,$s_matching); // 获取匹配字符串在文章中的位置
// 插入
$html_str = substr($html_str,0,$location + 0).$sstr.substr($html_str,$location);
} else {
$html_str = preg_replace($regular, $sstr, $html_str);
}
//4.写入内容
file_put_contents($html_path , $html_str);
}
/**
* Palm.html 替换
* 1.读取文件夹下所有文件名称,除top.html外的文件
* 2.组合需要插入的内容 -- 全库最新小说,三列排列,每列20本,一共调用60本
* 3.读取文件
* 3.匹配替换字符串
* 4.写入内容
*/
private function palmHtmlReplace()
{
//1.读取文件夹下所有文件名称,除top.html外的文件
$html_files_path = glob(app()->getRootPath() . 'html/htmlold/*.html');
//2.组合需要插入的内容 -- 全库最新小说,三列排列,每列20本,一共调用60本
$sstr = '<div class="list-con" id="all_new_book_60">
<div class="list-con-new">全库最新小说</div>
<ul>';
$book = $this->getBookData('all', 60, true); //获取全部小说60本
$bookArr = array_chunk($book, 20);
foreach ($bookArr as $v1) {
$sstr.='<li>' . "\r\n";
foreach ($v1 as $v) {
$sstr.= '<p><a target="_blank" title="'. $v['book_name'] .'小说" href="'. getBookUrl($v['id']) .'">'. $v['book_name'] .'</a></p>' . "\r\n";
}
$sstr.='</li>' . "\r\n";
}
$sstr .='</ul>
</div>';
foreach ($html_files_path as $html_path) {
if (strstr($html_path , 'top.html')) {
continue;
}
//3.读取文件
$html_str = file_get_contents($html_path);
//4.替换匹配的内容
$regular = '/<ul style="">[\s\S]*?<\/ul>/';
if (!preg_match($regular, $html_str)) {
$regular = '/<div class="list-con" id="all_new_book_60">[\s\S]*?<\/div>[\s\S]*?<\/div>/';
}
$html_str = preg_replace($regular, $sstr, $html_str);
//5.写入内容
file_put_contents($html_path , $html_str);
//echo($html_path . '完成替换' . PHP_EOL);
}
}
/**
* item.html 替换
* 1.读取item文件夹下的html文件名
* 2.组合需要插入的内容 -- 底部品牌标签换成:精选小说,调用短篇、古代、都市各20本。
* 3.循环读取文件
* 4.匹配替换字符串
* 5.写入内容
*/
private function itemHtmlReplace()
{
//1.读取item文件夹下的html文件名
$html_files_path = glob(app()->getRootPath() . 'html/htmlold/item/*.html');
//2.组合需要插入的内容 -- 底部品牌标签换成:精选小说,调用短篇、古代、都市各20本。
$ya_book = $this->getBookData(2, 20, true);
$gu_book = $this->getBookData(3, 20, true);
$cs_book = $this->getBookData(4, 20, true);
$book = array_merge($ya_book, $gu_book, $cs_book);
$sstr = '<div class="tags">精选小说:' . "\r\n";
foreach ($book as $value) {
$sstr .= '<a href="'. getBookUrl($value['id']) .'" title="'. $value['book_name'] .'小说" target="_blank">'. $value['book_name'] .'</a>';
$sstr .= "\r\n";
}
$sstr .= '</div>';
foreach ($html_files_path as $html_path) {
//3.读取文件
$html_str = file_get_contents($html_path);
//4.匹配替换字符串
$regular = '/<div class="tags">([\s\S]*)<\/div>/U';
$html_str = preg_replace($regular, $sstr, $html_str);
//5.写入内容
file_put_contents( $html_path , $html_str);
//echo($html_path . '完成替换' . PHP_EOL);
}
}
}