Files
plugins/HighlightSearchKeywords/Plugin.php
chorblack e75f275ef4
Some checks failed
定时更新GitHub源插件 / 自动更新GitHub插件 (push) Has been cancelled
Initial commit
2026-03-07 11:19:25 +08:00

132 lines
4.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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;
}
}