phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

FAQFAQ - PIERWSZA POMOC!!  regulaminREGULAMIN  SzukajSZUKAJ  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload  katalog Forów DyskusyjnychKatalog Forów   FAQ Video tutoriale

Poprzedni temat «» Następny temat
Przesunięty przez: Matteo
09-11-2013, 09:29
Find Similar Topics
Autor Wiadomość
Knofel



Pomógł: 69 razy
Posty: 796
Wysłany: 31-07-2007, 19:06   Find Similar Topics

Pytał o to barteq więc napisałem.

Tak jak w opisie, modyfikacja wyświetli na ekranie x tematów podobnych do tego który aktualnie przeglądamy.

Jak to działa... Modyfikacja pobiera z bazy wszystkie tematy które zawierają w sobie wyrazy (dłużesz niż 3 znaki) z tematu w którym jesteśmy, następnie funkcją similar_text() sprawdza stopień ich "pokrewieństwa" i wyświetla na ekranie te które wg niej są najbardziej podobne. Nic wielkiego ale zawsze coś.

Stosowanie tej modyfikacji na forach z "typowymi" tematami nie ma raczej większego sensu, no ale kto wie:

No to do rzeczy:
Otwieramy plik viewtopic.php i znajdujemy w nim:

Kod:
$template->pparse('body');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>

przed tym wstawiamy:
Kod:
// BEGIN FIND SIMILAR TOPICS
$fst_row = 2;
$similar_topic_title = trim($topic_title);
$similar_topic_title = str_replace(array('\'', '"'), array('', ''), $similar_topic_title);
$topic_parts = explode(" ", $similar_topic_title);
$all_proper_words = count($topic_parts);

for( $x=0; $x<$all_words; $x++ )
    {
        if( strlen($topic_parts[$x] > 3) )
            {
                $proper_words[] = $topic_parts[$x];
                $all_proper_words++;
            }
    }
$x = 0;
for( $x=0; $x<$all_proper_words; $x++ )
    {
        if( $x == $all_proper_words-1 )
            { $find_words .= "topic_title LIKE '%".$proper_words[$x]."%' "; }
        else
            { $find_words .= "topic_title LIKE '%".$proper_words[$x]."%' OR "; }
    }

$sql = "SELECT topic_id, topic_title FROM " . TOPICS_TABLE . " WHERE " . $find_words;

    if ( !($result = $db->sql_query($sql)) )
        { message_die(GENERAL_ERROR, 'Could not query posts table', '', __LINE__, __FILE__, $sql); }

    while( $row = $db->sql_fetchrow($result) )
        {    
            $similarity_level = similar_text($topic_title, $row['topic_title'] );
                if( $similarity_level < 10 ) { $similarity_level = '0'.$similarity_level; }
            $similar_topics[] =  ( $row['topic_title'] != $topic_title ) ? $similarity_level."<>".$row['topic_id']."<>".$row['topic_title'] : '';
        }
    rsort($similar_topics);

    for( $y==0; $y<=5; $y++ ) // Zamiast 5 wstawcie ile chcecie - To jest ilość podobnych tematów wyświetlanych na ekranie
        {
           
            $fst_row = ( $fst_row == 2 ) ? 1 : 2;
            $topic_title = explode("<>", $similar_topics[$y]);

            $topic_link = append_sid('viewtopic.php?t='.$topic_title[1]);
            $topic_title = $topic_title[2];

            $template->assign_block_vars('fst', array(
                'FST_TOPIC_LINK' => $topic_link,
                'FST_TOPIC_TITLE' => $topic_title,
                'FST_CLASS' => $fst_row
            ));
        }
// END FIND SIMILAR TOPICS

Zapisujemy i zamykamy plik. Otwieramy: viewtopic_body.tpl i znajdujemy w nim:
Kod:
<table width="100%" cellspacing="2" cellpadding="2" border="0" align="center">
   <tr>
      <td align="left" valign="middle" class="nav"><span class="nav" style="color: #08A5CE;"><a href="{U_INDEX}" class="nav">{L_INDEX}</a>{NAV_CAT_DESC}</span></td>

