Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Найти:
<div class="linkst">
<div class="inbox">
<p class="pagelink"><?php echo $paging_links ?></p>
</div>
</div>
<?php
После добавить:
require PUN_ROOT.'include/parser.php';
Найти:
// Switch the background color for every message.
$bg_switch = ($bg_switch) ? $bg_switch = false : $bg_switch = true;
$vtbg = ($bg_switch) ? ' rowodd' : ' roweven';
После добавить:
// Perform the main parsing of the message (BBCode, smilies, censor words etc)
$message = parse_message($message, $message['hide_smilies']);
Мне кажется, так приятней выглядит.
Добавлено спустя 3 минуты 1 секунду:
Хмм... прям доп. функционал появился, можно по запросу [img] искать картинки на форуме
Добавлено спустя 10 минут 49 секунд:
Вот только напрягает тег <br /> который теперь отображается в каждом сообщении, в котором есть перенос строки. Как его скрыть?
Добавлено спустя 16 минут 34 секунды:
Черт, редактировать посты нельзя... Админы, почему?
Забыл написать, что все изменения делаются в файле search.php. И вопрос с тегом <br /> все еще в силе.
И вопрос с тегом <br /> все еще в силе.
Возможно эту строчечку стоит отключить :
$message = str_replace("\n", '<br />', pun_htmlspecialchars($search_set[$i]['message']));
т.е. не отключить, а на ее место поставить
$message = parse_message($search_set[$i]['message'], $message['hide_smilies']);
Добавлено спустя 14 минут 37 секунд:
Еще и часть строки
<dd>Replies:
заменить на
<dd><?php echo $lang_common['Replies'] ?>:
Еще и часть строки КОД заменить на КОД
Да-да, это уже давно исправлено. По крайней мере у меня...
А предложенный тобой метод по сокрытию <br /> не работает - во первых, такая строка уже есть в search.php, чуть выше по коду. Во-вторых, если пробую подставить ее вместо или после
$message = parse_message($search_set[$i]['message'], $message['hide_smilies']);
то в итоге просто перестает парсить результаты почему-то... Еще нужны идеи
Я думаю, что если это решение не дополнить "умной" обрезкой бб-кодов, то страница результатов поиска рано или поздно будет перекошена.
о, сорри, ты в итоге прав, поставил
$message = parse_message($search_set[$i]['message'], $message['hide_smilies']);
вместо своего первоначального
$message = parse_message($message, $message['hide_smilies']);
и все путем. только $message = str_replace("\n", '<br />', pun_htmlspecialchars($search_set[$i]['message'])); не нужно добавлять, т.к. повторюсь, уже есть в коде. Спасибо
Добавлено спустя 2 минуты 51 секунду:
страница результатов поиска рано или поздно будет перекошена
В каком смысле? Имеешь ввиду слишком длинные странички с результатами? Вроде не наблюдается, ищу например по запросу img а в результатах вся картинка не отображается, даже если она очень большая. Высота каждого сообщения где-то жестко задана, видимо. Они сами обрезаются.
Добавлено спустя 5 минут 13 секунд:
Постестил, пока все работает на "ура", в работе можно посмотреть на моем форуме
не нужно добавлять, т.к. повторюсь, уже есть в коде.
Я его вообще не ставил
Я думаю, что если это решение не дополнить "умной" обрезкой бб-кодов, то страница результатов поиска рано или поздно будет перекошена.
А разве найденные сообщения обрезаются? Я посмотрел результат поиска, там все сообщения целиком идут, просто не выводятся для отображения т.к. высота постов в ограничена.
Или я не прав?
Хех... Сейчас залез на форум r2d2, как чувствовал - у него уже есть эта фича
Только он сделал, что посты не режутся, а выводятся целиком. Вот в таком случае "умная обрезка" наверное пригодится
Чтобы View All Posts In Topic работал в поиске, если он у Вас там еще не работает поставте между
$per_page = ($show_as == 'posts') ? $pun_user['disp_posts'] : $pun_user['disp_topics'];
и
$num_pages = ceil($num_hits / $per_page);
вот этот код
// START Mod title: View All Posts In Topic
if ($action == 'all')
$per_page = $num_hits;
Добавлено спустя 6 минут 29 секунд:
А как сделать так, чтобы недьзя было бы искать по BB-кодам?
А разве найденные сообщения обрезаются? Я посмотрел результат поиска, там все сообщения целиком идут, просто не выводятся для отображения т.к. высота постов в ограничена.
Или я не прав?
Ничосе. Ты прав, не думал что так тупо сделано. Значит нужно резать сообщения с "умной" обрезкой, подсвечивать искомые слова.
Целиком все сообщения, просто скрытые стилем это что-то...
у меня сообщения в поисковой выдаче таки режутся, только большинство постов эту границу не достигают.
используется "интеллектуальная обрезка" с сохранением тегов.
подсветки слов нет, imho не очень оно и надо.
пример: ищем слово супер*
обратите внимание - в "хлебных крошках" видно что же мы собственно ищем. вы будете смеятся, этой ообенности в оригинальном punbb нет. вы никогда не поймете, что сделали опечатку.
Повторю вопрос на всякий случай:
А как сделать так, чтобы недьзя было бы искать по BB-кодам?
Чтоб например на поиск [ b ] ответ был - пусто.
Кто-нибудь у себя так делал?
что-то непонятно почему у вас [ b ] или [img] вообще можно искать
вродебы фрагменты кода, которые здесь приводили, должны влиять на вывод, но не на индексацию слов
в search.php есть такой фрагмент:
// Filter out non-alphabetical chars
$noise_match = array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '~', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!', '¤');
$noise_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', ' ', ' ', ' ', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '' , ' ', ' ', ' ', ' ', ' ', ' ', ' ');
$keywords = str_replace($noise_match, $noise_replace, $keywords);
в результате ключевое слово для поиска лишается символов "[" и "]" и поиск должен делаться не по тегам, а по "B" и "IMG"
такчто, imho, ребята вы сами себя обманули. ищется не картинка, а слово IMG в пути картинки, так уж получилось
при индексации теги теряются ( не все! код приводить не буду, но [ img ] должен пропасть, а [ b ] должен превратиться в b ).
остается путь до картинки... типа http: //blabla.com/img/tralibali.jpg , который индексируется как набор слов
http blabla img tralivali jpg
поправьте меня, если я ошибаюсь
скорее всего ты прав, но даже если вырезаются квадратные скобки, то основа тега - img - все равно ведь остается. Не обязательно путь до моего изображения будет иметь в названии img, но для вставки я обязан использовать тег, а стало быть по img всегда найдутся все картинки. получается, исключить поиск по img или color или size нельзя.
Добавлено спустя 5 минут 22 секунды:
при индексации теги теряются.
Если бы это было так, вряд ли бы находились изображения. Вот пример на моем форуме, поиск по img. У многих картинок в пути не встречается img.
Небольшое отступление - artoodetoo, подскажи, где прописывается обрезка постов в результатах?
Добавлено спустя 7 минут 56 секунд:
получается, исключить поиск по img или color или size нельзя.
Хотя нет, я не прав, наверное эти самые теги точно так же можно занести в "шум" и их не будет обрабатывать. Другой вопрос, не приведет ли это к каким-нибудь непредсказуемым последствиям )))
все-таки придется привести код из search_idx.php
$noise_match = array('[quote', '[code', '[url', '[img', '[email', '[color', '[colour', 'quote]', 'code]', 'url]', 'img]', 'email]', 'color]', 'colour]', '^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '~', '+', '[', ']', '{', '}', ':', '\\', '/', '=', '#', ';', '!', '*');
$noise_replace = array('', '', '', '', '', '', '', '', '', '', '', '', '', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', ' ', ' ', ' ', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '' , ' ', ' ', ' ', ' ', ' ', ' ');
$stopwords = (array)@file(PUN_ROOT.'lang/'.$pun_user['language'].'/stopwords.txt');
$stopwords = array_map('trim', $stopwords);
...
// Filter out junk
$text = str_replace($noise_match, $noise_replace, $text);
отсюда видно, что [img должен пропасть, а [ b ] останется просто как b
собственно речь не о том
Хмм... прям доп. функционал появился, можно по запросу [img] искать картинки на форуме
нет, ничего не появилось. только выводится теперь по-другому, а поиск остался каким был
Добавлено спустя 9 минут 17 секунд:
подскажи, где прописывается обрезка постов в результатах
ты про ограничение по высоте? в стилях. файл base.css
/* 7.7 Maximum height for search results as posts. Position go to post link */
DIV.searchposts DIV.postmsg {HEIGHT: 8em}
DIV.searchposts DD P {PADDING-TOP: 3em}
все-таки придется привести код из search_idx.php
Интересненько откуда такой файл взялся, а?
Вот из файла search.php условие
if (preg_match('#^[\*%]+$#', $keywords) || strlen(str_replace(array('*', '%'), '', $keywords)) < 3)
$keywords = '';
Тут я так понимаю проверяется, чтобы длина была 3 символа и больше и, чтобы строка не состояла из одних спецсимволов. Так?
Но только потом идет замена спец символов на пробелы
$noise_match = array('^', '$', '&', '(', ')', '<', '>', '`', '\'', '"', '|', ',', '@', '_', '?', '%', '~', '[', ']', '{', '}', ':', '\\', '/', '=', '#', '\'', ';', '!', '¤');
$noise_replace = array(' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '', ' ', ' ', ' ', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '' , ' ', ' ', ' ', ' ', ' ', ' ', ' ');
$keywords = str_replace($noise_match, $noise_replace, $keywords);
Т.е. если я ввел BB-код [ b ] в поиск, сначала проверяется длина =3 символам, значит все хорошо! Потом заменяются скобки на пробелы. Потом эти пробелы обрезаются
// Strip out excessive whitespace
$keywords = trim(preg_replace('#\s+#', ' ', $keywords));
И в результате ищется один символ b!!!
Это ни в какие ворота не лезет, вот так
Интересненько откуда такой файл взялся, а?
правда незнаешь? вероятно от Рикарда учите матчасть:
1) индексация — search_idx.php, функция split_words()
2) нахождение — search.php?action=search&keywords=**** и
3) вывод — search.php?search_id=###
корявости есть во всех кусках непонятно почему такая важная тема, как поиск до сих пор так мало модилась и исправлялась!!!
offtopic: мне больно и обидно, что в 1.3 новая команда не стала развивать поиск, а переложила все на MySql Filltext search. вопросов не убавилось...
вероятно от Рикарда учите матчасть:
Упс, не заметил, что в include файл search_idx.php лежит.
корявости есть во всех кусках непонятно почему такая важная тема, как поиск до сих пор так мало модилась и исправлялась!!!
Будем копать
Так вот при ближайшем рассмотрении search.php было обнаружено, что если в настройках включен мультибайт для используемой кодировки, поиск выполняется совершенно по другой ветке.
В таком случае поиску по барабану, что там за индексы слов построены в таблицах search.... Выборка SQL запросами идет прямо из таблицы posts и topics.
А у меня как раз мультибайт включен
На этом форуме посмотрел мультибайт в поиске принудительно выключен!
ууу как все запущено!
Еще одна навроде красивость:
После включения BB-кодов в результате поиска иногда показываются картинки и довольно большие
Я считаю - это не очень гуд.
Как избавиться от картинок, но оставить остальные BB-коды?
Вот: в search.php перед добавленной строчкой
require PUN_ROOT.'include/parser.php';
я добавил вот это
$pun_user['user_in_searh'] = true;
а в файле parser.php я заменил функцию
function handle_img_tag($url, $is_signature = false)
{
global $lang_common, $pun_config, $pun_user;
$img_tag = '<a href="'.$url.'"><'.$lang_common['Image link'].'></a>';
if ($is_signature && $pun_user['show_img_sig'] != '0')
$img_tag = '<img class="sigimage" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
else if (!$is_signature && $pun_user['show_img'] != '0')
$img_tag = '<img class="postimg" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
return $img_tag;
}
на эту
function handle_img_tag($url, $is_signature = false)
{
global $lang_common, $pun_config, $pun_user;
$img_tag = '<a href="'.$url.'"><'.$lang_common['Image link'].'></a>';
if (!isset($pun_user['user_in_searh']))
{
if ($is_signature && $pun_user['show_img_sig'] != '0')
$img_tag = '<img class="sigimage" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
else if (!$is_signature && $pun_user['show_img'] != '0')
$img_tag = '<img class="postimg" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
}
return $img_tag;
}
и теперь вместо вывода изображений в поиске выводятся ссылки на них, в виде <изображение>.
Страницы 1
Тема закрыта