26

Re: [Release?] Extern.php News Extension

it has some problems.
if each post has some replies. and i include such as [include('http://www.yourhost.com/forums/extern.php?action=news')]
some of them maintain the original post.
but some of the others maintain the first reply, but not original post.
how to include original post ? but not reply?

27 (edited by Notch 2006-02-22 21:19)

Re: [Release?] Extern.php News Extension

Actually, I HAVE found something that is a bit undesireable about the script, albeit a very minute problem and more of a housekeeping issue than a functional issue.

The script works fine but it will invalidate your XHTML 1.0 & CSS validation. The inserted code creates the recent posts from the forums and they do not conform to any XHTML 1.0 doctype.


Anyone have an idea how to circumvent this issue?

28

Re: [Release?] Extern.php News Extension

Is it possible to make it show like the first 10 words instead of paragraphs?

29

Re: [Release?] Extern.php News Extension

I have all my issues sorted out with this modification.

The code is now XHTML 1.0 compliant and produces the bold headlines like I wanted.

All credit goes to Paul and CableGuy for their work on this in this thread:

http://punbb.org/forums/viewtopic.php?id=10652

Here is the modified code:

//
// Use this to display 'news' - the recent topics from a specific forum
// expanded to include the first post text, posters, comments, etc.
//

else if ($_GET['action'] == 'news')
{
    $order_by = ($_GET['action'] == 'active') ? 't.last_post' : 't.posted';
    $forum_sql = '';

    // Get the forum id(s) you'd like to post news from
    if (isset($_GET['fid']) && $_GET['fid'] != '')
    {
        $fids = explode(',', trim($_GET['fid']));
        $fids = array_map('intval', $fids);

        if (!empty($fids))
            $forum_sql = ' AND f.id IN('.implode(',', $fids).')';
    }

    // RSS support not implemented, if anyone wants to do it, feel free..
    if (isset($_GET['type']) && strtoupper($_GET['type']) == 'RSS')
    {    
    }
    // Regular HTML output
    else
    {
        $show = isset($_GET['show']) ? intval($_GET['show']) : $show_default_topics;
        if ($show < 1 || $show > $show_max_topics)
            $show = $show_default_topics;        

        $result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, t.num_replies, t.num_views, f.id AS fid, f.forum_name FROM '.$db_prefix.'topics AS t INNER JOIN '.$db_prefix.'forums AS f ON t.forum_id=f.id WHERE t.moved_to IS NULL '.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT '.$show.' ') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
        $show_count = 0;

        if(!$db->num_rows($result))
        {
            echo "No news to display";
        }
        else
        {

            while ( ($show_count < $show) && ($cur_topic = $db->fetch_assoc($result)) ) 
            {
                echo "<div class=\"newsblock\">";
                $temp = '';
                if ($pun_config['o_censoring'] == '1')
                    $cur_topic['subject'] = censor_words($cur_topic['subject']);
                if (pun_strlen($cur_topic['subject']) > $max_subject_length)
                    $subject_truncated = trim(substr($cur_topic['subject'], 0, ($max_subject_length-5))).' ...';
                else
                    $subject_truncated = $cur_topic['subject'];

                // Simplify frequently required display information
                $thisdate = date('l, d F Y', $cur_topic['posted']);
                $poster = $cur_topic['poster'];
                $comments = $cur_topic['num_replies'];
                $views = $cur_topic['num_views'];

                // If using headlines, then after first item only show headlines...
                if(isset($_GET['headlines']) && $show_count > 0)
                {
                    echo '<p class="newsheadline"><a href="'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].'">'.$subject_truncated."</a> ($comments)</p> \n";
                }
                else
                {
                    // DISPLAY FOR TITLE OF NEWS
                    echo '<p class="newstitle"><b><a href="'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].'">'.$subject_truncated."</a></b></p> \n";
                    $id = $cur_topic['id'];
                    $msg = $db->query('SELECT id, poster, poster_id, poster_ip, poster_email, message, posted, edited, edited_by FROM '.$db_prefix.'posts WHERE topic_id='.$id.' LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
                    if ( !$db->num_rows($msg) ) continue;

                    $cur_post = $db->fetch_assoc($msg);
                    $posterid = $cur_post['poster_id'];    

                    // DISPLAY FOR "Posted on DATE by POSTER"
                    echo '<p class="newsdetails">Posted on '.$thisdate.' by <a href="'.$pun_config['o_base_url'].'/profile.php?id='.$posterid.'">'.$poster.'</a></p>'."\n";                    $truncate = isset($_GET['summary']) ? 1 : 0;
                    if ($truncate == 1)
                    {
                        $paragraph = preg_split("/\s*\n+/", $cur_post['message']);
                        if (isset($paragraph[1])) 
                        {
                            $cur_post['message'] = $paragraph[0] . "...";
                        }
                    }

                    $message = parse_message($cur_post['message'], 0);            
                    echo '<div class="newstext">'.$message;
                    if ($truncate == 1) { echo '<a href="'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].'">Read More...</a>'; }
                    echo '</div>'."\n";

                    echo '<p class="newsextra">Comments(<a href="'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].'">'.$comments.'</a>) | Views (<a href="'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].'">'.$views.'</a>) <br /></p><hr />'."\n";
                }
                echo "</div>"; // end newsblock div
                $show_count++;
            }
        }
    }
}
else

