added frontend search functionality with a small menubar
🚀 Deploy website on push / 🎉 Deploy (push) Successful in 23s
🚀 Deploy website on push / 🎉 Deploy (push) Successful in 23s
Signed-off-by: rodude123 <rodude123@gmail.com>
This commit is contained in:
Vendored
+75
-10
@@ -444,22 +444,87 @@ class blogData
|
||||
|
||||
if ($result)
|
||||
{
|
||||
$bodyText = array_column($result, "bodyText");
|
||||
// go through each body plain text and get the sentence before, the sentence with the search term and the sentence after and append it to a new array
|
||||
foreach ($bodyText as $key => $text)
|
||||
for ($i = 0; $i < count($result); $i++)
|
||||
{
|
||||
$text = strtolower($text);
|
||||
$searchTerm = strtolower($searchTerm);
|
||||
$pos = strpos($text, $searchTerm);
|
||||
$start = strrpos(substr($text, 0, $pos), ".") + 1;
|
||||
$end = strpos($text, ".", $pos);
|
||||
$result[$key]["bodyText"] = substr($text, $start, $end - $start);
|
||||
$result[$i]["abstract"] = $this->getShortPost($searchTerm, stripcslashes($result[$i]["bodyText"]));
|
||||
}
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
return array("errorMessage" => "Error, could not find posts");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the short post with the search term
|
||||
* @param string $searchTerm - Search term
|
||||
* @param $text - Body of the post as plain text
|
||||
* @return string - Short post with the search term
|
||||
*/
|
||||
private function getShortPost(string $searchTerm, $text): string
|
||||
{
|
||||
$pattern = '/([,:;!?.-]+)/u';
|
||||
$parts = preg_split($pattern, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
|
||||
|
||||
$cleanedParts = [];
|
||||
|
||||
foreach ($parts as $part)
|
||||
{
|
||||
$part = trim($part); // Remove leading/trailing spaces and newline characters
|
||||
if (!empty($part))
|
||||
{
|
||||
$cleanedParts[] = $part;
|
||||
}
|
||||
}
|
||||
|
||||
$combinedParts = [];
|
||||
$currentPart = '';
|
||||
|
||||
foreach ($cleanedParts as $part)
|
||||
{
|
||||
if (preg_match('/[,:;!?.-]/u', $part))
|
||||
{
|
||||
$currentPart .= $part;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!empty($currentPart))
|
||||
{
|
||||
$combinedParts[] = trim($currentPart);
|
||||
}
|
||||
$currentPart = rtrim($part);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($currentPart))
|
||||
{
|
||||
$combinedParts[] = trim($currentPart);
|
||||
}
|
||||
|
||||
$result = "";
|
||||
|
||||
|
||||
for ($i = 0; $i < count($combinedParts); $i++)
|
||||
{
|
||||
$part = $combinedParts[$i];
|
||||
|
||||
if (stripos($part, $searchTerm) !== false)
|
||||
{
|
||||
$before = ($i > 0) ? $combinedParts[$i - 1] : "";
|
||||
$after = ($i < count($combinedParts) - 1) ? $combinedParts[$i + 1] : "";
|
||||
|
||||
if ($before === "" && $i > 0)
|
||||
{
|
||||
$before = $combinedParts[$i - 1];
|
||||
}
|
||||
|
||||
$result = $before . " " . $part . " " . $after;
|
||||
|
||||
// If the search term is found, we don't need to continue checking subsequent parts
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user