我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

话说,苏南大叔完成了第一个typecho的预约发布的插件后,今天就又写了个简单的小插件,非常简单。就是判断文章内的markdown链接的域名,如果是非本站的话,就给个target="_blank"属性。这个也是刚需吧?

苏南大叔:原创typecho插件:markdown链接新开页面 - typecho插件-新开页面
原创typecho插件:markdown链接新开页面(图2-1)

bw(非本文内容)

在bw博客里面,我也写了类似的功能。相对而已,还真心是typecho的插件机制好。非侵入式。
下面是bw里面,我的写法:
inc/script/parsedown/Parsedown.php中的inlineLink函数的最后,return之前:

$tempu=parse_url($Element['attributes']['href']);
if($tempu['host']!=$_SERVER['HTTP_HOST']){
    $Element['attributes']['target'] = "_blank";
}

苏南大叔:原创typecho插件:markdown链接新开页面 - typecho-plugin
原创typecho插件:markdown链接新开页面(图2-2)

typecho插件

typecho里面,我是这样写了个类似功能的插件,大家可以看看。
代码是按着“文章内容隐藏”功能的插件,进行改写的。所以代码贴下面了。

/usr/plugins/MyMarkdown/Plugin.php
<?php
if (!defined('__TYPECHO_ROOT_DIR__'))
    exit;
/**
 * 解决markdown格式的一些天生的问题
 * 
 * @package MyMarkdown
 * @author sunan
 * @version 0.0.1
 * @dependence 
 * @link http://newsn.net
 */
class MyMarkdown_Plugin implements Typecho_Plugin_Interface {

    public static function activate() {
        Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('MyMarkdown_Plugin', 'dealContent');
    }

    public static function deactivate() {
        
    }

    public static function config(Typecho_Widget_Helper_Form $form) {
        
    }

    public static function personalConfig(Typecho_Widget_Helper_Form $form) {
        
    }

    public static function dealContent($content, $widget) {
        $preg = '/<a .*?href="(.*?)".*?>/is';
        preg_match_all($preg, $content, $match);
        $domain = @trim($_SERVER['HTTP_HOST']);
        foreach ($match[1] as $key => $val) {
            if (stripos($val, $domain) === FALSE) {
                $content = str_replace($match[0][$key], "<a href='$val' target='_blank'>", $content);
            }
        }
        return $content;
    }
}

显然在typecho里面,这种非侵入式的修改更加好一些。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   typecho