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.
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
[php] $text = $relative_url; [/php]
a upravte ho nasledovne
[php] $text = fetch_forumtitle($url);[/php]
Potom nájdite
[php] $text = htmlspecialchars($text);[/php]
a upravte na
[php] $text = str_replace(‚&‘, ‚&‘, $text);[/php]
Teraz treba pridať dlhší kus kódu, musíme nájsť vhodné miesto. Nájdite riadok
[php] * make_clickable function[/php]
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
[php]
/**
* 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;
}
[/php]
Napísané na základe hacku Forum Link to Topic Title