public function smart_substr($text, $length = 200, $searchword = '') { $wordpos = joosString::strpos(strtolower($text), joosString::strtolower($searchword)); $halfside = intval($wordpos - $length / 2 - joosString::strlen($searchword)); if ($wordpos && $halfside > 0) { return '...' . joosString::substr($text, $halfside, $length) . '...'; } else { return joosString::substr($text, 0, $length); } }
/** * Главная страница компонента, вывод списка объектов * * @static * @return array */ public function index() { $search_result = array(); $total = 0; $search_word = isset(self::$param['search_word']) ? self::$param['search_word'] : ''; if (isset($_POST['search'])) { $search_word = joosRequest::post('search'); $search_word = joosText::simple_clean($search_word); $search_word = joosFilter::htmlspecialchars($search_word); joosRoute::redirect(joosRoute::href('search_word', array('search_word' => $search_word))); } $search_word = joosText::simple_clean($search_word); joosFilter::make_safe($search_word); if (strlen($search_word) > 100) { $search_word = joosString::substr($search_word, 0, 99); } if ($search_word && joosString::strlen($search_word) < 3) { $search_word = ''; } if ($search_word != '') { $results = joosDatabase::instance()->set_query("SELECT t.id, t.title,t.`fulltext` as text, t.type_id, t.type_cat_id, t.created_at, t.anons_image_id, t.file_id,'topic' AS itemtype,\n g.title AS gamename, t.game_id, g.slug AS game_slug\n FROM #__texts as t\n LEFT JOIN #__games AS g ON g.id=t.game_id\n WHERE LOWER(t.title) LIKE LOWER('%{$search_word}%') OR LOWER(t.`fulltext`) LIKE LOWER('%{$search_word}%') ")->load_object_list(); $rows = array(); $_n = count($results); for ($i = 0, $n = $_n; $i < $n; $i++) { $rows = array_merge((array) $rows, (array) $results[$i]); } $total = count($rows); for ($i = 0; $i < $total; $i++) { $text =& $rows[$i]->text; $search_words = explode(' ', $search_word); $needle = $search_words[0]; $text = modelSearch::prepare_search_content($text, 500, $needle); foreach ($search_words as $k => $hlword) { $search_words[$k] = htmlspecialchars(stripslashes($hlword), ENT_QUOTES, 'UTF-8'); } $searchRegex = implode('|', $search_words); $text = preg_replace('/' . $searchRegex . '/iu', '<span class="highlight">\\0</span>', $text); } $search_result = $rows; } $page = self::$param['page']; $pager = new joosPager(joosRoute::href('search_word', array('search_word' => $search_word)), $total, 10); $pager->paginate($page); // для первой (0) страницы и если есть результаты поиска - запишем словопоиск в базу, для дальнейших ленивых автокомплитов $total > 0 && $page == 0 ? modelSearch::add($search_word) : null; return array('search_word' => $search_word, 'search_result' => $search_result, 'pager' => $pager); }
/** * Получение системного сообщения * @return string - текст сообщения */ public static function get() { $_s = session_id(); if (!joosCore::is_admin() && empty($_s)) { session_name(joosSession::session_cookie_name()); session_start(); } $message = joosRequest::session('joostina.mosmsg', false); if ($message != '' && joosString::strlen($message) > 300) { // выводим сообщения не длинее 300 символов $message = joosString::substr($message, 0, 300); } /** @var $_SESSION array */ unset($_SESSION['joostina.mosmsg']); return $message ? '<div class="b-system_message">' . $message . '</div>' : ''; }
/** * Преобразование текстовой строки к каноничному виду * * @param string $text исходная строка * * @return string */ public static function to_canonical($text) { // приводим к единому нижнему регистру $text = joosString::strtolower($text); // убираем спецсимволы $to_del = array('~', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=', '|', '?', ',', '.', '/', ';', ':', '"', "'", '№', ' ', ' '); $text = str_replace($to_del, '', $text); // приводим одинаковое начертание к единому тексту $a = array('о', 'o', 'l', 'L', '|', '!', 'i', 'х', 's', 'а', 'р', 'с', 'в', 'к', 'е', 'й', 'ё', 'ш', 'з', 'у', 'т', 'д', 'd', 'ф', 'в', 'м', 'н', 'и', 'э', 'ь', 'ъ', 'ю'); $b = array('0', '0', '1', '1', '1', '1', '1', 'x', '$', '0', 'p', '$', 'b', 'k', 'e', 'и', 'е', 'щ', '$', 'y', 't', 't', 't', 'b', 'b', 'm', 'h', 'e', 'e', '', '', 'u'); $text = str_replace($a, $b, $text); // убираем дуУубли символов $return = $o = ''; $_l = joosString::strlen($text); for ($i = 0; $i < $_l; $i++) { $c = joosString::substr($text, $i, 1); if ($c != $o) { $return .= $c; $o = $c; } } return $return; }
/** * Проверяет что длина строки переменной входит в указанный диапазон min и max * * @param string $value * @param int $min * @param int $max * @param bool $inclusive проверять учитывая равенство величине * @return bool результат проверки соответсвия */ public static function is_length_between($value, $min, $max, $inclusive = true) { $length = joosString::strlen($value); return $inclusive ? $length >= $min && $length <= $max : $length > $min && $length < $max; }