Výpis novinek z fóra na jiné stránce

Zde můžete diskutovat o nové verzi phpBB nebo jejím překladu.
McLaren
Příspěvky: 6
Registrován: sob 07. led 2006 1:00:00

Výpis novinek z fóra na jiné stránce

Příspěvek od McLaren » čtv 07. úno 2008 21:10:58

Zdravím,

potřeboval bych kód na výpis novinek z fóra phpBB3 které budu vypisovat v iframu na jiné stránce. Stejně jak to mám třeba zde: http://www.n73.eu/

Kód pro výpis novinek pro phpBB2 můžu dodat, neuměl by ho někdo prosím upravit nebo udělat nový ?

děkuji

ameeck
Příspěvky: 6425
Registrován: ned 06. lis 2005 1:00:00

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od ameeck » čtv 07. úno 2008 22:31:20

Je to rychle napsané, ale funguje, jediné co budeš muset dodělat jsou styly, stačí tam ale přidat ty co máš v tom svém iframu, zbytek HTML je téměř stejný. Ulož to do soubor newest_posts.php, který nahraješ do rootu fóra, pak už jen můžeš na něj odkázat iframem.

Kód: Vybrat vše

<?php
/** 
* newest_posts - raw dump of newest posts from forum
*
* @copyright (c) 2008 phpBB.cz
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
*/
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

// Number of posts and grabbing permissions
// Počet příspěvků pro zobrazení a oprávnění
$topic_limit = request_var('topic_limit', 5);
$forums = array_unique(array_keys($auth->acl_getf('f_read', true)));

// Select the last topics to which we have permissions
// Vybrat poslední témata ke kterým máme oprávnění
$sql = 'SELECT p.post_id, p.topic_id, p.forum_id, p.post_subject, p.post_time, u.username
                FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . ' u
                WHERE post_approved = 1
                    AND ' . $db->sql_in_set('forum_id', $forums) . '
                    AND u.user_id = p.poster_id
                ORDER BY post_time DESC
                LIMIT 0,' . $topic_limit;
$result = $db->sql_query($sql);

// Proper header since output not buffered
// Poslat hlavičky pro správné kódování, protože výpis obsahu je postupný
header('Content-Type: text/html; charset=utf-8');

// Now let's output the content
// A teď vypsat obsah
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Poslední příspěvky z fóra</title></head><body><div id="post_content"><strong>Novinky z fora:</strong><br/><ul>';
while ($row = $db->sql_fetchrow($result))
{
    $url = generate_board_url() . "/viewtopic.{$phpEx}?f={$row['forum_id']}&t={$row['topic_id']}&p={$row['post_id']}#p{$row['post_id']}";
    echo '<li><a target="_top" href="' . $url . '">' . $row['post_subject'] . '</a> od ' . $row['username'] . ' v ' . $user->format_date($row['post_time']) . '</li>';
}
echo '</ul></div></body></html>';
?>

McLaren
Příspěvky: 6
Registrován: sob 07. led 2006 1:00:00

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od McLaren » pát 08. úno 2008 16:43:49

Díky moc, máš to u mě. Pánbůh ti to oplatí na dětech! :-)

