PbootCMS修改自定义标签获取标签备注名

更新时间:3个月前 作者:CMS开发网 来源:原创 点赞数:0人 阅读数:153次 0 条评论
摘要:今天客户反馈自己不会修改模板中的一些文字,故所以有了以下二开教程!尽量让后台可以控制的更多,这样方便用户自己操作,也避免很多絮叨!开发步骤修改后的函数函数位置:/apps/home/controller/ParserController.php//解析自定义标签publicfunction
PbootCMS修改自定义标签获取标签备注名

今天客户反馈自己不会修改模板中的一些文字,故所以有了以下二开教程!尽量让后台可以控制的更多,这样方便用户自己操作,也避免很多絮叨!

PbootCMS修改自定义标签获取标签备注名

开发步骤

修改后的函数

函数位置:/apps/home/controller/ParserController.php

    // 解析自定义标签
    public function parserUserLabel($content)
    {
        $pattern_value = '/{label:value_([w]+)(s+[^}]+)?}/';
        $pattern_name = '/{label:name_([w]+)(s+[^}]+)?}/';
        if(preg_match_all($pattern_value, $content, $matches))
        {
            $data = $this->model->getLabel();
            $count = count($matches[0]);
            for ($i = 0; $i < $count; $i ++) {
                if (! $data) { // 无数据时直接替换为空
                    $content = str_replace($matches[0][$i], '', $content);
                    continue;
                }
                $params = $this->parserParam($matches[2][$i]);
                switch ($matches[1][$i]) {
                    default:
                        if (isset($data[$matches[1][$i]])) {
                            if ($data[$matches[1][$i]]['type'] == 3 && $data[$matches[1][$i]]['value']) {
                                if (! preg_match('/^http/', $data[$matches[1][$i]]['value'])) {
                                    $data[$matches[1][$i]]['value'] = $this->adjustLabelData($params, SITE_DIR . $data[$matches[1][$i]]['value']);
                                } else {
                                    $data[$matches[1][$i]]['value'] = $this->adjustLabelData($params, $data[$matches[1][$i]]['value']);
                                }
                            }
                            $content = str_replace($matches[0][$i], $this->adjustLabelData($params, $data[$matches[1][$i]]['value']), $content);
                        }
                }
            }
        }
        if(preg_match_all($pattern_name, $content, $matches))
        {
            $data = $this->model->getLabel();
            $count = count($matches[0]);
            for ($i = 0; $i < $count; $i ++)
            {
                if (! $data)
                {
                    // 无数据时直接替换为空
                    $content = str_replace($matches[0][$i], '', $content);
                    continue;
                }
                $params = $this->parserParam($matches[2][$i]);
                switch ($matches[1][$i])
                {
                    default:
                        if (isset($data[$matches[1][$i]]))
                        {
                            $content = str_replace($matches[0][$i], $this->adjustLabelData($params, $data[$matches[1][$i]]['description']), $content);
                        }
                }
            }
        }
        return $content;
    }

修改模型

模型位置:/apps/home/model/ParserModel.php

    // 自定义标签,不区分语言,兼容跨语言
    public function getLabel()
    {
        return parent::table('kaifa_label')->decode()->column('value,type,description', 'name');
    }

至此通过{label:value_XXX}可以调用标签内容  通过{label:name_XXX}可以调用标签名称

优化点击名称快速复制标签

新增js复制函数

// 快捷复制调用标签
function copyText(text)
{
      var input = document.getElementById("copyText");
      input.value = '{'+text+'}'; // 修改文本框的内容
      input.select(); // 选中文本
      document.execCommand("copy"); // 执行浏览器复制命令
      layer.msg('复制标签成功')
}

修改模板给名称和内容增加触发事件

<a href="javascript:;" onclick="copyText('label:value_[value->name]');">
<a href="javascript:;" onclick="copyText('label:name_[value->name]');">
<!-- 内容复制区域 -->
<textarea id="copyText" style="position: absolute;top: 0;left: 0;opacity: 0;z-index: -10;"></textarea>

这样就不用一个一个去拼调用标签了,相对便捷!又想法的同学可以尝试一下。

THE END

如果你的问题还没有解决,可以加入交流群和群友一起讨论。如果想请站长喝杯咖啡,点击打赏按钮扫码赞赏~

版权声明:本站部分教程是由网络收集,然后整理编辑而成,版权归原作者所有,如果由此而造成的侵权,请与我们联系,审核属实后立即删除,谢谢!请与我们联系,审核属实后立即删除,谢谢!

发表评论

发表评论
评论列表 (评论通过审核后才会显示)
暂无评论