服务器之家:专注于服务器技术及软件下载分享
分类导航

DEDECMS|帝国CMS|Discuz|PHPCMS|Wordpress|ZBLOG|ECSHOP|苹果CMS|极致CMS|CMS系统|

服务器之家 - 建站程序 - CMS系统 - pbootcms增加foreach标签指定内容按条件遍历

pbootcms增加foreach标签指定内容按条件遍历

2023-05-07 21:01未知服务器之家 CMS系统

通过二开新增的这个标签可以实现按指定的字符进行遍历,不填写char参数默认使用逗号进行分割遍历。如下图: 图中想把abcd用竖线进行分割,也可以使用逗号或其他自定义符号 然后前台用新增的标签进行遍历调用 {pboot:foreachst

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

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

pbootcms增加foreach标签指定内容按条件遍历pbootcms增加foreach标签指定内容按条件遍历

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

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

修改步骤

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

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

pbootcms增加foreach标签指定内容按条件遍历

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

  1. // 解析指定随意内容遍历,支持设定分隔符 @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,然后通过遍历组合生成搜索链接。

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

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

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

注意事项

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


延伸 · 阅读

精彩推荐