楠Go随笔

Metinfo框架中后台编辑富文本块添加代码语言消失处理

2017-10-28 15:18:02 admin 阅读 网站首页 > PHP > Metinfo框架

  最近使用Metinfo框架快速搭建CMS系统时,想在后台添加文章顺便加入演示PHP代码块,由于框架采用的是百度编辑器 Eeditior ,可以方便地对富文本进行格式化显示,比如加粗、换行、首行缩进等。

但是当点击代码语言按钮,准备添加代码块的时候 直接把php代码写进去时,前台可以显示,但是当你重新编辑的时候编辑器会把文本中的代码块注释掉(用),经查找发现编辑器脚本在判断的时候逻辑上有问题,用大写标签字符来判断标签类型,导致被认为是注释模块给注释掉,在项目中找到\app\app\ueditor\ueditor.all.min.js 5043行处 把 "PRE" == a.nodeName 改为 "PRE" == a.nodeName || "pre" == a.nodeName,这样代码就可以在编辑的时候正常显示TIM截图20171028144818.png 

可是有一个缺点就是不能把PHP标记直接加在代码块处,不然会在脚本初始化时认为是特殊字符串给过滤掉,既然不能在底层修改,让就得在应用层做处理,这样也比较灵活。打开获取文章的显示模块 \include\global\showmod.php

在导入 require_once '../include/head.php'; 前面添加下面类似代码 

<?php
//增加代码块显示判断  if ($news['content']) { $match = array(); if (preg_match_all("/<pre[^>]+>([.\w\W]+?)<\/pre>/",$news['content'],$match)) { foreach ($match[0] as $key => $v) { if (strpos($v,"brush:php")) { //是PHP代码块 $news['content']=str_replace($match[1][$key],'&lt;?php<br/><div class="phpcode">'.$match[1][$key].'</div>?&gt;',$news['content']); } else { //暂不处理 } } } }
?>

并在全局模板样式表metinfo.css 中添加样式修饰 如.met_editor  pre div.phpcode {padding: 5px 25px;}

因为代码块可能存在多行 所以正则表达式需要用\w\W表示包换行符在内的其他字符串

搜索

关于楠Go

2015年毕业于吉林大学珠海学院,现今工作已两年有余,2014年在珠海一家游戏公司从事手机游戏开发,后离职转型为网络端PHP工程师,时至今日。熟练掌握PHP面向对象编程网络编程TP框架使用Discuz论坛插件开发。掌握前端框架Bootstrap的使用,掌握JS框架Jquery的使用。已开发多款网站,有着一定基础的开发经验,希望能在互联网领域再上一层楼!

了解更多: 开源中国 ThinkPHP


Powered by MetInfo 5.3.19 ©2008-2018 www.MetInfo.cn