I am using PHP and the Smarty template engine.
What I need is that, when I consult for a user in the search engine, and I only get one result, it sends me directly to that user's profile.
In the user class I have this function, which returns users and other data, but in my case I only search for users.
public function search_quick($query) { global $db, $system; $results = []; /* search users */ $get_users = $db->query(sprintf('SELECT user_id, user_name, user_firstname, user_lastname, user_gender, user_picture, user_subscribed, user_verified FROM users WHERE user_name LIKE %1$s OR user_firstname LIKE %1$s OR user_lastname LIKE %1$s OR CONCAT(user_firstname, " ", user_lastname) LIKE %1$s LIMIT %2$s', secure($query, 'search'), secure($system['min_results'], 'int', false) )) or _error("SQL_ERROR_THROWEN"); if($get_users->num_rows > 0) { while($user = $get_users->fetch_assoc()) { $user['user_picture'] = get_picture($user['user_picture'], $user['user_gender']); /* get the connection between the viewer & the target */ $user['connection'] = $this->connection($user['user_id']); $user['sort'] = $user['user_firstname']; $user['type'] = 'user'; $results[] = $user; } } /* search pages */ $get_pages = $db->query(sprintf('SELECT * FROM pages WHERE page_name LIKE %1$s OR page_title LIKE %1$s LIMIT %2$s', secure($query, 'search'), secure($system['min_results'], 'int', false) )) or _error("SQL_ERROR_THROWEN"); if($get_pages->num_rows > 0) { while($page = $get_pages->fetch_assoc()) { $page['page_picture'] = get_picture($page['page_picture'], 'page'); /* check if the viewer liked the page */ $page['i_like'] = $this->check_page_membership($this->_data['user_id'], $page['page_id']); $page['sort'] = $page['page_title']; $page['type'] = 'page'; $results[] = $page; } } /* search groups */ $get_groups = $db->query(sprintf('SELECT * FROM `groups` WHERE group_privacy != "secret" AND (group_name LIKE %1$s OR group_title LIKE %1$s) LIMIT %2$s', secure($query, 'search'), secure($system['min_results'], 'int', false) )) or _error("SQL_ERROR_THROWEN"); if($get_groups->num_rows > 0) { while($group = $get_groups->fetch_assoc()) { $group['group_picture'] = get_picture($group['group_picture'], 'group'); /* check if the viewer joined the group */ $group['i_joined'] = $this->check_group_membership($this->_data['user_id'], $group['group_id']); $group['sort'] = $group['group_title']; $group['type'] = 'group'; $results[] = $group; } } /* search events */ $get_events = $db->query(sprintf('SELECT * FROM `events` WHERE event_privacy != "secret" AND event_title LIKE %1$s LIMIT %2$s', secure($query, 'search'), secure($system['min_results'], 'int', false) )) or _error("SQL_ERROR_THROWEN"); if($get_events->num_rows > 0) { while($event = $get_events->fetch_assoc()) { $event['event_picture'] = get_picture($event['event_cover'], 'event'); /* check if the viewer joined the event */ $event['i_joined'] = $this->check_event_membership($this->_data['user_id'], $event['event_id']); $event['sort'] = $event['event_title']; $event['type'] = 'event'; $results[] = $event; } } /* sort results */ function sort_results($a, $b){ return strcmp($a["sort"], $b["sort"]); } usort($results, 'sort_results'); return $results; }
In search.php:
if(!isset($_POST['query'])) { _error(400); } try { // initialize the return array $return = array(); // get results $results = $user->search_quick($_POST['query']); if($results) { /* assign variables */ $smarty->assign('results', $results); /* return */ $return['results'] = $smarty->fetch("ajax.search.tpl"); } // return & exit return_json($return); } catch (Exception $e) { modal("ERROR", __("Error"), $e->getMessage()); }
In search.tpl:
{include file='_head.tpl'} {include file='_header.tpl'} <!-- page header --> <div class="page-header bg-1"> <img class="floating-img d-none d-md-block" src="{$system['system_url']}/content/themes/{$system['theme']}/images/headers/hugo-searching.png"> <div class="crystal c03"></div> <div class="circle-2"></div> <div class="circle-3"></div> <div class="inner"> <h2>{__("Search")}</h2> <p>{__("Discover new people, create new connections and make new friends")}</p> </div> </div> <!-- page header --> {$totalResults = 0} {$totalResults = count($results['posts']) + count($results['articles']) + count($results['users']) + count($results['pages']) + count($results['groups']) + count($results['events'])} <!-- page content --> <div class="container {if $user->_logged_in}offcanvas{/if}" style="margin-top: -45px;"> <div class="row"> <!-- side panel --> {if $user->_logged_in} <div class="col-12 d-block d-sm-none offcanvas-sidebar"> {include file='_sidebar.tpl'} </div> {/if} <!-- side panel --> <!-- content panel --> <div class="col-12 {if $user->_logged_in}offcanvas-mainbar{/if}"> <!-- search form --> <div class="card"> <div class="card-body"> <form class="js_search-form"> <div class="form-group mb0"> <div class="input-group"> <input type="text" class="form-control" name="query" placeholder='{__("Search for people, sports and positions")}' {if $query}value="{$query}"{/if} > <div class="input-group-append"> <button type="submit" name="submit" class="btn btn-danger plr30"><i class="fas fa-search mr10"></i>{__("Search")}</button> </div> </div> </div> </form> </div> </div> <!-- search form --> <div class="row"> <!-- left panel --> <div class="col-lg-8"> <!-- panel nav --> <ul class="nav nav-pills nav-fill nav-search mb10"> <li class="nav-item"> <a class="nav-link rounded-pill {if $totalResults == 0 || $totalResults > 1}active{/if}" href="#all" data-toggle="tab"> <i class="fas fa-poll-h mr5"></i><strong>{__("All")}</strong> </a> </li> <li class="nav-item"> <a class="nav-link rounded-pill {if count($results['posts']) == 1 and $totalResults == 1}active{/if}" href="#posts" data-toggle="tab"> <i class="fa fa-newspaper mr5"></i><strong>{__("Posts")}</strong> </a> </li> <li class="nav-item"> <a class="nav-link rounded-pill {if count($results['articles']) == 1 and $totalResults == 1}active{/if}" href="#articles" data-toggle="tab"> <i class="fab fa-blogger-b mr5"></i><strong>{__("Articles")}</strong> </a> </li> <li class="nav-item"> <a class="nav-link rounded-pill {if count($results['users']) == 1 and $totalResults == 1}active{/if}" href="#users" data-toggle="tab"> <i class="fa fa-user mr5"></i><strong>{__("Users")}</strong> </a> </li> <li class="nav-item"> <a class="nav-link rounded-pill {if count($results['pages']) == 1 and $totalResults == 1}active{/if}" href="#pages" data-toggle="tab"> <i class="fa fa-flag mr5"></i><strong>{__("Pages")}</strong> </a> </li> <li class="nav-item"> <a class="nav-link rounded-pill {if count($results['groups']) == 1 and $totalResults == 1}active{/if}" href="#groups" data-toggle="tab"> <i class="fa fa-users mr5"></i><strong>{__("Groups")}</strong> </a> </li> <li class="nav-item"> <a class="nav-link rounded-pill {if count($results['events']) == 1 and $totalResults == 1}active{/if}" href="#events" data-toggle="tab"> <i class="fa fa-calendar mr5"></i><strong>{__("Events")}</strong> </a> </li> </ul> <!-- panel nav --> <div class="tab-content"> <!-- all --> <div class="tab-pane {if $totalResults == 0 || $totalResults > 1}active{/if}" id="all"> {if $totalResults > 1} <ul> {foreach $results['users'] as $_user} {include file='__feeds_user.tpl' _tpl="list" _connection=$_user['connection']} {/foreach} {foreach $results['groups'] as $_group} {include file='__feeds_group.tpl' _tpl="list"} {/foreach} {foreach $results['posts'] as $post} {include file='__feeds_post.tpl'} {/foreach} </ul> {else} <div class="text-center text-muted mtb10"> <img width="25%" src="{$system['system_url']}/content/themes/{$system['theme']}/images/no_results.png"> <p class="mt10 mb10"><strong>{__("No results to show")}</strong></p> </div> {/if} </div> <!-- all --> <!-- posts --> <div class="tab-pane {if count($results['posts']) == 1 and $totalResults == 1}active{/if}" id="posts"> {if count($results['posts']) > 0} <ul> {foreach $results['posts'] as $post} {include file='__feeds_post.tpl'} {/foreach} </ul> {else} <div class="text-center text-muted mtb10"> <img width="25%" src="{$system['system_url']}/content/themes/{$system['theme']}/images/no_results.png"> <p class="mt10 mb10"><strong>{__("No results to show")}</strong></p> </div> {/if} </div> <!-- posts --> <!-- blogs --> {if $system['blogs_enabled']} <div class="tab-pane {if count($results['articles']) == 1 and $totalResults == 1}active{/if}" id="articles"> {if count($results['articles']) > 0} <ul> {foreach $results['articles'] as $post} {include file='__feeds_post.tpl'} {/foreach} </ul> {else} <div class="text-center text-muted mtb10"> <img width="25%" src="{$system['system_url']}/content/themes/{$system['theme']}/images/no_results.png"> <p class="mt10 mb10"><strong>{__("No results to show")}</strong></p> </div> {/if} </div> {/if} <!-- blogs --> <!-- users --> <div class="tab-pane {if count($results['users']) == 1 and $totalResults == 1}active{/if}" id="users"> {if count($results['users']) > 0} <ul> {foreach $results['users'] as $_user} {include file='__feeds_user.tpl' _tpl="list" _connection=$_user['connection']} {/foreach} </ul> {else} <div class="text-center text-muted mtb10"> <img width="25%" src="{$system['system_url']}/content/themes/{$system['theme']}/images/no_results.png"> <p class="mt10 mb10"><strong>{__("No results to show")}</strong></p> </div> {/if} </div> <!-- users --> <!-- pages --> <div class="tab-pane {if count($results['pages']) == 1 and $totalResults == 1}active{/if}" id="pages"> {if count($results['pages']) > 0} <ul> {foreach $results['pages'] as $_page} {include file='__feeds_page.tpl' _tpl="list"} {/foreach} </ul> {else} <div class="text-center text-muted mtb10"> <img width="25%" src="{$system['system_url']}/content/themes/{$system['theme']}/images/no_results.png"> <p class="mt10 mb10"><strong>{__("No results to show")}</strong></p> </div> {/if} </div> <!-- pages --> <!-- groups --> <div class="tab-pane {if count($results['groups']) == 1 and $totalResults == 1}active{/if}" id="groups"> {if count($results['groups']) > 0} <ul> {foreach $results['groups'] as $_group} {include file='__feeds_group.tpl' _tpl="list"} {/foreach} </ul> {else} <div class="text-center text-muted mtb10"> <img width="25%" src="{$system['system_url']}/content/themes/{$system['theme']}/images/no_results.png"> <p class="mt10 mb10"><strong>{__("No results to show")}</strong></p> </div> {/if} </div> <!-- groups --> <!-- events --> <div class="tab-pane {if count($results['events']) == 1 and $totalResults == 1}active{/if}" id="events"> {if count($results['events']) > 0} <ul> {foreach $results['events'] as $_event} {include file='__feeds_event.tpl' _tpl="list"} {/foreach} </ul> {else} <div class="text-center text-muted mtb10"> <img width="25%" src="{$system['system_url']}/content/themes/{$system['theme']}/images/no_results.png"> <p class="mt10 mb10"><strong>{__("No results to show")}</strong></p> </div> {/if} </div> <!-- events --> </div> </div> <!-- left panel --> <!-- right panel --> <div class="col-lg-4"> {include file='_ads_campaigns.tpl'} {include file='_ads.tpl'} {include file='_widget.tpl'} </div> <!-- right panel --> </div> </div> <!-- content panel --> </div> </div> <!-- page content --> {include file='_footer.tpl'}
https://stackoverflow.com/questions/65815998/how-redirect-to-user-profile-with-php-and-smarty January 21, 2021 at 03:05AM
没有评论:
发表评论