I have a custom search. Right now, the search results page is displayed after the search is completed.
Is there a way to display the search results as they are located?
For example, in the hook_search api http://api.drupal.org/api/function/hook_search/5, this is how the results are located in a generic custom search:
<?php
case 'search':
$find = do_search($keys, 'node', 'INNER JOIN {node} n ON n.nid = i.sid '. node_access_join_sql() .' INNER JOIN {users} u ON n.uid = u.uid', 'n.status = 1 AND '. node_access_where_sql());
$results = array();
foreach ($find as $item) {
$node = node_load(array('nid' => $item));
$extra = node_invoke_nodeapi($node, 'search result');
$results[] = array('link' => url('node/'. $item),
'type' => node_invoke($node, 'node_name'),
'title' => $node->title,
'user' => theme('username', $node),
'date' => $node->changed,
'extra' => $extra,
'snippet' => search_excerpt($keys, check_output($node->body, $node->format)));
}
return $results;
?>What I am asking: Is there a way to print each $result[] item as it is located rather than returning the $results array to print the page after the search is completed?
My problem is that my custom search uses a 3rd party search, then I have to parse the those results using a query to a Drupal table. Then, I populate the $results array. This is taking a very long time, but I don't see a lot of ways round it. What would give the impression of it not taking so long would be if the search results started popping up immediately.
Thanks for any suggestions.
-ron