Re: [Release?] Extern.php News Extension

How to modify if I just want to enlarge the text and disable the link of news title, also change the "command / view" shows no numbers?

31

Re: [Release?] Extern.php News Extension

This is a excellent addition.
ross3093 can you please add code to remove bbcode from the truncated paragraph so only text is displayed, no images etc.

Re: [Release?] Extern.php News Extension

Just 2 problems ! How to get only the last post and not the last topic ??
And how to not get the hide topic only available for the Moderators ?

33 (edited by s0me0ne 2006-04-02 02:23)

Re: [Release?] Extern.php News Extension

Wow this rocks smile

And to the dude that just wanted the first 10words, modify this snippet of code and work it into whats here:

<?php


//this basically allows so many words in a paragraph
function charLimit($string, $length = 10, $ellipsis = "...")
    {
    $words = explode(' ', $string);
    
    $curindex = 0;
    $wcount = 0;
        foreach($words as $value)
        {
            $wcount += strlen($value)+1;

            if($wcount>$length-strlen($ellipsis))
            {
                break;
            }
            $curindex++;
        }
    return implode(' ', array_slice($words, 0, $curindex)) . $ellipsis;
    }
?>

I got that snippet off of php.net somewhere awhile back, their site is helpful, much like PunBBs forum smile

Re: [Release?] Extern.php News Extension

any idea for my problem ?

Just 2 problems ! How to get only the last post and not the last topic ??
And how to not get the hide topic only available for the Moderators ?

35

Re: [Release?] Extern.php News Extension

Ok, all good, every work, but i have a problem, the news show te last post of the topic, and i also want to show the 1rst post of the topic, how a normal news system, how i got this?

36

Re: [Release?] Extern.php News Extension

Tryed this one below and cant get the parser to work, the smileys are not showing up...

Diviance wrote:

Well, it is slightly modified from the versions I posted, to make it easier to edit some things.

