PhpDig.net

PhpDig.net (http://www.phpdig.net/forum/index.php)
-   Mod Submissions (http://www.phpdig.net/forum/forumdisplay.php?f=24)
-   -   Extracting search results and using them in your own web pages (http://www.phpdig.net/forum/showthread.php?t=2266)

ciaran@clissman 11-25-2005 06:57 AM

Extracting search results and using them in your own web pages
 
Hi all,
after a fair amount of hacking about, I worked out how to get the results of a phpdig search out of phpdig and into php and html code of my own design. This is not elegant and the programming is untidy. But perhaps a more skilled practitioner can use this code as a starting point for better things.
The version it works with is 1.8.7

I actually use the code by including it in an iframe and passing the sole parameter, query_text as part of the src= url.

I hope someone finds this useful

Ciaran
Code:

<?php
/*
--------------------------------------------------------------------------------
PhpDig Version 1.6.x
This program is provided under the GNU/GPL license.
See the LICENSE file for more information.
All contributors are listed in the CREDITS file provided with this package.
PhpDig Website : http://www.phpdig.net/
--------------------------------------------------------------------------------

THIS SCRIPT BASED ON SEARCH.PHP, BUT WITH CHANGES WHICH ALLOW THE EXTRACTION OF THE SEARCH RESULTS INTO AN ARRAY AND THEIR SUBSEQUENT PRESENTATION IN HTML OF YOUR CHOICE.


*/
$relative_script_path = '.';

if (is_file("$relative_script_path/includes/config.php")) {
    include "$relative_script_path/includes/config.php";
}
else {
    die("Cannot find config.php file.\n");
}

if (is_file("$relative_script_path/libs/search_function.php")) {
    include "$relative_script_path/libs/search_function.php";
}
else {
  die("Cannot find search_function.php file.\n");
}

// extract vars
extract(phpdigHttpVars(
    array('query_string'=>'string',
          'refine'=>'integer',
          'refine_url'=>'string',
          'site'=>'integer',
          'limite'=>'integer',
          'option'=>'string',
          'lim_start'=>'integer',
          'browse'=>'integer',
          'path'=>'string'
          )
    ));


$template = "array";

$a = phpdigSearch($id_connect, $query_string, $option, $refine,
              $refine_url, $lim_start, $limite, $browse, $site, $path,
              $relative_script_path, $template, $adlog_flag, $rssdf, $template_demo);


/*

THE FOLLOWING LINES ARE USEFUL FOR DEBUG

echo "<hr>";
  print_r(array_keys($a));
echo "<hr>";

print_r(array_values($a));

echo "<hr>";
*/

$out = array_values($a);

$c = count($out);


$heading = $out[4]; //extracts the header, which you can now hack any way you like
$footer = $out[5]; //extracts the footer, which again you can hack. Since the footer contains multiple links to search.php, you need to change these to csearch.php
$footer = preg_replace('/search.php/i','csearch.php',$footer);
$footer = preg_replace('/<span[^>]*>/i','<span style="font-weight:bold; font-family:verdana; font-size:9pt; color:#536E99">',$footer); //this changes the formatting of the active page of the results that you're looking at.

//$footer = preg_replace('/<\/span>/i','</b>',$footer);

$head = $out[4]; //these next few lines replace the standard header with results x to y of z. No doubt there is a better, more phpdig, way to do this !


$needle = strpos ($heading,'total');

$heading = substr ($heading,0,$needle);

$heading = str_replace(',',' of ',$heading);

if (strpos($head,'total')!=FALSE)
        {
                $a = $out[19]; //itself an array starting at 1 - the results are in the 19th element of the returned array, for the first screen.


                if ($lim_start) $a = $out[20];//the results are in the 20th element of the returned array, for the second and subsequent screens.

                $out = array_values($a); //now $out has each search result in an array of its own. To get the names of the indices  - its an associative array- enable the debug lines above.

                $hasresults=1; //a hack flag to stop the printing out of results when there are none. This is far from elegant....
        }
else
        {
                $heading = "No hits returned";
        }

?>
<html>
        <head>
                        <style>
                                a{text-decoration:none; font-family:verdana; font-size:9pt; color:#536E99}
                                footer.a {text-decoration:none; font-family:verdana; font-size:5pt; color:#536E99}
                                span.bolder{font-weight:bold}
                        </style>
        </head>
        <body style="background-image: url(../images/grade.gif); background-repeat: repeat-x; ">
                <table width=100% border=0>

<?php
                print("<font style=\"font-family:verdana; font-size:7pt; color: black\"> $heading
                </font>
                <br>"); //print out the header, which you formatted above

$i = 0;
while (($i < count($out)) and ($hasresults==1)) //this loop outputs the links.
        {
                $a = $out[$i]; //, the array with the results in it
                print("
                                <tr>
                                        <td style=\"padding-right:0.5em;\">
                                                $a[page_link]
                                        </td>
                                </tr>
                        ");
                  $i++;
        }
print("</table>

        <div id=\"footer\">
");
echo $footer; //print out the footer, which you formatted above.
echo "</div>";
?>

        </body>

</html>


Gaz 11-26-2005 10:14 AM

You'll have to excuse me for being a bit thick, but what exactly do we do with this? Create a new php file for it, or overwrite everything in the search.php file, and use the <?PHP include "search.php" ?> tags?

This is all new to me :confused:


All times are GMT -8. The time now is 09:53 PM.

Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © 2001 - 2005, ThinkDing LLC. All Rights Reserved.