Улучшенный поиск по группам в SocialEngine Excalibur

15 августа 2009

В этой статье я расскажу, как сделать поиск по группам с такими параметрами как точный и приблизительный поиск с поиском по названию, описанию и лидеру группы. Сделать это очень просто: несколько строчек кода на php, пару sql-запросов и несколько полей в html.

Выполним пару действий шаг за шагом:

  1. Открыть: browse_groups.php
    Найти
    Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

    		else
    		{
    			$where .= " AND se_groups.group_groupcat_id='{$groupcat['groupcat_id']}'";
    			$groupsubcat = $groupcat;
    			$groupcat = $database->database_fetch_assoc($database->database_query("SELECT groupcat_id, groupcat_title FROM se_groupcats WHERE groupcat_id='{$groupcat['groupcat_dependency']}' LIMIT 1"));
    		}
    	}
    }

    Добавить после

    Подсказка: Добавьте эти строки на новой строке после ранее найденных строк.

    //GROUPS SEARCH
    if(isset($_POST['submit']) && $_POST['field_search'] != '')
    {
    	if($_POST['type_search2'] == 0)
    		$search_f = "group_title";
    	elseif($_POST['type_search2'] == 1)
    		$search_f = "group_desc";
    	else
    	{
    		$user_tb = $database->database_fetch_assoc($database->database_query("SELECT user_id FROM se_users WHERE user_fname LIKE '%" . $_POST['field_search'] . "%' LIMIT 1"));
    		$_POST['field_search'] = $user_tb[user_id];
    		$search_f = "group_user_id";
    	}
    
    	if($_POST['type_search'] == 1)
    		$search_f2 = "= '" . $_POST['field_search'] . "'";
    	else
    		$search_f2 = "LIKE '%" . $_POST['field_search'] . "%'";
    
    	$where .= " AND se_groups.{$search_f} {$search_f2}";
    }
    
    //END GROUPS SEARCH
  2. Открыть: browse_groups.tplНайти
    <div style='text-align: center; line-height: 12pt; margin-top: 5px;'>
    {lang_print}&nbsp;
    <select class='group_small' name='s' onchange="window.location.href='browse_groups.php?v={$v}&s='+this.options[this.selectedIndex].value;">
    <option value='group_totalmembers DESC'{if $s == "group_totalmembers DESC"} SELECTED{/if}>{lang_print}</option>
    <option value='group_datecreated DESC'{if $s == "group_datecreated DESC"} SELECTED{/if}>{lang_print id=2000130}</option>
    </select>
    </div>
    </div>

    Добавить после

    Подсказка: Добавьте эти строки на новой строке после ранее найденных строк.

    <form action='browse_groups.php' method='post'>
    <div style='margin-top: 10px; padding: 10px; background: #F2F2F2; border: 1px solid #BBBBBB; font-weight: bold;'>
    <div style='text-align: center; line-height: 12pt;'>Поиск групп:</div>
    <div style='text-align: left; line-height: 12pt; margin-top: 5px; border: 1px solid #BBBBBB;'>
    <input type='radio' name='type_search' value='1' CHECKED>Точный поиск
    <br>
    <input type='radio' name='type_search' value='0'>Приблизительный
    </div>
    <div style='text-align: left; line-height: 12pt; margin-top: 5px; border: 1px solid #BBBBBB;'>
    <input type='radio' name='type_search2' value='0' CHECKED>По названию
    <br>
    <input type='radio' name='type_search2' value='1'>По описанию
    <br>
    <input type='radio' name='type_search2' value='2'>По лидеру
    </div>
    <div style='text-align: center; line-height: 12pt; margin-top: 5px; '>
    <input type='input' name='field_search' value='' style='width: 180px;'>
    <br><br>
    <input type='submit' name='submit' value='Выполнить поиск'>
    </div>
    </div>
    </form>

После выполнения этих простых действий на странице обзора групп появятся новые поля для лучшего поиска групп по различным критериям.

Автор: Евтеев Евгений Александрович