Login   Register  
PHP Classes
elePHPant
Icontem

File: examples/tags/search-highlight/tag.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Oliver Lillie  >  PHP Custom Tags  >  examples/tags/search-highlight/tag.php  >  Download  
File: examples/tags/search-highlight/tag.php
Role: Auxiliary script
Content type: text/plain
Description: Example script
Class: PHP Custom Tags
Template engine based on tags similar to HTML
Author: By
Last change: reorganized for composer support
Date: 7 months ago
Size: 2,302 bytes
 

Contents

Class file image Download
<?php

    
namespace CustomTags;

    
/**
     * Inspired by a smarty plugin.
     * http://www.andrefiedler.de/smartyplugins/outputfilter.highlight_search_words.txt
     * Smarty plugin
     * Author:   AndrĂ© Fielder < mail [at] andrefiedler [dot] de >
     * -------------------------------------------------------------
     * File:     outputfilter.highlight_search_words.php
     * Type:     outputfilter
     * Name:     highlight_search_words
     * Purpose:  Highlights words which were searched true an
     *           search engine below. A css class named searchWords 
     *           must be available.
     * -------------------------------------------------------------
     *
     * @version 1.0
     * @copyright 2005, AndrĂ© Fiedler
     */
    
    
function ct_search_highlight($tags$source)
    {
//         the search engine and incoming var name
        
$search_engines = array(
            
'google'     => 'q',
            
'yahoo'     => 'p',
            
'lycos'     => 'query',
            
'altavista' => 'q',
            
'alltheweb' => 'q',
            
'excite'     => 'search',
            
'msn'         => 'q'
        
);
        
$url parse_url($_SERVER['HTTP_REFERER']);
//         loop through all the tags and capture the block source and the 
//         replacement value so they can be bulk replaced
        
$replacements = array();
        foreach (
$tags as $tag)
        {
//             loop the search engine list
            
foreach($search_engines as $engine_name => $var_name
            {
//                 search for a match of the current search engine name against the url host
                
if(preg_match('/('.$engine_name.')/i'$url['host'])) 
                {
//                     loop the words and replace the words with a highlighted query
                    
parse_str($url['query'], $query_vars); 
                    
$words explode(' 'urldecode($query_vars[$var_name]));
                    foreach(
$words as $k => $word
                    {
                        if(
trim($word) != ''
                        {
                            
$pattern[$k] = "/((<[^>]*)|$word)/ie";
                            
$replace[$k] = '"\2"=="\1"? "\1":"<span class=\"searchWords\">\1</span>"';
                        }
                    }
                    
$tag['content'] = preg_replace($pattern$replace$tag['content']);           
                }
            }    
            
$replacements[$tag['tag']] = $tag['content'];
        }
        return 
strtr($source$replacements);
    }
    
//     this signals that the tag should be processed as a collection, meaning 
//     that the argument supplied to the function is an array of tags and not 
//     a single tag. The collected tags will be processed at the end of the parse.
    
$collect true;