<?php
/***********************************************************************

  Copyright (C) 2002-2005  Rickard Andersson (rickard@punbb.org)

  This file is part of PunBB.

  PunBB is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published
  by the Free Software Foundation; either version 2 of the License,
  or (at your option) any later version.

  PunBB is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  MA  02111-1307  USA

************************************************************************


  INSTRUCTIONS

  This script is used to include information about your board from
  pages outside the forums and to syndicate news about recent
  discussions via RSS. The script can display a list of recent
  discussions (sorted by post time or last post time), a list of
  active users or a collection of general board statistics. The
  script can be called directly via an URL (for RSS), from a PHP
  include command or through the use of Server Side Includes (SSI).

  The scripts behaviour is controlled via variables supplied in the
  URL to the script. The different variables are: action (what to
  output), show (how many topics to display), fid (the ID or ID's of
  the forum(s) to poll for topics), nfid (the ID or ID's of forums
  that should be excluded) and type (output as HTML or RSS). The
  only mandatory variable is action. Possible/default values are:

    action: active (show most recently active topics) (HTML or RSS)
            new (show newest topics) (HTML or RSS)
            online (show users online) (HTML)
            online_full (as above, but includes a full list) (HTML)
            stats (show board statistics) (HTML)

    show:   Any integer value between 1 and 50. This variables is
            ignored for RSS output. The default is 15.

    fid:    One or more forum ID's (comma-separated). If ignored,
            topics from all guest-readable forums will be polled.

    nfid:   One or more forum ID's (comma-separated) that are to be
            excluded. E.g. the ID of a a test forum.

    type:   RSS. Anything else means HTML output.

  Here are some examples using PHP include().

    Show the 15 most recently active topics from all forums:
    include('http://host.com/forums/extern.php?action=active');

    Show the 10 newest topics from forums with ID 5, 6 and 7:
    include('http://host.com/forums/extern.php?action=new&show=10&fid=5,6,7');

    Show users online:
    include('http://host.com/forums/extern.php?action=online');

    Show users online with full listing of users:
    include('http://host.com/forums/extern.php?action=online_full');

    Show board statistics:
    include('http://host.com/forums/extern.php?action=stats');

  Here are some examples using SSI.

    Show the 5 newest topics from forums with ID 11 and 22:
    <!--#include virtual="forums/extern.php?action=new&show=5&fid=11,22" -->

    Show board statistics:
    <!--#include virtual="forums/extern.php?action=stats" -->

  And finally some examples using extern.php to output an RSS 0.91
  feed.

    Output the 15 most recently active topics:
    http://host.com/extern.php?action=active&type=RSS

    Output the 15 newest topics from forum with ID=2:
    http://host.com/extern.php?action=active&type=RSS&fid=2

  Below you will find some variables you can edit to tailor the
  scripts behaviour to your needs.


/***********************************************************************/

// The maximum number of topics that will be displayed
$show_max_topics = 60;

// The length at which topic subjects will be truncated (for HTML output)
$max_subject_length = 30;

// If you exceed max number of allowed topics, how many to display?
$show_default_topics = 10;

// Define the location of your punBB install
$forums = "forum";

/***********************************************************************/

// DO NOT EDIT ANYTHING BELOW THIS LINE! (unless you know what you are doing)


define('PUN_ROOT', './');
@include PUN_ROOT.'config.php';
require PUN_ROOT.'include/parser.php';

// If PUN isn't defined, config.php is missing or corrupt
if (!defined('PUN'))
    exit('The file \'config.php\' doesn\'t exist or is corrupt. Please run install.php to install PunBB first.');


// Make sure PHP reports all errors except E_NOTICE
error_reporting(E_ALL ^ E_NOTICE);

// Turn off magic_quotes_runtime
set_magic_quotes_runtime(0);


// Load the functions script
require PUN_ROOT.'include/functions.php';

// Load DB abstraction layer and try to connect
require PUN_ROOT.'include/dblayer/common_db.php';

// Load cached config
@include PUN_ROOT.'cache/cache_config.php';
if (!defined('PUN_CONFIG_LOADED'))
{
    require PUN_ROOT.'include/cache.php';
    generate_config_cache();
    require PUN_ROOT.'cache/cache_config.php';
}

// Make sure we (guests) have permission to read the forums
$result = $db->query('SELECT g_read_board FROM '.$db->prefix.'groups WHERE g_id=3') or error('Unable to fetch group info', __FILE__, __LINE__, $db->error());
if ($db->result($result) == '0')
    exit('No permission');


// Attempt to load the common language file
@include PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/common.php';
if (!isset($lang_common))
    exit('There is no valid language pack \''.$pun_config['o_default_lang'].'\' installed. Please reinstall a language of that name.');

if (!isset($_GET['action']))
    exit('No parameters supplied. See extern.php for instructions.');


//
// Converts the CDATA end sequence ]]> into ]]>
//
function escape_cdata($str)
{
    return str_replace(']]>', ']]>', $str);
}


