TP6 H5文本正则替换代码预览

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);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值