实现张鑫旭博客的程序示例效果

前端开发者应该都知道张鑫旭老师以及他的鑫空间鑫生活博客,在业界实在是太有名了,我在大学第一次发现这个博客的时候简直就像哥伦布发现了新大陆一样,如获至宝。参加工作后也经常会去拜读研究,可以说我和很多人一样都是看着他的博客“长大”的。

张老师的博客有很多特点,除了聚焦前端偏前领域、博客的广度深度、沉淀十年的优质博客数量……我认为最具特色的就是基本每篇博客都有一个或多个被波浪线链接的“代码效果”页,这是一个可以向读者展示程序示例的页面,对于晦涩难懂的技术博客而言,提供程序示例页面是至关重要的,它可以帮助用户更生动地理解文章所描述的知识点。

本文介绍如何在自己的博客网站实现程序示例效果,因为大海爱奔跑是一个wordpress博客,所以没有试过其他的博客系统,但相信方法和思路都是通用的,希望本文能给大家带来帮助。

查看最终实现效果请狠狠地点击:

实现步骤

1. 页面布局

先来看看代码效果页的DOM结构,最上面是网站头部,中间是主内容区(示例标题 + 左右布局的代码框和效果框),最下面是网站尾部。熟悉wordpress框架的同学,知道在博客主题源文件的page-templates目录下包含了页面模板文件,在wordpress后台新建页面的时候,你可以在右下角的页面属性/模板下拉框中找到它们。于是,我们可以通过修改(或新建)一个模板文件来实现上面的DOM结构和样式,如下图,通过修改最后一个文件,把它变成我们需要的“代码效果”页:

2. 模板文件

我没有新增第五个模板文件,而是在一个使用率比较低的模板template-pagebuilder-full-width.php基础上修改代码,然后上传至服务器替换原文件。于是,我们完成了代码效果页的布局和功能(一个空壳,下一节介绍如何制造内容),下面是该文件的内容:

<?php
/**
 * Template Name: 代码效果页
 *
 * 原模版名称:Page Builder Full Width
 * 包含网站头部、中部的标题/代码/效果、网站尾部三部分
 * 标题和左侧的代码:通过wordpress后台/页面/新建页面创建(另起一段写"<p>@pagename.html</p>",以告知右侧引入哪个文件)
 * 右侧的网页:将左侧代码内描述的"pagename.html"文件手动上传至服务器主题根目录下的my-pages(需新建)目录内
 *
 * @package Hestia
 * @since Hestia 1.1.24
 * @author 大海(wy310.cn)
 */

// 根据自己的设计,写好code-effect.css放入服务器主题根目录下,然后引入该样式文件
echo '<link rel="stylesheet" type="text/css" href="https://wy310.cn/wp-content/themes/hestia/code-effect.css" />';

// 获取网站头部(博客名称+菜单那一栏)
get_header(); ?>

<!--自己定义的中部(标题+代码+效果)-->
<div class="code-effect-wrapper" id="code-effect">
  <h1 class="title"><?php the_title(); ?></h1>
  <div class="body">
    <div class="code part">
      <h3>代码:</h3>
      <div class="board" ref="post">
        <?php
        if ( have_posts() ) :
          while ( have_posts() ) :
            the_post();
            get_template_part( 'template-parts/content', 'pagebuilder' );
          endwhile;
        endif;
        ?>
      </div>
    </div>
    <div class="effect part">
      <h3>效果:</h3>
      <div class="board">
        <!--这里通过iframe引入外部文件,:src是vue.js的写法-->
        <iframe class="iframe" :src="url"></iframe>
      </div>
    </div>
  </div>
</div>

<!--获取网站尾部(菜单+备案号那一栏)-->
<?php get_footer(); ?>

<!--因为习惯vue编程,所以引入cdn上的vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

<!--引入自己定义的code-effect.js,它的作用是生成vue实例挂在到#code-effect元素上,并且获取左侧代码框内容中的"pagename.html",拼接成可访问的页面链接,iframe引入该链接后就可以渲染该页面了-->
<script src="https://wy310.cn/wp-content/themes/hestia/code-effect.js"></script>

  • 代码顶部注释中的Template Name对应的值会在wordpress后台新建页面时右下角页面模板的下拉框中展示(见第3小节截图中的第4点)
  • code-effect.css文件内容:传送门
  • code-effect.js文件内容:传送门
3. 标题和代码框

我们写博客的时候,可能需要为一个或多个知识点提供示例页面,对于这种频繁发布的页面我们需要想一个一劳永逸的方法:代码框里的代码(或文字)最好是可以通过wordpress后台编辑发布的,这样修改起来就很方便,于是我想到完全可以用页面或者文章的形式去承载啊(如果用文章的形式,那么这篇文章将来会出现在博客目录里,仅仅只有代码的文章也没多大阅读意义,而且数量一多,躺在博客列表里的这些代码文章们总会显得不伦不类,还会影响用户的查阅,所以还是用页面去承载最好,除非用户直接访问指定页面的地址,要不然一般情况下是看不到这个页面的,非常完美),这样一来,新建页面时填入的标题也正好给“代码效果”页的标题使用了,一举两得!看了下面的图还不懂你来打我:

4. 效果框

其实第2小节的代码已经说明了如何将文件载入效果框,这里总结一下:

  • 首先需要先写好这个可运行的网页文件,比如debounce.html,传入服务器项目主题根目录下的my-pages(事先新建的文件夹,用于存放所有示例的网页文件),确保链接https://wy310.cn/wp-content/themes/hestia/my-pages/debounce.html可以访问成功;
  • 再在wordpress后台新建页面,页面内容可以粘贴debounce.html的代码(即左侧代码框的内容),写完代码后一定要另起一段写@debounce.html这个内容(另起一段其实是新增了<p></p>标签),code-effect.js会读取页面的文字,检索到@符号后面的网页文件名debounce.html之后,拼接成可访问的链接url
  • 模板文件中的<iframe class="iframe" :src="url"></iframe>就会引入刚刚得到的url,渲染debounce.html页面。

到此,成功实现程序示例效果!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容