建站学习网,专业提供各类建站教程,网页素材,SEO资讯等建站资源!

网站模板_网站源码_网站素材_建站教程_建站学习网

当前位置:建站学习网 > 建站教程 > PbootCMS教程 >

Pbootcms增加foreach标签指定内容按条件遍历(默认逗号条件)

更新时间:2022-12-16整理编辑:建站学习网阅读:0

二开导读

通过二开新增的这个标签可以实现按指定的字符进行遍历,不填写char参数默认使用逗号进行分割遍历。如下图:

图中想把abcd用竖线进行分割,也可以使用逗号或其他自定义符号

Pbootcms增加foreach标签指定内容按条件遍历(默认逗号条件)

然后前台用新增的标签进行遍历调用

{pboot:foreach str={label:hotkey} char=|}
<a href="/search/?keyword=[foreach:name]" target="_blank" rel="nofollow">[foreach:name]</a>
{/pboot:foreach}


修改步骤

1、打开\apps\home\controller\ParserController.php,搜索“$this->parserReplaceKeyword”,在其下方增加:

$content = $this->parserForeachLabel($content); // 指定随意内容按条件遍历 @pbhtml

Pbootcms增加foreach标签指定内容按条件遍历(默认逗号条件)

2、继续在之前文件里搜索“解析生成内容链接”,在其上方增加:

// 解析指定随意内容遍历,支持设定分隔符 @pbhtml
public function parserForeachLabel($content)
{
    $pattern = '/\{pboot:foreach(\s+[^}]+)?\}([\s\S]*?)\{\/pboot:foreach\}/';
    $pattern2 = '/\[foreach:([\w]+)(\s+[^]]+)?\]/';
    if (preg_match_all($pattern, $content, $matches)) {
        $count = count($matches[0]);
        for ($i = 0; $i < $count; $i ++) {
            // 获取调节参数
            $params = $this->parserParam($matches[1][$i]);
            $str = '';
            $char = ',';
            
            if (! self::checkLabelLevel($params)) {
                $content = str_replace($matches[0][$i], '', $content);
                continue;
            }
            
            // 分离参数
            foreach ($params as $key => $value) {
                switch ($key) {
                    case 'num':
                        $num = $value;
                        break;
                    case 'str':
                        $str = $value;
                        break;
                    case 'char':
                        if ($value) $char = $value;
                        break;
                }
            }

            // 无数据直接替换为空并跳过
            if (! $str) {
                $content = str_replace($matches[0][$i], '', $content);
                continue;
            }
            
            // 匹配到内部标签
            if (preg_match_all($pattern2, $matches[2][$i], $matches2)) {
                $count2 = count($matches2[0]); // 循环内的内容标签数量
            } else {
                $count2 = 0;
            }
            
            $out_html = '';
            $key = 1;
            $arr = explode($char,$str);
            foreach ($arr as $value) { // 按查询图片条数循环
                $one_html = $matches[2][$i];
                for ($j = 0; $j < $count2; $j ++) { // 循环替换数据
                    $params = $this->parserParam($matches2[2][$j]);
                    switch ($matches2[1][$j]) {
                        case 'n':
                            $one_html = str_replace($matches2[0][$j], $this->adjustLabelData($params, $key) - 1, $one_html);
                            break;
                        case 'i':
                            $one_html = str_replace($matches2[0][$j], $this->adjustLabelData($params, $key), $one_html);
                            break;
                        case 'name':
                            $one_html = str_replace($matches2[0][$j], $this->adjustLabelData($params, $value), $one_html);
                            break;
                    }
                }
                $key ++;
                $out_html .= $one_html;
                if (isset($num) && $key > $num) {
                    unset($num);
                    break;
                }
            }
            $content = str_replace($matches[0][$i], $out_html, $content);
        }
    }
    return $content;
}

Pbootcms增加foreach标签指定内容按条件遍历(默认逗号条件)


调用标签

1、默认方式,用逗号进行分割,例如:定制表里填写了a,b,c,然后通过遍历组合生成搜索链接。

{pboot:foreach str={label:hotkey}}
<a href="/search/?keyword=[foreach:name]" target="_blank" rel="nofollow">[foreach:name]</a>
{/pboot:foreach}

2、其他分割符合,使用char参数,如:|

{pboot:foreach str={label:hotkey} char=|}
<a href="/search/?keyword=[foreach:name]" target="_blank" rel="nofollow">[foreach:name]</a>
{/pboot:foreach}

注意事项

二开文件随着在线更新后会消失,在线更新后需要手动重新二开。


本文网址:https://www.dedexuexi.com/jzjc/pbjc/3712.html

本站部分文章搜集与网络,如有侵权请联系本站,转载请说明出处。

标签:foreach
收藏此文 赞一下!() 打赏本站

如本文对您有帮助,就请建站学习网抽根烟吧!

支付宝打赏
微信打赏
Pbootcms修改后台文章显示最大数量
« 上一篇2022年12月15日
Pbootcms中tag标签页分页中url会无限重复叠加的修复方案
2022年12月15日下一篇 »
  • nginx搭建PbootCMS跨域解决方法
    0阅读
    使用nginx搭建PbootCMS项目中,因部分条件因素可能需要跨域,但会报错。解决办法在Nginxlocation里加上如下代码可以解决跨域问题:在Nginx配置文件nginx.conf加入如下代码:location / { # 跨域设置 add_header Acc...
  • PbootCMS水印大小如何设置
    0阅读
    在使用PbootCMS的时候,有时候对水印有特殊需求,比如水印大小,图片水印没有单独设置的地方,需要修改文件来实现。文件位置:core/function/file.php修改如下图
  • PbootCMS使用宝塔环境配置二级目录伪静态
    0阅读
    PbootCMS使用宝塔环境如何配置二级目录伪静态?红色是主站(主站也可以有其余的伪静态规则,替换即可),蓝色是主站下面的子目录,test改为你二级目录名。location/{if(!-e$request_filename){rewrite^(.*)$/index.php?s=/$1last;}}l...
  • PbootCMS解决文章内链重复字段无效的问题
    0阅读
    PbootCMS文章内链功能存在一个小问题,比如内链免费cms跟cms这两个词的时候,设置了免费cms内链后,再去设置cms这个词就会无效,解决这个问题的办法,在apps/home/controller/ParserController.php中,将如下代码删除即可。// 去除包含关系的短tags,...
  • PbootCMS文章内容ID值恢复为1开始
    0阅读
    当SQLite数据库中包含自增列时,会自动建立一个名为sqlite_sequence的表。这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。如果想把某个自增列的序号归零,只需要修改sqlite_sequence表就可以了。用前请备...
 
QQ在线咨询