TinyMCE插入代码块强制显示行号

  TinyMCE自带codesample插入代码功能不支持行号,需要依靠Prism.js行号插件实现。在编辑器插入代码会生成如下代码:

<pre class="line-numbers language-javascript">
	<code>
		代码内容
	</code>
</pre>

  注意:class里的line-numbers类有时会没有自己加上,导致前台不显示行号,可能是个Bug。

  我们需要用jQuery强制为插入的代码块加上line-numbers类,然后在前台显示内容页面引入Prism.js渲染行号,实现代码显示行号。

  TinyMCE配置(表单页面):

<script type="text/javascript" src="/static/tinymce/tinymce.min.js"></script>
<script>
	tinymce.init({
		selector: '#myeditor',
		convert_urls: false,
		language: 'zh_CN',
		plugins: 'advlist,autolink,link,image,imagetools,media,lists,preview,code,codesample',
		toolbar: 'code formatselect fontselect fontsizeselect alignleft aligncenter alignright alignjustify blockquote undo redo removeformat advlist autolink link image media lists preview bold italic underline strikethrough indent outdent codesample',
		codesample_languages: [{
				text: 'HTML/XML',
				value: 'markup'
			},
			{
				text: 'JavaScript',
				value: 'javascript'
			},
			{
				text: 'CSS',
				value: 'css'
			},
			{
				text: 'PHP',
				value: 'php'
			},
			{
				text: 'Python',
				value: 'python'
			},
			{
				text: 'SQL',
				value: 'sql'
			},
			{
				text: 'Java',
				value: 'java'
			},
		],
		images_upload_url: "{:url('article/uploads')}",
		height: 500,
		extended_valid_elements: "pre[*],code[*],script[*]",
		// 插入代码块强制加上 line-numbers
		setup(editor) {
			const addLines = () => {
				editor.$('pre').addClass('line-numbers');
			};
			editor.on('codesampleInserted codesampleEdited NodeChange SetContent', addLines);
			editor.on('change', () => editor.save());
		}
	});
</script>

  前台显示内容页面:

<!-- 引入 Prism.js -->
<link rel="stylesheet" href="/static/prismjs/prism.css">
<script src="/static/prismjs/prism.js"></script>

<script>
	// 执行 Prism.js 渲染行号
	document.addEventListener('DOMContentLoaded', function() {
		Prism.highlightAll();
	});
</script>

本站原创内容,转载请注明来源:https://www.liutonghui.com/213

远离谎话连篇三观不正的人
上一篇 2023-01-19
TinyMCE编辑器配置正确但是不显示的解决方法
下一篇 2023-04-16

评论列表(0条)

  • 暂无评论

发表评论

captcha

相关推荐

  • 成功申诉回所有QQ号

      我有五个QQ号,三个8位的,两个9位的,都设置了二代密保,并把密保信息截图存在移动硬盘里。今年7月移动硬盘突然不识别,后来没办法只好格式化重新分区,虽然移动硬盘修好了,但所有的文件全部丢失,也包括QQ密保。这里要说一句,这也使我对本来就无好感的三星更加失望。   由于密保不记得了,修改QQ密码也需要验证密保,存有很大的安全隐患和不便。有天突然发现弃用多年的一个9位号被人用手机登录了,这个号我多年不用了,密码早就忘了,但还记得以前设置......

    2013-12-14
    25091
  • PHP和HTML代码分离

      在这之前,我们开发 PHP 程序的时候,都是 HTML 和 PHP 混合写在一起的。但是代码混写会有一些问题,比如说:表单页和 PHP 页如果写在一起的话,页面运行时就会马上执行写入操作,而这个时候表单还没有提交。另外,表单提交以后,也不需要再显示表单页了。于是就有了判断。 if($_POST) { //处理提交后的数据 } else { //显示表单 }   用 if 把程序分成两个流程。   在显示表单的时候。中......

    2014-04-23
    23130
  • 深入浅出之Smarty模板引擎工作机制(一)

      深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解。   在没有使用Smarty模板引擎的情况下,我们都是将PHP程序和网页模板合在一起编辑的,好比下面的源代码: &lt;?php $title="深处浅出之Smarty模板引擎工作机制"; $content="Smarty模板引擎原理流程......

    2014-08-18
    18170
  • 深入浅出之Smarty模板引擎工作机制(二)

      源代码下载地址:深入浅出之Smarty模板引擎工作机制   接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解。   Smarty模板引擎的原理,其实是这么一个过程:   把模板文件编译成php文件,然后每次都去读取下模板的修改时间,没有修改就不编译。然后include这个&ldquo;编译&rdquo;后的PHP文件。   所谓编译也就是模板用正则替换成含PHP代码的过程。   实际上并不......

    2014-08-18
    14370
  • jQuery实现文件列表和缩略图模式切换

      做一个简单的仿网盘前端页面,实现文件以列表模式和缩略图模式切换功能。 &lt;!DOCTYPE html&gt; &lt;html lang="zh-CN"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;列表/缩略图模式切换&lt;/title&gt; &lt;script src="https://code.jquery.com/jquery-1......

    2015-03-09
    17250
  • TinyMCE编辑器配置正确但是不显示的解决方法

      最近在给本站的后台功能做一次整体调整,在将 TinyMCE 富文本编辑器引入到页面表单时却不显示编辑器主体,反复检查确认了代码配置没有任何问题。在经过一番研究发现,由于表单页面是通过 iframe 引入到主体框架中的,这些表单页面并没有 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; 等 HTML 元素,而 TinyMCE 没有获取到这些元素就认为这不是一个 HTML 页面,因此无法加......

    2023-04-16
    11140
  • 苹果天价存储:奢侈还是贪婪?

      近日,苹果公司推出了全新的M3芯片14寸MacBook Pro,这款笔记本电脑以其强大的性能和出色的设计赢得了业界的广泛关注。然而,与此同时,用户对这款产品的存储方案表达了强烈的不满。8GB内存以及高昂的存储价格引发了消费者对苹果公司收费策略的质疑。   这款起步价高达12999元的M3 MacBook Pro仅配备了8GB内存,对于需要处理大量数据或运行内存密集型应用的用户来说,8GB内存可能显得捉襟见肘。尽管M3芯片的性能强大......

    2023-11-15
    6530
  • ThinkPHP多入口文件多应用设置方法

      在使用ThinkPHP做项目开发时,为了让架构更清晰科学,提高安全和性能,方便维护,需要将多应用分配到各自对应的不同的入口文件上,而不是整个项目用一个入口文件。   此方法适用于ThinkPHP6/8,这是ThinkPHP默认的单应用结构: ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─view 视图目......

    2024-03-31
    8280