Initial commit
Some checks failed
定时更新GitHub源插件 / 自动更新GitHub插件 (push) Has been cancelled

This commit is contained in:
chorblack
2026-03-07 11:19:25 +08:00
commit e75f275ef4
4484 changed files with 645480 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/**
* 高亮页面中的搜索关键字 【<a href="https://github.com/typecho-fans/plugins" target="_blank">TF</a>社区维护版】
*
* @package HighlightSearchKeywords
* @author 羽中, gouki
* @version 0.1.3
* @link https://github.com/typecho-fans/plugins/tree/master/HighlightSearchKeywords
*
* 0.1.3 修正内部搜索无效问题,恢复自带样式
*
* 更新日志:
* 0.1.0 高亮从google,yahoo,baidu过来的关键字
* 0.1.1 文件名hightlight.js写错改为highlight.js
* 0.1.2 増加网站内部搜索关键字高亮
*/
class HighlightSearchKeywords_Plugin implements Typecho_Plugin_Interface
{
/**
* 激活插件方法,如果激活失败,直接抛出异常
*
* @access public
* @return void
* @throws Typecho_Plugin_Exception
*/
public static function activate ()
{
Typecho_Plugin::factory('Widget_Abstract_Contents')->filter = array('HighlightSearchKeywords_Plugin', 'parse');
Typecho_Plugin::factory('Widget_Archive')->header = array('HighlightSearchKeywords_Plugin', 'header');
Typecho_Plugin::factory('Widget_Archive')->footer = array('HighlightSearchKeywords_Plugin', 'footer');
}
/**
* 禁用插件方法,如果禁用失败,直接抛出异常
*
* @static
* @access public
* @return void
* @throws Typecho_Plugin_Exception
*/
public static function deactivate(){}
/**
* 获取插件配置面板
*
* @access public
* @param Typecho_Widget_Helper_Form $form 配置面板
* @return void
*/
public static function config(Typecho_Widget_Helper_Form $form){}
/**
* 个人用户的配置面板
*
* @access public
* @param Typecho_Widget_Helper_Form $form
* @return void
*/
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
/**
* 定义来源地址变量httpd_referer
*
* @access public
* @return unknown
*/
public static function header()
{
$referer = self::getHttpReferer();
echo "<style type=\"text/css\">.searchword { background-color: yellow; }</style>";
echo "<script>var httpd_referer='{$referer}';</script>";
}
/**
* 引入涉及的JS并自动初始化
*
* @access public
* @return unknown
*/
public static function footer()
{
$highlightJS = Helper::options()->pluginUrl . "/HighlightSearchKeywords/src/highlight.js";
echo "<script type='text/javascript' src='{$highlightJS}'></script>";
}
/**
* 取得页面来源基本上只针对google,baidu和yahoo
*
* @access private
* @return string
*/
private static function getHttpReferer()
{
if(isset($_GET['highlight'])){
return urldecode(trim($_GET['highlight']));
}
$request = Typecho_Request::getInstance();
if( $referer = $request->getReferer() ){
parse_str( parse_url( $referer , PHP_URL_QUERY ) , $query);
if(isSet( $query['q'] ) ){
return $query['q'];
}else if ( isSet( $query['p'] ) ){
return $query['p'];
}else if ( isSet( $query['wd'] ) ){//baidu
if(!$query['wd']){
return '';
}
return iconv( 'gb2312', 'utf-8', urldecode( $query['wd'] ) ); //百度过来是gb2312要转成utf-8
//return urlencode(iconv( 'gb2312', 'utf-8', urldecode( $query['wd'] ) ));
}
}
if(preg_match('|/search/(.*?)/|i', urldecode($request->getPathInfo()) , $result)){
return $result[1];
}
return '';
}
public static function parse($text, $widget, $lastResult){
$text = empty($lastResult) ? $text : $lastResult;
if ($widget instanceof Widget_Archive && Typecho_Router::$current == 'search') {
if($highlight = self::getHttpReferer()){
$_GET['highlight'] = $highlight;
$text['permalink'] .= "?". http_build_query($_GET);
}
}
return $text;
}
}