Akorád mi tam nefunguje položka "Od" - jméno odesílatele :-(

ameeck
Příspěvky: 6425
Registrován: ned 06. lis 2005 1:00:00

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od ameeck » pát 29. úno 2008 21:45:43

Omlouvám se, že až nyní, ale teď je ten skript opravený v tom předchozím příspěvku, zobrazuje se i autor.

adminsao
Příspěvky: 36
Registrován: úte 18. bře 2008 16:12:40

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od adminsao » úte 18. bře 2008 16:37:22

Po několikadenním googlování a marné snaze narvat "NV recent topics" na portal místo na index (koliduje s něčím jiným co tam už na portalu je a dělá bílou stránku) se zabývám myšlenkou jak dostat výše uvedený ameeckův kód na portál.

Potřebuju zde: -link (3-kový portál)
vytvořit něco podobného jako zde: -link (2-kový portál)

S tím že do původních portálových "latest news" (3-kový portál) budu tahat (nastavení v ACP) jen adminoznámenípříspěvky z určité části/sekce fóra. Recent topics který už na tom portále je je skutečný recent topics tj. zobrazuje opravdu poslední ZALOŽENÉ topicy. A já potřebuji spíše něco jako je (doufám) popsáno v tomto kódu tj. to co je na fóru viz. druhý link v tabulce vlevo označeno jako "Nové příspěvky".

Zjednodušeně proklikávací odkaz s názvem topicu (nejlépe na poslední příspěvek v tom topicu) + výpis od koho + datum toho posledního příspěvku do toho tématu.

Teď jde o to jak to dostat na portal. Volat přímo z templatu a iframovat to v nově vytvořeném template bloku na portálu?

Nebo spíš doplnit ten kód o ty záhadné "set template array", includovat newest_posts.php do portal.php a v samotném nově vytvořeném bloku template portálu volat hodnoty "set template array". Myslím, že tento druhý způsob by více odpovídal filozofii phpbb. Bohužel jsem pololaik (chcete li pololama) a nevím jak doupravit výše popsaný kód. Pokud někdo poradíte či mírně nakopnete správným směrem předem dík.

edit: Teď jsem si všimnul, že tento kód pravděpodobně generuje titulek (předmět?) posledního příspěvku a ne název topicu kde je poslední příspěvek. Hmmmmm....
Naposledy upravil(a) adminsao dne čtv 20. bře 2008 23:27:11, celkem upraveno 1 x.

adminsao
Příspěvky: 36
Registrován: úte 18. bře 2008 16:12:40

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od adminsao » čtv 20. bře 2008 23:45:50

Už jsem chtěl jásat a zas nic..........

adminsao
Příspěvky: 36
Registrován: úte 18. bře 2008 16:12:40

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od adminsao » sob 22. bře 2008 10:33:05

ameeck píše:Pročti si v tom instalačním souboru Installation notes, je tam toho dost k nastavení :-)
No ale bude ten kód pro 2 fungovat i na 3?

Spíš mě šlo o to ten 3kový kód (uvedený jako první nahoře) vložit "include_once........" do portal.php. A v ten původní kód upravit. Předpokládám, že pro mé účely bych mohl vypustit hlavičky pro správné kódování, a od DOCTYPE po UTF-8, z tabulky načíst i název topicu ve kterém je poslední příspěvek (jenže ehm jak ho přiřadit k tomu správnému poslednímu příspěvku tak aby se zobrazoval název topicu ve kterém je poslední příspěvek a ne předmět posledního příspěvku), a na konci kódu to doplnit o template - assign vars array..........

které bych potom volal k zobrazení v template portálu.

Bylo by to tak správně? Jak to správně provést a něco ne..... .

ameeck
Příspěvky: 6425
Registrován: ned 06. lis 2005 1:00:00

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od ameeck » sob 22. bře 2008 10:41:53

Pomíchali se nám tu dvě témata, už jsem je rozdělil :) Toho dvojkového kódu si nevšímej, ten tu není relevantní a nebude fungovat tady :-)

Přímo v kódu by se dalo použít toto:

Kód: Vybrat vše

// Number of posts and grabbing permissions
// Počet příspěvků pro zobrazení a oprávnění
$topic_limit = request_var('topic_limit', 5);
$forums = array_unique(array_keys($auth->acl_getf('f_read', true)));

// Select the last topics to which we have permissions
// Vybrat poslední témata ke kterým máme oprávnění
$sql = 'SELECT p.post_id, p.topic_id, p.forum_id, p.post_subject, p.post_time, u.username
                FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . ' u
                WHERE post_approved = 1
                    AND ' . $db->sql_in_set('forum_id', $forums) . '
                    AND u.user_id = p.poster_id
                ORDER BY post_time DESC
                LIMIT 0,' . $topic_limit;
$result = $db->sql_query($sql);