//
// Show recent discussions
//
if ($_GET['action'] == 'active' || $_GET['action'] == 'new')
{
    $order_by = ($_GET['action'] == 'active') ? 't.last_post' : 't.posted';
    $forum_sql = '';

    // Was any specific forum ID's supplied?
    if (isset($_GET['fid']) && $_GET['fid'] != '')
    {
        $fids = explode(',', trim($_GET['fid']));
        $fids = array_map('intval', $fids);

        if (!empty($fids))
            $forum_sql = ' AND f.id IN('.implode(',', $fids).')';
    }

    // Any forum ID's to exclude?
    if (isset($_GET['nfid']) && $_GET['nfid'] != '')
    {
        $nfids = explode(',', trim($_GET['nfid']));
        $nfids = array_map('intval', $nfids);

        if (!empty($nfids))
            $forum_sql = ' AND f.id NOT IN('.implode(',', $nfids).')';
    }

    // Should we output this as RSS?
    if (isset($_GET['type']) && strtoupper($_GET['type']) == 'RSS')
    {
        $rss_description = ($_GET['action'] == 'active') ? $lang_common['RSS Desc Active'] : $lang_common['RSS Desc New'];
        $url_action = ($_GET['action'] == 'active') ? '&action=new' : '';

        // Send XML/no cache headers
        header('Content-Type: text/xml');
        header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');

        // It's time for some syndication!
        echo '<?xml version="1.0" encoding="'.$lang_common['lang_encoding'].'"?>'."\r\n";
        echo '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">'."\r\n";
        echo '<rss version="0.91">'."\r\n";
        echo '<channel>'."\r\n";
        echo "\t".'<title>'.pun_htmlspecialchars($pun_config['o_board_title']).'</title>'."\r\n";
        echo "\t".'<link>'.$pun_config['o_base_url'].'/</link>'."\r\n";
        echo "\t".'<description>'.pun_htmlspecialchars($rss_description.' '.$pun_config['o_board_title']).'</description>'."\r\n";
        echo "\t".'<language>en-us</language>'."\r\n";

        // Fetch 15 topics
        $result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, f.id AS fid, f.forum_name FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT 15') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

        while ($cur_topic = $db->fetch_assoc($result))
        {
            if ($pun_config['o_censoring'] == '1')
                $cur_topic['subject'] = censor_words($cur_topic['subject']);

            echo "\t".'<item>'."\r\n";
            echo "\t\t".'<title>'.pun_htmlspecialchars($cur_topic['subject']).'</title>'."\r\n";
            echo "\t\t".'<link>'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].$url_action.'</link>'."\r\n";
            echo "\t\t".'<description><![CDATA['.escape_cdata($lang_common['Forum'].': <a href="'.$pun_config['o_base_url'].'/viewforum.php?id='.$cur_topic['fid'].'">'.$cur_topic['forum_name'].'</a><br />'."\r\n".$lang_common['Author'].': '.$cur_topic['poster'].'<br />'."\r\n".$lang_common['Posted'].': '.date('r', $cur_topic['posted']).'<br />'."\r\n".$lang_common['Last post'].': '.date('r', $cur_topic['last_post'])).']]></description>'."\r\n";
            echo "\t".'</item>'."\r\n";
        }

        echo '</channel>'."\r\n";
        echo '</rss>';
    }


    // Output regular HTML
    else
    {
        $show = isset($_GET['show']) ? intval($_GET['show']) : 15;
        if ($show < 1 || $show > 50)
            $show = 15;

        // Fetch $show topics
        $result = $db->query('SELECT t.id, t.subject FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT '.$show) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

        while ($cur_topic = $db->fetch_assoc($result))
        {
            if ($pun_config['o_censoring'] == '1')
                $cur_topic['subject'] = censor_words($cur_topic['subject']);

            if (pun_strlen($cur_topic['subject']) > $max_subject_length)
                $subject_truncated = pun_htmlspecialchars(trim(substr($cur_topic['subject'], 0, ($max_subject_length-5)))).' …';
            else
                $subject_truncated = pun_htmlspecialchars($cur_topic['subject']);

            echo '<li><a href="'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].'&action=new" title="'.pun_htmlspecialchars($cur_topic['subject']).'">'.$subject_truncated.'</a></li>'."\n";
        }
    }

    return;
}


//
// Show users online
//
else if ($_GET['action'] == 'online' || $_GET['action'] == 'online_full')
{
    // Load the index.php language file
    require PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/index.php';
    
    // Fetch users online info and generate strings for output
    $num_guests = $num_users = 0;
    $users = array();
    $result = $db->query('SELECT user_id, ident FROM '.$db->prefix.'online WHERE idle=0 ORDER BY ident', true) or error('Unable to fetch online list', __FILE__, __LINE__, $db->error());

    while ($pun_user_online = $db->fetch_assoc($result))
    {
        if ($pun_user_online['user_id'] > 1)
        {
            $users[] = '<a href="'.$pun_config['o_base_url'].'/profile.php?id='.$pun_user_online['user_id'].'">'.pun_htmlspecialchars($pun_user_online['ident']).'</a>';
            ++$num_users;
        }
        else
            ++$num_guests;
    }

    echo $lang_index['Guests online'].': '.$num_guests.'<br />';

    if ($_GET['action'] == 'online_full')
        echo $lang_index['Users online'].': '.implode(', ', $users).'<br />';
    else
        echo $lang_index['Users online'].': '.$num_users.'<br />';

    return;
}


