Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2008-02-17 14:14:41

nobody
Гость

Обработка ББ-кодов в результатах поиска

Найти:

<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] искать картинки на форуме smile

Добавлено спустя     10 минут   49 секунд:
Вот только напрягает тег <br /> который теперь отображается в каждом сообщении, в котором есть перенос строки. Как его скрыть?

Добавлено спустя     16 минут   34 секунды:
Черт, редактировать посты нельзя... Админы, почему? smile
Забыл написать, что все изменения делаются в файле search.php. И вопрос с тегом <br /> все еще в силе.

#2 2008-02-17 15:02:09

Visman
Гость

Re: Обработка ББ-кодов в результатах поиска

nobody пишет:

И вопрос с тегом <br /> все еще в силе.

Возможно эту строчечку стоит отключить smile :

$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'] ?>:

#3 2008-02-17 15:42:35

nobody
Гость

Re: Обработка ББ-кодов в результатах поиска

Visman пишет:

Еще и часть строки КОД заменить на КОД

Да-да, это уже давно исправлено. По крайней мере у меня...
А предложенный тобой метод по сокрытию <br /> не работает - во первых, такая строка уже есть в search.php, чуть выше по коду. Во-вторых, если пробую подставить ее вместо или после

$message = parse_message($search_set[$i]['message'], $message['hide_smilies']);

то в итоге просто перестает парсить результаты почему-то... Еще нужны идеи smile

#4 2008-02-17 15:44:06

hcs
Гость

Re: Обработка ББ-кодов в результатах поиска

Я думаю, что если это решение не дополнить "умной" обрезкой  бб-кодов, то страница результатов поиска рано или поздно будет перекошена.

#5 2008-02-17 15:46:47

nobody
Гость

Re: Обработка ББ-кодов в результатах поиска

о, сорри, ты в итоге прав, поставил

$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'])); не нужно добавлять, т.к. повторюсь, уже есть в коде. Спасибо smile

Добавлено спустя     2 минуты   51 секунду:

hcs пишет:

страница результатов поиска рано или поздно будет перекошена

В каком смысле? Имеешь ввиду слишком длинные странички с результатами? Вроде не наблюдается, ищу например по запросу img а в результатах вся картинка не отображается, даже если она очень большая. Высота каждого сообщения где-то жестко задана, видимо. Они сами обрезаются.

Добавлено спустя     5 минут   13 секунд:
Постестил, пока все работает на "ура", в работе можно посмотреть на моем форуме wink

#6 2008-02-17 15:52:00

Visman
Гость

Re: Обработка ББ-кодов в результатах поиска

nobody пишет:

не нужно добавлять, т.к. повторюсь, уже есть в коде.

Я его вообще не ставил smile

hcs пишет:

Я думаю, что если это решение не дополнить "умной" обрезкой  бб-кодов, то страница результатов поиска рано или поздно будет перекошена.

А разве найденные сообщения обрезаются? Я посмотрел результат поиска, там все сообщения целиком идут, просто не выводятся для отображения т.к. высота постов в ограничена.
Или я не прав?

#7 2008-02-17 15:55:32

nobody
Гость

Re: Обработка ББ-кодов в результатах поиска

Хех... Сейчас залез на форум r2d2, как чувствовал - у него уже есть эта фича big_smile
Только он сделал, что посты не режутся, а выводятся целиком. Вот в таком случае "умная обрезка" наверное пригодится smile

#8 2008-02-17 16:00:30

Visman
Гость

Re: Обработка ББ-кодов в результатах поиска

Чтобы 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-кодам?

#9 2008-02-17 16:14:19

hcs
Гость

Re: Обработка ББ-кодов в результатах поиска

Visman пишет:

А разве найденные сообщения обрезаются? Я посмотрел результат поиска, там все сообщения целиком идут, просто не выводятся для отображения т.к. высота постов в ограничена.
Или я не прав?

Ничосе. Ты прав, не думал что так тупо сделано. Значит нужно резать сообщения с "умной" обрезкой, подсвечивать искомые слова.
Целиком все сообщения, просто скрытые стилем это что-то...

#10 2008-02-17 18:59:16

artoodetoo
Гость

Re: Обработка ББ-кодов в результатах поиска

у меня сообщения в поисковой выдаче таки режутся, только большинство постов эту границу не достигают.
используется "интеллектуальная обрезка" с сохранением тегов.
подсветки слов нет, imho не очень оно и надо.

пример: ищем слово супер*

обратите внимание - в "хлебных крошках" видно что же мы собственно ищем. вы будете смеятся, этой ообенности в оригинальном punbb нет. вы никогда не поймете, что сделали опечатку.

#11 2008-02-17 19:23:17

Visman
Гость

Re: Обработка ББ-кодов в результатах поиска

Повторю вопрос на всякий случай:

А как сделать так, чтобы недьзя было бы искать по BB-кодам?

Чтоб например на поиск [ b ] ответ был - пусто.
Кто-нибудь у себя так делал?

#12 2008-02-17 20:48:23

artoodetoo
Гость

Re: Обработка ББ-кодов в результатах поиска