I wklejamy przed tym:
Kod:
<br />
<table width="100%" cellspacing="1" cellpadding="2" border="0" align="center" class="forumline">
    <tr><th class="catTitle">Podobne Tematy</th></tr>
        <!-- BEGIN fst -->
    <tr><td class="row{fst.FST_CLASS}"><a class="postlink" target="_BLANK" href="{fst.FST_TOPIC_LINK}">{fst.FST_TOPIC_TITLE}</a></td></tr>
        <!-- END fst -->
       <tr><td class="row2">&nbsp;</td></tr>
</table>


Demo na moim forum
_________________
Reklamuje swoje forum
Ostatnio zmieniony przez Polaczek 20-08-2010, 20:21, w całości zmieniany 5 razy  
 
     
Gadatliwa Kasia 

   
barteq

Posty: 46
Wysłany: 31-07-2007, 22:31   

Knofel, dzieki wielkie! jestes mistrzem ;d nie moge Ci dac zadnego plusa :D ale zapamietam to sobie ;D
_________________
People always ask me, "Are you a lover or a fighter?"
I answer "both" because I fight for love.

http://PutImg.Org - Free Image Hosting and Photo Sharing
 
     
Radek



Pomógł: 955 razy
Posty: 4614
Wysłany: 31-07-2007, 22:37   

Knofel napisał/a:
Modyfikacja pobiera z bazy wszystkie tematy które zawierają w sobie wyrazy (dłużesz niż 3 znaki) z tematu w którym jesteśmy,

Czyli ? Bierzesz pod uwage wyrazy z tytulu tematu czy z postów w temacie ?
 
     
barteq

Posty: 46
Wysłany: 31-07-2007, 22:40   

z tego co zrozumialem, to z tytulu tematu i szuka podobnych ;>
_________________
People always ask me, "Are you a lover or a fighter?"
I answer "both" because I fight for love.

http://PutImg.Org - Free Image Hosting and Photo Sharing
 
     
pio32


Pomógł: 11 razy
Posty: 212
Wysłany: 31-07-2007, 23:40   

U mnie wszystko się pojawia, oprócz wyświetlania tematów, które są podobne, chyba że po prostu ich nei znajduje

edit: to był mój błąd, ale w pewnych tematach pokazuje np. coś takiego
Kod:
Could not query posts table

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

SELECT topic_id, topic_title FROM phpbb_topics WHERE topic_title LIKE '%Jacka%' OR

Line : 2984
File : viewtopic.php
_________________
Noc, matka dnia
 
     
Knofel



Pomógł: 69 razy
Posty: 796
Wysłany: 01-08-2007, 08:09   

RuseK, tak jak prosił barteq, modyfikacja porównuje tylko tematy.

P.S Póki co zrezygnowałem ze sprawdzania długości wyrazu - źle do tego podszedłem i jeśli ostatni wyraz był krótszy niż 3 znaki to wywalał błąd - ale to chyba i tak nie ma znaczenia. Update* w pierwszym poście

* Nadpisać kod z pliku viewtopic.php
_________________
Reklamuje swoje forum
 
     
Bonzaj


Posty: 55
Wysłany: 01-08-2007, 16:35   

Poprostu super, u mnie też można zobaczyć jak działa.
Thx Knofel.
_________________
Portal Hodowców Drobiu Ozdobnego
 
     
pio32


Pomógł: 11 razy
Posty: 212
Wysłany: 01-08-2007, 18:29   

Knofel, dzięki, aktualnie działa, niektóre podobieństwa nawet śmiechowe są ;)
_________________
Noc, matka dnia
 
     
barteq

Posty: 46
Wysłany: 07-08-2007, 01:11   

hm.. u mnie nie do konca znajduje podobne tematy:) no ale :P

a mozna prosic aby wyswietlal jeszcze:

oprocz nazwy tematu i linku:

