#php #sql #highlighting
#php #sql #выделение
Вопрос:
У меня возникли проблемы с выделением поискового запроса в запросе. Если пользователь ищет «Иисус», все стихи, содержащие «Иисус», будут перечислены и разбиты на страницы. Я хочу выделить поисковый запрос во всех этих отрывках.
Допустим, я ищу «Иисус», и появляется около 10 стихов, я хочу, чтобы все экземпляры Иисуса на каждой странице были выделены.
Мой PHP-код:
индекс:http://pastebin.com/vTdy79er
база данных Библии:http://www.mediafire.com/?00x4fnbn1vr4nch
Я понятия не имею, как это сделать.
мой оператор выбора для моих запросов:
$searchResult = $dbLink->prepare("SELECT bsect, bname, bnum, cnum, vnum, vtext, MATCH (bname, vtext)
AGAINST ('$searchQuery' IN BOOLEAN MODE)
AS relevance
FROM kjv
WHERE MATCH (bname, vtext)
AGAINST ('$searchQuery' IN BOOLEAN MODE)
ORDER BY relevance
DESC
$limit");
Код, который фактически отображает мои результаты (название Библии, номер главы: номер стиха, а затем текст стиха:
while ($searchResult->fetch())
{
print ("<span class="results title">$bname $cnum:$vnum</span>");
print ("<p class="passage">$vtext</p>");
}
Комментарии:
1. Сократите свой пример кода до СООТВЕТСТВУЮЩЕГО подмножества. Мы не собираемся читать эту стену кода, чтобы рассказать вам, как это сделать. Покажите, что вы пытались до сих пор, и мы можем помочь это исправить.
2. Это просто набор инструкций select и цикл, ничего действительно важного. Он берет несколько полей из базы данных и отображает их.
Ответ №1:
Я полагаю, вы уже делаете это здесь:
$output = str_replace($_GET[phrase],"<font color=red>" . $_GET[phrase] . "</font>",$output);
даже если я бы предложил изменить код следующим образом:
$output = str_replace($_GET['phrase'],'<font color="red">'.$_GET['phrase'].'</font>',$output);
или еще лучше, используйте <span>
тег и класс, а затем назначьте весь CSS, который вы хотите, этому классу и упростите его изменение в будущем
РЕДАКТИРОВАТЬ / ДОБАВЛЯТЬ
с вашим последним обновленным сообщением это то, что вам нужно сделать (если я правильно понимаю ваш код)
print ("<p class="passage">$vtext</p>");
измените его на (предполагая, что $searchQuery
это переменная, содержащая строку, по которой выполняется поиск
echo '<p class="passage">'.(str_replace($searchQuery, '<font color="red">'.$searchQuery.'</font>', $vtext).'</p>';
Мне также больше нравится echo, чем print, но это личное предпочтение. Наверняка вы хотите избежать "
и использовать '
, когда это возможно, поскольку это ускорит PHP, поскольку движку не придется анализировать всю строку для поиска переменных.. но опять же, личные предпочтения
Комментарии:
1. На самом деле я просто скопировал вставил это с другого сайта, понятия не имел, что я делаю, лол.
Ответ №2:
Попробуйте это.
Плагин jQuery SearchHighlight. Демонстрация и реализация предоставляются.
Комментарии:
1. Это выглядит великолепно, скоро мы попробуем.
Ответ №3:
Я не смотрел ваш код, но что-то вроде этого должно сработать:
echo str_replace($searchWord, '<span class="highlight">' . $searchWord . '</span>', $row['verse']);