Login   Register  
PHP Classes
elePHPant
Icontem

File: htdig_search.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Manuel Lemos  >  Htdig site indexing and searching interface  >  htdig_search.php  >  Download  
File: htdig_search.php
Role: Example script
Content type: text/plain
Description: Example search page script.
Class: Htdig site indexing and searching interface
Interface with Ht:/Dig indexing and search engine.
Author: By
Last change: - Used external file to define Ht:/Dig configuration options.
- Made the script work even when PHP register globals option is Off.
Date: 2005-02-07 22:37
Size: 5,714 bytes
 

Contents

Class file image Download
<?php
/*
 * htdig_search.php
 *
 * Purpose:  Search the database of indexed pages and present the results.
 *
 * @(#) $Header: /home/mlemos/cvsroot/htdiginterface/htdig_search.php,v 1.5 2005/02/08 06:10:48 mlemos Exp $
 *
 */

    
require("htdig.php");
    require(
"configuration.php");

    
$htdig=new htdig_class;

    
/*
     * Where are the executables of htsearch, htdig, htmerge, htfuzzy 
     * located? They should be in the same directory. It does not need
     * to be in the original instalation directory.
     */
    
$htdig->htdig_path=$htdig_path;

    
/*
     * If the htsearch program is locate a different directory from htdig,
     * specify it here.
     */
    
$htdig->htsearch_path=$htsearch_path;
    
    
/*
     * Where this search engine configuration file should be stored? It
     * does not need to be in the original htdig instalation directory.
     * If you need to index more than one site in your server run this
     * script as many times as need specifying different configuration file
     * names.
     */
    
$htdig->configuration=$htdig_configuration_file;

    
/*
     * Where this search engine database files hould be stored? It
     * does not need to be in the original htdig instalation directory.
     * If you need to index more than one site in your server run this
     * script as many times as need specifying different database
     * directories.
     */
    
$htdig->database_directory=$htdig_database_directory;

    
/*
     * Set the secure search option to let the latest Ht:/Dig versions
     * (3.1.6 or later) use configuration files stored in paths different
     * from the default.
     */
    
$htdig->secure_search=1;


    if(IsSet(
$_REQUEST["words"]))
        
$words=$_REQUEST["words"];
    if(IsSet(
$_REQUEST["method"]))
        
$method=$_REQUEST["method"];
    if(IsSet(
$_REQUEST["go_search"]))
        
$go_search=$_REQUEST["go_search"];
    if(IsSet(
$_REQUEST["page"]))
        
$page=$_REQUEST["page"];
?><HTML>
<HEAD>
<TITLE>Search this site</TITLE>
<BODY>
<H1><CENTER>Search this site</CENTER></H1>
<HR>
<FORM METHOD="GET" ACTION="" NAME="search_form">
<CENTER><TABLE BORDER>
<TR>
<TD>
<CENTER><TABLE>
<TR>
<TH ALIGN=right>Search for:</TH>
<TD><INPUT TYPE="text" NAME="words" VALUE="<?
    
if(IsSet($words))
        echo 
HtmlEntities($words);
?>"></TD>
<TD><CENTER><INPUT TYPE="submit" VALUE="Go"</CENTER></TD>
</TR>
<TR>
<TH ALIGN=right>Match</LABEL>:</TH>
<TD><SELECT NAME="method">
<OPTION VALUE="or"<?
    
if(IsSet($method)
    && 
$method=="or")
        echo 
" SELECTED";
?>>Any word</OPTION>
<OPTION VALUE="and"<?
    
if(IsSet($method)
    && 
$method=="and")
        echo 
" SELECTED";
?>>All words</OPTION>
</SELECT>
</TD></TR>
</TABLE></CENTER>
</TD></TR>
</TABLE></CENTER>
<INPUT TYPE="hidden" NAME="go_search" VALUE="1" ID="go_search">
</FORM>
<?
    