что-то непонятно почему у вас [ b ] или [img] вообще можно искать smile
вродебы фрагменты кода, которые здесь приводили, должны влиять на вывод, но не на индексацию слов smile

в 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 в пути картинки, так уж получилось smile

при индексации теги теряются ( не все! код приводить не буду, но [ img ] должен пропасть, а [ b ] должен превратиться в b ).
остается путь до картинки... типа http: //blabla.com/img/tralibali.jpg , который индексируется как набор слов
http blabla img tralivali jpg

поправьте меня, если я ошибаюсь

#13 2008-02-17 21:08:42

nobody
Гость

Re: Обработка ББ-кодов в результатах поиска

скорее всего ты прав, но даже если вырезаются квадратные скобки, то основа тега - img - все равно ведь остается. Не обязательно путь до моего изображения будет иметь в названии img, но для вставки я обязан использовать тег, а стало быть по img всегда найдутся все картинки. получается, исключить поиск по img или color или size нельзя.

Добавлено спустя     5 минут   22 секунды:

artoodetoo пишет:

при индексации теги теряются.

Если бы это было так, вряд ли бы находились изображения. Вот пример на моем форуме, поиск по img. У многих картинок в пути не встречается img.

Небольшое отступление - artoodetoo, подскажи, где прописывается обрезка постов в результатах?

Добавлено спустя     7 минут   56 секунд:

nobody пишет:

получается, исключить поиск по img или color или size нельзя.

Хотя нет, я не прав, наверное эти самые теги точно так же можно занести в "шум" и их не будет обрабатывать. Другой вопрос, не приведет ли это к каким-нибудь непредсказуемым последствиям )))

#14 2008-02-17 21:17:21

artoodetoo
Гость

Re: Обработка ББ-кодов в результатах поиска

все-таки придется привести код из 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] искать картинки на форуме smile

нет, ничего не появилось. только выводится теперь по-другому, а поиск остался каким был

Добавлено спустя     9 минут   17 секунд:

nobody пишет:

подскажи, где прописывается обрезка постов в результатах

ты про ограничение по высоте? в стилях. файл 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}

#15 2008-02-18 04:12:27

Visman
Гость

Re: Обработка ББ-кодов в результатах поиска

artoodetoo пишет:

все-таки придется привести код из search_idx.php

Интересненько откуда такой файл взялся, а? smile

Вот из файла 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 символам, значит все хорошо! smile Потом заменяются скобки на пробелы. Потом эти пробелы обрезаются

// Strip out excessive whitespace
                    $keywords = trim(preg_replace('#\s+#', ' ', $keywords));

И в результате ищется один символ b!!!
Это ни в какие ворота не лезет, вот так smile

#16 2008-02-18 10:01:34

artoodetoo
Гость

Re: Обработка ББ-кодов в результатах поиска

Visman пишет:

Интересненько откуда такой файл взялся, а? smile

правда незнаешь? вероятно от Рикарда wink учите матчасть:
1) индексация — search_idx.php, функция split_words()
2) нахождение — search.php?action=search&keywords=**** и
3) вывод — search.php?search_id=###

корявости есть во всех кусках smile непонятно почему такая важная тема, как поиск до сих пор так мало модилась и исправлялась!!!

offtopic: мне больно и обидно, что в 1.3 новая команда не стала развивать поиск, а переложила все на MySql Filltext search. вопросов не убавилось...

#17 2008-02-18 10:08:57

Visman
Гость

Re: Обработка ББ-кодов в результатах поиска

artoodetoo пишет:

вероятно от Рикарда  учите матчасть:

Упс, не заметил, что в include файл search_idx.php лежит.

artoodetoo пишет:

корявости есть во всех кусках  непонятно почему такая важная тема, как поиск до сих пор так мало модилась и исправлялась!!!

Будем копать smile

#18 2008-02-18 15:03:45

Visman
Гость

Re: Обработка ББ-кодов в результатах поиска

Так вот при ближайшем рассмотрении search.php было обнаружено, что если в настройках включен мультибайт для используемой кодировки, поиск выполняется совершенно по другой ветке.
В таком случае поиску по барабану, что там за индексы слов построены в таблицах search.... Выборка SQL запросами идет прямо из таблицы posts и topics.

А у меня как раз мультибайт включен smile
На этом форуме посмотрел мультибайт в поиске принудительно выключен!

#19 2008-02-18 19:52:38

artoodetoo
Гость

Re: Обработка ББ-кодов в результатах поиска

ууу как все запущено!

#20 2008-02-23 14:39:37

Visman
Гость

Re: Обработка ББ-кодов в результатах поиска

Еще одна навроде красивость:
После включения BB-кодов в результате поиска иногда показываются картинки и довольно большие smile
Я считаю - это не очень гуд.

Как избавиться от картинок, но оставить остальные 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.'">&lt;'.$lang_common['Image link'].'&gt;</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.'">&lt;'.$lang_common['Image link'].'&gt;</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;
}

и теперь вместо вывода изображений в поиске выводятся ссылки на них, в виде <изображение>.

Подвал доски

Под управлением FluxBB. Хостинг Hostens