//
// Show board statistics
//
else if ($_GET['action'] == 'stats')
{
    // Load the index.php language file
    require PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/index.php';

    // Collect some statistics from the database
    $result = $db->query('SELECT COUNT(id)-1 FROM '.$db->prefix.'users') or error('Unable to fetch total user count', __FILE__, __LINE__, $db->error());
    $stats['total_users'] = $db->result($result);

    $result = $db->query('SELECT id, username FROM '.$db->prefix.'users ORDER BY registered DESC LIMIT 1') or error('Unable to fetch newest registered user', __FILE__, __LINE__, $db->error());
    $stats['last_user'] = $db->fetch_assoc($result);

    $result = $db->query('SELECT SUM(num_topics), SUM(num_posts) FROM '.$db->prefix.'forums') or error('Unable to fetch topic/post count', __FILE__, __LINE__, $db->error());
    list($stats['total_topics'], $stats['total_posts']) = $db->fetch_row($result);

    echo $lang_index['No of users'].': '.$stats['total_users'].'<br />';
    echo $lang_index['Newest user'].': <a href="'.$pun_config['o_base_url'].'/profile.php?id='.$stats['last_user']['id'].'">'.pun_htmlspecialchars($stats['last_user']['username']).'</a><br />';
    echo $lang_index['No of topics'].': '.$stats['total_topics'].'<br />';
    echo $lang_index['No of posts'].': '.$stats['total_posts'];

    return;
}

//
// Use this to display 'news' - the recent topics from a specific forum
// expanded to include the first post text, posters, comments, etc.
//