// Now let's output the content
// A teď vypsat obsah
while ($row = $db->sql_fetchrow($result))
{
        $template->assign_block_vars('last_topics', array(
            'LAST_TOPIC_NAME' => $row['post_subject'],
            'LAST_TOPIC_URL' => generate_board_url() . "/viewtopic.{$phpEx}?f={$row['forum_id']}&t={$row['topic_id']}&p={$row['post_id']}#p{$row['post_id']}",
            'LAST_TOPIC_NAME' => $row['username'],
            'LAST_TOPIC_TIME' => $user->format_date($row['post_time']),
        ));
}
$db->sql_freeresult($result);
 
Ten výpis poslední témat bude dostupný pod polem last_topics, nějak si to tam už seřadíš do templatu, takhle mi to mohlo teoreticky vypadat:

Kód: Vybrat vše

<ul>
<!-- BEGIN last_topics -->
<li>
<a href="{last_topics.LAST_TOPIC_URL}">{last_topics.LAST_TOPIC_NAME}</a> od {last_topics.LAST_TOPIC_NAME} v {last_topics.LAST_TOPIC_TIME}
</li>
<!-- END last_topics -->
</ul>

adminsao
Příspěvky: 36
Registrován: úte 18. bře 2008 16:12:40

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od adminsao » sob 22. bře 2008 15:20:47

Dík, dík, dík a ještě jednou dík.

Zdá se, že je to na dobré cestě. -viz. tady

Jenom bych chtěl upozornit pokud si někdo budete kopírovat ten kód (nad tímto příspěvkem) pozor na dvakrát stejné last_topic_name v poli a v kódu do templatu. Jedno z nich přejmenovat v obou kouscích kódu! (při ponechání logicky vypisuje v template/výstupu "username" i na místě "post_subject").

K úplné dokonalosti tomu chybí:
-odstranit duplicitu: Pokud jsou v některém tématu tři po sobě jdoucí nejnovější příspěvky tak se ve výpisu zobrazí všechny tři a možná by stačil jen ten poslední nejnovější z toho tématu.

-místo "post_subject" tam dostat "topic title" toho topicu v němž se nachází nový příspěvek. To jsem bohužel neúspěšně zkoušel. Snažil jsem se inspirovat jedním blokem co už na portálu je a do selectu jsem přidal "topic_title", do from . TOPICS_TABLE . , a v poli místo "post_subject" jsem dal "topic_title" - výsledkem je:
FILE: includes/db/mysql.php
LINE: 158 ............................ $this->sql_error($query);
CALL: dbal_mysql->sql_error()

FILE: portal.php
LINE: 265 ........................... $result = $db->sql_query($sql);
CALL: dbal_mysql->sql_query()

a píše to něco o špatné SQL syntaxi, ale proč v tom kódu jiného bloku portálu to funguje? Asi to nebude tak jednoduché jak si myslím. :evil:

pozitkar
Příspěvky: 1
Registrován: sob 22. bře 2008 22:39:52

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od pozitkar » sob 22. bře 2008 22:44:16

Jestli mohu malou prosbu ... zobrazování posledních příspěvků nebo témat na stránce portálu řeším pomocí RSS, ale na Vaší stránce jsem si všimnul, že používáte části kódu phpBB pro zobrazení např. dění na fóru (kdo je online, boti atd.). V kódu phpBB3 se moc nevyznám ... prozradíte postup?
Předem dík.

SkIpPeR
Příspěvky: 56
Registrován: úte 08. dub 2008 16:24:23

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od SkIpPeR » čtv 10. dub 2008 20:10:03

ameeck píše:Je to rychle napsané, ale funguje, jediné co budeš muset dodělat jsou styly, stačí tam ale přidat ty co máš v tom svém iframu, zbytek HTML je téměř stejný. Ulož to do soubor newest_posts.php, který nahraješ do rootu fóra, pak už jen můžeš na něj odkázat iframem.

Kód: Vybrat vše