if(IsSet($go_search))
    {
        if(IsSet(
$page)
        && 
intval($page)>0)
            
$page=intval($page);
        else
            
$page=1;

        
/* How many matches per page? */
        
$matchesperpage=10;

        
/* What is the limit of Next and Previous result page links ? */
        
$listpages=4;

        
$options=array(
            
"matchesperpage"=>$matchesperpage,
            
"page"=>$page,
            
"method"=>$method
        
);
        
$words=ereg_replace("[ ]+","|",$words);
        if(!
strcmp($error=$htdig->Search($words,$options,$results),""))
        {
            
$maximum_page=intval(($results["MatchCount"]+$matchesperpage-1)/$matchesperpage);
            if(
$results["MatchCount"])
            {
                if(
$page>$maximum_page)
                {
                    
$options["page"]=$page=$maximum_page;
                    
$error=$htdig->Search($words,$options,$results);
                }
            }
            if(!
strcmp($error,""))
            {
                if(
$results["MatchCount"]>0)
                {
?>
<TABLE WIDTH="90%">
<TR>
<TD ALIGN=right WIDTH="5%"> </TD>
<TD><B>Pages found:</B> <?
                    
echo $results["MatchCount"];
?></TD>
</TR>
</TABLE>
<?
                    
if($results["MatchCount"]>$matchesperpage)
                    {
?>
<TABLE WIDTH="90%">
<TR>
<TD WIDTH="5%"> </TD>
<TD><TABLE>
<TR>
<?
                        $link_values
="words=".UrlEncode($words)."&method=$method&go_search=1";
                        if(
$page>1)
                        {
                            if((
$link_page=$page-$listpages)<1)
                                
$link_page=1;
                            for(;
$link_page<$page;$link_page++)
                            {
                                
$page_range=(($link_page-1)*$matchesperpage+1)."-".min($link_page*$matchesperpage,$results["MatchCount"]);
                                
$url="?page=$link_page&$link_values";
                                echo 
"<TD><A HREF=\"$url\">$page_range</A></TD>\n";
                            }
                            echo 
"<TD><A HREF=\"$url\">&lt;&lt; Previous</A></TD>\n";
                        }
                        
$page_range=(($page-1)*$matchesperpage+1)."-".min($page*$matchesperpage,$results["MatchCount"]);
                        echo 
"<TD><B>$page_range</B></TD>\n";
                        if(
$page<$maximum_page)
                        {
                            
$link_page=$page+1;
                            
$url="?page=$link_page&$link_values";
                            echo 
"<TD><A HREF=\"$url\">Next &gt;&gt;</TD>\n";
                            if((
$last_page=$page+$listpages)>$maximum_page)
                                
$last_page=$maximum_page;
                            for(;
$link_page<=$last_page;$link_page++)
                            {
                                
$page_range=(($link_page-1)*$matchesperpage+1)."-".min($link_page*$matchesperpage,$results["MatchCount"]);
                                
$url="?page=$link_page&$link_values";
                                echo 
"<TD><A HREF=\"$url\">$page_range</A></TD>\n";
                            }
                        }
?>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
<?
                    
}

                    
$first=$results["FirstMatch"];
                    
$last=$results["LastMatch"];
                    for(
$match=$first;$match<=$last;$match++)
                    {
?>
<BR>
<TABLE WIDTH="90%">
<TR>
<TD ALIGN=right WIDTH="5%">
<?                    echo $match;
?>.</TD>
<TD><?
                        
echo "<A HREF=\"",$results["Matches"][$match]["URL"],"\">".$results["Matches"][$match]["Title"]," (",$results["Matches"][$match]["Percent"],"%)";
?></TD>
</TR>
<TR>
<TD> </TD>
<TD><FONT SIZE=-1><?
                        
echo $results["Matches"][$match]["Excerpt"]
?></FONT></TD>
</TR></TABLE>
<?
                    
}
                }
                else
                {
?>
<H2><CENTER>Sorry no pages were found.</CENTER></H2>
<?
                
}
            }
        }
        if(
strcmp($error,""))
        {
?>
<H2>Error: <?
            
echo HtmlEntities($error);
?>.</H2>
<?
        
}
    }
?>
<HR>
</BODY>
</HTML>