Поиск по сайту
Итак, выяснилось, что справедливости в мире не существует целиком ссылки hostcms в базе не хранит, так что пришлось извращаться.
Наглядно: в случае ссылки https://alexp.cf/26/9/187/ — я, после анализа базы, разделил её на следующие компоненты:
1. хост.
2. 26 — поле "structure_id" из таблицы "informationsystems".
3. 9 — поле "path" из таблицы "informationsystem_groups".
4. 187 — поле "id" из таблицы "informationsystem_items".
Различный же текст, который добавляется при добавлении статьи на сайт — хранится в полях: "name" (заголовок), "description" (лид) и "text" (кто бы мог подумать! — текст) таблицы "informationsystem_items".
Исходя из этого — было принято волевое решение написать поиск на php + mysql.
Итак, в макете сайта добавляем секцию css (просто организуем себе отступ от левого края, чтобы вывод поисковой страницы был читабельнее):
<style type="text/css">
srch
{
display: block;
margin-left: 10px;
}
</style>
Затем делаем отдельный субмакет для страницы поиска, где вырезаем всё лишнее. Думаю как жамкать на delete объяснять никому не нужно?
Добавляем в ебеня нужное место поле и кнопку поиска:
<form name="search" method="post" action="/search/">
<input type="text" name="query" class="query" placeholder="поиск">
<input type="submit" name="submit" value="найти">
</form>
Идем в структуру нашей расчудесной cms и делаем соответствующую (/search/) динамическую страницу.

А теперь немного магии php:
<?php //стартуем, епт
$query = $_POST['query'];
$link = mysqli_connect("localhost", "username", "password", "db_name"); //серьёзно, вы думали тут будет пароль?
$sql = "SELECT name, description FROM informationsystem_items WHERE name LIKE '%$query%' OR description LIKE '%$query%' OR text LIKE '%$query%'"; //собственно так мы будем искать
$query = trim($query); //этими строками
$query = mysqli_real_escape_string($link,$query); //чистим ввод
$query = htmlspecialchars($query); //от нежелательных символов
if ($link == false){
print("<srch>"."Ошибка: Невозможно подключиться к MySQL " . mysqli_connect_error()."</srch>"); //всё пропало, шеф (если серьезно mysqli_connect_error() скажет где конкретно мы накосячили)
}
else {
$result = mysqli_query($link, $sql); //погнали, не забываем про параметры
}
if ($result == false) {
print("<srch>"."Произошла ошибка при выполнении запроса"."</srch>"); //ну, мало ли...
}
else
if (!empty($query)) //если запрос не пустой — работаем дальше
{
if (strlen($query) < 3) //слишком короткие запросы не ищем, нам нужно хотя бы найти слово из трёх букв
{
print("<srch>".'Слишком короткий поисковый запрос'."</srch>");
}
else if (strlen($query) > 60) //думаю ограничения в 60 символов хватит
{
print("<srch>".'Слишком длинный поисковый запрос'."</srch>");
}
else if (mysqli_affected_rows($link) == 0) //не нашли ни одной строки?
{
print("<srch>".'По вашему запросу ничего не найдено'."</srch>");
}
else //ну а если нашли...
{
while ($row = mysqli_fetch_row($result)){ //пока читаем
$sqlink0 = "SELECT structure_id FROM informationsystems WHERE id = (SELECT informationsystem_id FROM informationsystem_items WHERE name LIKE '$row[0]')"; //забираем
$qlink0 = mysqli_query($link, $sqlink0); //значение полей
$row0 = mysqli_fetch_row($qlink0); //для формирования ссылки
$sqlink1 = "SELECT path FROM informationsystem_groups WHERE id = (SELECT informationsystem_group_id FROM informationsystem_items WHERE name LIKE '$row[0]')"; //забираем
$qlink1 = mysqli_query($link, $sqlink1); //значение полей
$row1 = mysqli_fetch_row($qlink1); //для формирования ссылки
$sqlink2 = "SELECT id FROM informationsystem_items WHERE name LIKE '$row[0]'"; //забираем
$qlink2 = mysqli_query($link, $sqlink2); //значение полей
$row2 = mysqli_fetch_row($qlink2); //для формирования ссылки
if ($row0[0] == 9) //вот тут стоит оговориться — информационная система на главной не подставляет в ссылку structure_id
{
print("<srch>"."<a href=../$row1[0]/$row2[0]>"."<u>".$row[0]."</u>"."</a>".$row[1]."<br />"."</srch>"); //так что и мы его не берём
}
else
print("<srch>"."<a href=../$row0[0]/$row1[0]/$row2[0]>"."<u>".$row[0]."</u>"."</a>".$row[1]."<br />"."</srch>"); //а тут — берём, потому что ИС другие
}
}
}
else
{
print("<srch>".'Задан пустой поисковый запрос'."</srch>"); //не стоит и этого исключать
}
?>
Да, я сделал поиск по тексту, но не сделал вывод его на страницу поиска. Это потому что так загадочнее и интереснее я ленивая жопа.