2021年1月20日星期三

How redirect to user profile with PHP and Smarty?

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

没有评论:

发表评论