PHPBB: Pekné názvy v interných odkazoch

V diskusnom fóre vložíte URL inej stránky toho istého fóra a ono sa to zobrazí nepekne ako viewtopic.php?id=blabla, a pritom PHPBB má databázu, v nej názvy vlákien, sekcií a kategórií. Prečo to doteraz autori neurobili ako INTELIGENTI, to nechápem. Liek však existuje.

phpBB logo forum

Postačí pomerne jednoduchý hack s doplnením do jediného súboru. FTPčkom si stiahnite zo zložky includes súbor functions_content.php a urobte si jeho zálohu. Pri preklepe ju vrátite ľahko naspäť. Pozor: úpravy v tomto súbore vám môžu celé fórum znefunkčniť, takže originál súboru rozhodne odložte.

Otvorte v poznámkovom bloku alebo inom jednoduchom editore kódu (nie Word ani iné takéto zverstvá). Nájdite riadok obsahujúci

 $text            = $relative_url; 

a upravte ho nasledovne

    $text            = fetch_forumtitle($url);

Potom nájdite

	$text    = htmlspecialchars($text);

a upravte na

	$text    = str_replace('&', '&', $text);

Teraz treba pridať dlhší kus kódu, musíme nájsť vhodné miesto. Nájdite riadok

 * make_clickable function

posuňte kurzor o pár riadkov vyššie, na prázdny riadok (tesne nad riadkom /**)

a tam vložte celý tento dlhý kus kódu

    /**
    *  BartVB  Show actual forumname or topic title instead of link to forum URLs
    */
    function fetch_forumtitle($url)
    {
        global $db, $auth;

        // Search for relevant URL parameters (preceded by '?' or 'amp;'
        if(preg_match_all('/(?:\?|&)([ptf])=(\d+)/', $url, $matches))
        {
            $post_id = $topic_id = $forum_id = 0;
            foreach($matches[1] as $set => $param)
            {
                switch ($param)
                {
                    case 'p':
                        $post_id = $matches[2][$set];
                        break;
                    case 't':
                        $topic_id = $matches[2][$set];
                        break;
                    case 'f':
                        $forum_id = $matches[2][$set];
                        break;
                }
            }

            if ($forum_id != 0 && !$auth->acl_get('f_read', $forum_id))
            {
                return $url;
            }

            if ($topic_id != 0 || $post_id != 0)
            {
                $sql = "SELECT
                        t.forum_id, topic_title, forum_name " . ($post_id != 0 ? ", username" : "") . "
                    FROM " .
                        ($post_id != 0 ? POSTS_TABLE . " p, " . USERS_TABLE . " u, " : "") .
                        TOPICS_TABLE . " t
                        LEFT JOIN " . FORUMS_TABLE . " f ON (t.forum_id = f.forum_id)
                    WHERE " .
                        ($post_id != 0 ? "post_id = $post_id AND p.topic_id = t.topic_id AND p.poster_id = u.user_id " : "topic_id = " . $topic_id);
                $result = $db->sql_query($sql);
                if($row = $db->sql_fetchrow($result))
                {
                    if (!$auth->acl_get('f_read', $row['forum_id']))
                    {
                        return $url;
                    }

                    $username = ($post_id != 0) ? $row['username'] . " @ " : '';
                    $forum_abbr = (preg_match('/^(\[.+\])/', $row['forum_name'], $matches)) ? $matches[1] . ' ' : '';
                    return $username . $forum_abbr . $row['topic_title'];
                }
            }
            elseif ($forum_id != 0)
            {
                $sql = "SELECT forum_name FROM " . FORUMS_TABLE . " WHERE forum_id = " . $forum_id;
                $result = $db->sql_query($sql);
                if ($row = $db->sql_fetchrow($result))
                {
                    return $row['forum_name'];
                }
            }
        }

        return $url;
    } 

Napísané na základe hacku Forum Link to Topic Title

Napísal rony