else if ($_GET['action'] == 'news')
{
    $order_by = ($_GET['action'] == 'active') ? 't.last_post' : 't.posted';
    $forum_sql = '';

    // Get the forum id(s) you'd like to post news from
    if (isset($_GET['fid']) && $_GET['fid'] != '')
    {
        $fids = explode(',', trim($_GET['fid']));
        $fids = array_map('intval', $fids);

        if (!empty($fids))
            $forum_sql = ' AND f.id IN('.implode(',', $fids).')';
    }

    // RSS support not implemented, if anyone wants to do it, feel free..
    if (isset($_GET['type']) && strtoupper($_GET['type']) == 'RSS')
    {    
    }
    // Regular HTML output
    else
    {
        $show = isset($_GET['show']) ? intval($_GET['show']) : $show_default_topics;
        if ($show < 1 || $show > $show_max_topics)
            $show = $show_default_topics;        

        $result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, t.num_replies, t.num_views, f.id AS fid, f.forum_name FROM '.$db_prefix.'topics AS t INNER JOIN '.$db_prefix.'forums AS f ON t.forum_id=f.id WHERE t.moved_to IS NULL '.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT '.$show.' ') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
        $show_count = 0;

        if(!$db->num_rows($result))
        {
            echo "No news to display";
        }
        else
        {

            while ( ($show_count < $show) && ($cur_topic = $db->fetch_assoc($result)) ) 
            {
                echo "<div class=newsblock>";
                $temp = '';
                if ($pun_config['o_censoring'] == '1')
                    $cur_topic['subject'] = censor_words($cur_topic['subject']);
                if (pun_strlen($cur_topic['subject']) > $max_subject_length)
                    $subject_truncated = trim(substr($cur_topic['subject'], 0, ($max_subject_length-5))).' ...';
                else
                    $subject_truncated = $cur_topic['subject'];
                    
                // Call Avatars Code
                    if ($img_size = @getimagesize($pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.gif'))
                    $user_avatar = '<img src="$forums/'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.gif" '.$img_size[3].' alt="" />';
                    else if ($img_size = @getimagesize($pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.jpg'))
                    $user_avatar = '<img src="$forums/'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.jpg" '.$img_size[3].' alt="" />';
                    else if ($img_size = @getimagesize($pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.png'))
                    $user_avatar = '<img src="$forums/'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.png" '.$img_size[3].' alt="" />';

                // Simplify frequently required display information
                $thisdate = date('l, d F Y', $cur_topic['posted']);
                $poster = $cur_topic['poster'];
                $comments = $cur_topic['num_replies'];
                $views = $cur_topic['num_views'];

                // If using headlines, then after first item only show headlines...
                if(isset($_GET['headlines']) && $show_count > 0)
                {
                    echo "<p class=\"newsheadline\"><a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">$subject_truncated</a> ($comments)</p> \n";
                }
                else
                {
                    // DISPLAY FOR TITLE OF NEWS
                    echo "<p class=\"newstitle\"><a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">$subject_truncated</a></p> \n";

                    $id = $cur_topic['id'];
                    $msg = $db->query('SELECT id, poster, poster_id, poster_ip, poster_email, message, posted, edited, edited_by FROM '.$db_prefix.'posts WHERE topic_id='.$id.' LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
                    if ( !$db->num_rows($msg) ) continue;

                    $cur_post = $db->fetch_assoc($msg);
                    $posterid = $cur_post['poster_id'];    

                    // DISPLAY FOR "Posted on DATE by POSTER"
                    echo "<p class=\"newsdetails\">Posted on $thisdate by <a href=".$pun_config['o_base_url']."/profile.php?id=$posterid>$poster</a> $user_avatar</p> \n";

                    $truncate = isset($_GET['summary']) ? 1 : 0;
                    if ($truncate == 1)
                    {
                        $paragraph = preg_split("/\s*\n+/", $cur_post['message']);
                        if (isset($paragraph[1])) 
                        {
                            $cur_post['message'] = $paragraph[0] . "...";
                        }
                    }

                    // parse BBCode, smilies and HTML
                    $cur_post['message'] = parse_message($cur_post['message'], 0);
                    if ($pun_config['o_smilies'] == '1')
                    $message = do_smilies($cur_post['message']);        
     
                    echo str_replace("img/smilies", "$forums/img/smilies", "<p class=\"newstext\">$message");
                    if ($truncate == 1) { echo "<p><a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">Read More...</a></p>"; }
                    echo "</p> \n";

                    echo "<p class=\"newsextra\">Comments(<a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">$comments</a>) | Views (<a href=".$pun_config['o_base_url']."/viewtopic.php?id=".$cur_topic['id'].">$views</a>) </p> \n";                
                }
                echo "</div>"; // end newsblock div
                $show_count++;
            }
        }
    }
}

else
    exit('Bad request');

Entire extern.php modified with news mod, smilies mod and avatars mod.  Currently, the avatars are placed right after the poster's name in the Posted By: area.  Remove $user_avatar and place it wherever you want to move it around.

Now, the first thing you should do is change the $forums definition to the name of your punBB root install folder name.  It is currently set as "forum".  The code to change it is placed near the top, easy to find.

Re: [Release?] Extern.php News Extension

Hmmmm, I'm confused. I added the code to extern.php exactly like he said to, but now what? I obviously post the code for The Presentation section, but I don't get the middle part. Any help is appreciated.

Re: [Release?] Extern.php News Extension

nonull wrote:

it has some problems.
if each post has some replies. and i include such as [include('http://www.yourhost.com/forums/extern.php?action=news')]
some of them maintain the original post.
but some of the others maintain the first reply, but not original post.
how to include original post ? but not reply?

i had this issue, it is because the SQL code used expects that the first of each unique topic_id (say that topic_id=10) of a row in the posts DB is in fact the first post of that thread, but obviously if the posts table is not ordered by id (as was the case for me), then it will pull whatever row that first comes back with topic_id=10. adding ORDER BY id to the SQL fixes this.

so the SQL code to fix this is:

$msg = $db->query('SELECT id, poster, poster_id, poster_ip, poster_email, message, posted, edited, edited_by FROM '.$db_prefix.'posts WHERE topic_id='.$id.' ORDER BY id LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());

39

Re: [Release?] Extern.php News Extension

i get this error

Warning: include(forum/extern.php?action=news&fid=19&show=10) [function.include]: failed to open stream: No such file or directory in /usr/local/www/htdocs/uabyggarna.com/index.php on line 21

Warning: include() [function.include]: Failed opening 'forum/extern.php?action=news&fid=19&show=10' for inclusion (include_path='.:') in /usr/local/www/htdocs/uabyggarna.com/index.php on line 21

Is it on the server side?

Re: [Release?] Extern.php News Extension

You can't include extern.php from the local filesystem and treat it as a URL at the same time wink

41 (edited by fu 2007-02-17 09:00)

Re: [Release?] Extern.php News Extension

this then

<?php
$_GET['action'] = 'news';
$_GET['fid'] = 19;
$_GET['show'] = '10';
include 'forum/extern.php';
?>

gives me this

Warning: require(./include/parser.php) [function.require]: failed to open stream: No such file or directory in /usr/local/www/htdocs/uabyggarna.com/forum/extern.php on line 117

Fatal error: require() [function.require]: Failed opening required './include/parser.php' (include_path='.:') in /usr/local/www/htdocs/uabyggarna.com/forum/extern.php on line 117

Re: [Release?] Extern.php News Extension

You can't include extern.php from the local filesystem when within PunBB itself
extern.php isn't meant to be included locally, either use the URL or (if your server doesn't support that) try using cURL. Search the forum, people have posted about it before.

43

Re: [Release?] Extern.php News Extension

I changed this line in the modified script that Diviance posted on the first page:

define('PUN_ROOT', './');

to

define('PUN_ROOT', 'forum/');

and i use this code

<?php
$_GET['action'] = 'news';
$_GET['fid'] = 19;
$_GET['show'] = '10';
include "forum/extern.php";
?>

to call extern.php. And all my problems were solved! (?)

44 (edited by naitkris 2007-02-17 21:05)

Re: [Release?] Extern.php News Extension

SVE:
fu - bra gjört. Enda problem är när man försöker kalla extern.php 2 eller mer gånger från samma sida. Man behöver ändra några saker på extern.php och flytta det till sidan man kallar från.

ENG:
fu - nice one. Only problem is that whan one tries to call extern.php 2 or more times from the same webpage. You need to change a couple of things on extern.php and move them to the webpage one is calling from.

Edit: Jag tycker om att kalla det internt också fast det blir lite jobbigare desto mer man använder extern.php och det är nog därför det är så att det rekomenderas att kalla det externt - ej bara för att det kallas extern.php smile

45

Re: [Release?] Extern.php News Extension

I feel like an idiot asking this, but I can't figure it out so here goes. Where do I put the presentation code? I have everything working, but I have no idea where that HTML should go. Could someone post an example?

Re: [Release?] Extern.php News Extension

Same as redwop:
I have the miniportal on my front page and I want to include the extern file with a php include, but it doesn't work. How can I do this?

FluxBB - v1.4.8

Re: [Release?] Extern.php News Extension

lie2815 wrote:

Same as redwop:
I have the miniportal on my front page and I want to include the extern file with a php include, but it doesn't work. How can I do this?

Where have you been placing the include code?

Looking for a certain modification for your forum? Please take a look here before posting.

Re: [Release?] Extern.php News Extension

To be honest, I don't really know so much about php, so I placed it in the index.php file, BUT: I have another mod now, that is better for what I want.
But thanks again.

FluxBB - v1.4.8

49 (edited by NetworkShadow 2007-03-19 13:26)

Re: [Release?] Extern.php News Extension

Anyway us php illiterates could get an example of how to get this setup? Thanks!

I was searching around and saw that I needed to use cURL to include the file on my server. I'm using this to put it in my site.

<?php
$_GET['action'] = 'news';
$_GET['fid'] = 4;
$_GET['show'] = '10';
//use constant MY_URL so no one includes $their_url
define('MY_URL', 'http://androidworkshop.com/forums/');
@curl_exec(@curl_init(MY_URL."externnews.php"));
?>

But I get:

No parameters supplied. See extern.php for instructions.

So I guess I somehow broke the news part of the code. Any suggestions?

50 (edited by NetworkShadow 2007-03-19 19:32)

Re: [Release?] Extern.php News Extension

Ok I figured it out. I'm using:

<?php
//use constant MY_URL so no one includes $their_url
define('MY_URL', 'http://androidworkshop.com/forums/');
@curl_exec(@curl_init(MY_URL."externnews.php?action=news&show=10&fid=4,3"));
?>