Cytat:
Nazwa (jako link) - Autor wątku (jego nick i link do profilu) - Forum (nazwa forum w ktorym sie znajduje + link do tego) - Odpowiedzi (ilosc odpowiedzi w tym "podobnym" temacie)


? to juz w ogole wygladaloby bajerancko, mimo, ze nie dziala jak nalezy :)
_________________
People always ask me, "Are you a lover or a fighter?"
I answer "both" because I fight for love.

http://PutImg.Org - Free Image Hosting and Photo Sharing
 
     
yasiu


Pomógł: 12 razy
Posty: 206
Wysłany: 09-08-2007, 17:23   

Faktycznie trzeba by nad tym jeszcze popracować, aby modyfikacja była Super.

Jak na razie obserwuję wiele tematów nie jest wcale podobna do przeglądanego.
Gratuluję pomysłu i liczę że system porównywania się trochę usprawni.

DODANO:

Niestety zmuszony byłem usunąć modyfikację ze względu na pojawianie się tematów które są w działach ukrytych i nie ma się do niego dostępu. Owszem wyświetla się tylko nazwa tematu bo próbując wejść pokazuje że nie masz uprawnień ale uważam to za wielką wadę ;)
 
     
Bonzaj


Posty: 55
Wysłany: 09-08-2007, 17:39   

yasiu napisał/a:
pojawianie się tematów które są w działach ukrytych


Ooo, nie zauważyłem. :/
Potrzebna szybka poprawka.Knofel prosimy.
_________________
Portal Hodowców Drobiu Ozdobnego
 
     
Centurion



Pomógł: 543 razy
Posty: 1972
Wysłany: 12-08-2007, 08:42   

mozna w viewtopic.php zamiast
Kod:
$sql = "SELECT topic_id, topic_title FROM " . TOPICS_TABLE . " WHERE " . $find_words;

dac
Kod:
SELECT topic_id, topic_title FROM " . TOPICS_TABLE . " WHERE forum_id = " . $forum_id . " AND " . $find_words;


wtedy bedzie szukal podobnych tylko w tym samym forum co rozwiaze problem z niepowolanym dostepem
_________________
Poza forum pomagam tylko odpłatnie
• przenoszenie/łączenie/naprawianie baz danych
• instalacja/pisanie modów, aktualizacja for z zachowaniem modów
• programowanie php/mysql
 
     
azwel


Pomógł: 41 razy
Posty: 402
Wysłany: 12-08-2007, 12:46   

Knofel napisał/a:
for( $x==0; $x<$all_words; $x++ )

Kod:
$x==0
:?:
_________________
Bezpłatnie pomagam na forum. Jeśli to za mało to zapraszam do skorzystania z płatnych usług.
 
     
pio32


Pomógł: 11 razy
Posty: 212
Wysłany: 12-08-2007, 14:35   

Centurion napisał/a:
wtedy bedzie szukal podobnych tylko w tym samym forum co rozwiaze problem z niepowolanym dostepem

Ale w tym momencie ogranicza poszukiwanie podobnych do jednego forum tylko, a da radę żeby też inne wyszukiwał, bez pokazywania ukrytych?
_________________
Noc, matka dnia
 
     
Gadatliwa Kasia 

   
Morgus

Pomógł: 3 razy
Posty: 14
Wysłany: 13-08-2007, 16:30   

A dałoby się to tak przerobić, aby wyszukiwał w określonym forum i przeszukiwał także pierwsze posty ?
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Kopiowanie wszelkich treści zawartych na forum, modyfikacji oraz instrukcji bez zgody administracji i autorów tematów/postów zabronione!

Powered by phpBB modified by Przemo © 2003 phpBB
Strona wygenerowana w 0,1 sekundy. Zapytań do SQL: 13
Polecane serwisy

Najlepsze oprogramowanie do prowadzenia sklepu internetowegoNajlepszy program do sklepu firmowany przez Przem'a

Sklep z gadżetami

serwis laptopów

phpbb

Design Cart - Tworzenie sklepu internetowego

iRonin.IT

• Zamów reklamę