<?php
/** 
* newest_posts - raw dump of newest posts from forum
*
* @copyright (c) 2008 phpBB.cz
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
*/
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

// Number of posts and grabbing permissions
// Počet příspěvků pro zobrazení a oprávnění
$topic_limit = request_var('topic_limit', 5);
$forums = array_unique(array_keys($auth->acl_getf('f_read', true)));

// Select the last topics to which we have permissions
// Vybrat poslední témata ke kterým máme oprávnění
$sql = 'SELECT p.post_id, p.topic_id, p.forum_id, p.post_subject, p.post_time, u.username
                FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . ' u
                WHERE post_approved = 1
                    AND ' . $db->sql_in_set('forum_id', $forums) . '
                    AND u.user_id = p.poster_id
                ORDER BY post_time DESC
                LIMIT 0,' . $topic_limit;
$result = $db->sql_query($sql);

// Proper header since output not buffered
// Poslat hlavičky pro správné kódování, protože výpis obsahu je postupný
header('Content-Type: text/html; charset=utf-8');

// Now let's output the content
// A teď vypsat obsah
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Poslední příspěvky z fóra</title></head><body><div id="post_content"><strong>Novinky z fora:</strong><br/><ul>';
while ($row = $db->sql_fetchrow($result))
{
    $url = generate_board_url() . "/viewtopic.{$phpEx}?f={$row['forum_id']}&t={$row['topic_id']}&p={$row['post_id']}#p{$row['post_id']}";
    echo '<li><a target="_top" href="' . $url . '">' . $row['post_subject'] . '</a> od ' . $row['username'] . ' v ' . $user->format_date($row['post_time']) . '</li>';
}
echo '</ul></div></body></html>';
?>
Zdar pls nevíš jak to udělat aby se mi zobrazovali příspěvky jen z určitého fora, prostě do kodu přidat něco aby se tam zadalo id fora a vypisovalo se to z něj, díky
WWW.BLINDS.TÝM.CZ
vévévé tečka blajnts tým tečka cé zed

ameeck
Příspěvky: 6425
Registrován: ned 06. lis 2005 1:00:00

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od ameeck » čtv 10. dub 2008 20:59:26

Ten dotaz v tom skriptu uprav aby vypadal takto:

Kód: Vybrat vše

$sql = 'SELECT p.post_id, p.topic_id, p.forum_id, p.post_subject, p.post_time, u.username
                FROM ' . POSTS_TABLE . ' p , ' . USERS_TABLE . ' u
                WHERE post_approved = 1
                    AND ' . $db->sql_in_set('forum_id', $forums) . '
                    AND u.user_id = p.poster_id
                    AND p.forum_id = X
                ORDER BY post_time DESC
                LIMIT 0,' . $topic_limit;
$result = $db->sql_query($sql); 
Pak akorát nahraď X ID zvoleného fóra - AND p.forum_id = X

SkIpPeR
Příspěvky: 56
Registrován: úte 08. dub 2008 16:24:23

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od SkIpPeR » pát 11. dub 2008 14:23:56

JJ moc díky, taky sem se v tom šťoural ale nic sem nevykouzlil
WWW.BLINDS.TÝM.CZ
vévévé tečka blajnts tým tečka cé zed

SkIpPeR
Příspěvky: 56
Registrován: úte 08. dub 2008 16:24:23

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od SkIpPeR » pát 11. dub 2008 21:57:26

Čau, hele sry že otravuju, ale šlo by to ještě trochu poupravit, potřebuju tam vypsat i to co v tom příspěvku je, ale nevim jakou tabulku.díky
WWW.BLINDS.TÝM.CZ
vévévé tečka blajnts tým tečka cé zed

Kamahl
Příspěvky: 1713
Registrován: ned 25. bře 2007 1:00:00
Bydliště: Bratislava
Kontaktovat uživatele:

Re: Výpis novinek z fóra na jiné stránce

Příspěvek od Kamahl » pát 11. dub 2008 22:05:58

je to v tabulke posts - post_text

Zamčeno