Pbootcms增加foreach标签指定内容按条件遍历(默认逗号条件)
二开导读
通过二开新增的这个标签可以实现按指定的字符进行遍历,不填写char参数默认使用逗号进行分割遍历。如下图:
图中想把abcd用竖线进行分割,也可以使用逗号或其他自定义符号
然后前台用新增的标签进行遍历调用
{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
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; }
调用标签
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
本站部分文章搜集与网络,如有侵权请联系本站,转载请说明出处。