Recent Topics

[2.4.2] Article List Widget Plugin

Started by on Jun 13, 2008 – Contents updated: Jun 13, 2008

Jun 13, 2008 17:04    

I've created a simple plugin that sums up a list of article titles. Very usefull if you display a lot of post on your homepage, and want to start with a simple overview.

I added some features that allows to enable / disable the plugin via the plugin settings, and gives you control over on only displaying the plugin on the home-page, an article page or both or none. Whatever you situation likes.

Just create a file called
_article_titles.plugin.php
And add the following code in it.

PHP

<?php
/**
 * This file implements the Article Titles plugin.
 *
 * @copyright (c)2008 by Julien Moorrees - {@link http://fplanque.net/}
 *
 * {@internal License choice
 * - If you have received this file as part of a package, please find the license.txt file in
 *   the same folder or the closest folder above for complete license terms.
 * - If you have received this file individually (e-g: from http://evocms.cvs.sourceforge.net/)
 *   then you must choose one of the following licenses before using the file:
 *   - GNU General Public License 2 (GPL) - http://www.opensource.org/licenses/gpl-license.php
 *   - Mozilla Public License 1.1 (MPL) - http://www.opensource.org/licenses/mozilla1.1.php
 * }}
 *
 * {@internal Open Source relicensing agreement:
 * Daniel HAHLER grants Francois PLANQUE the right to license
 * Daniel HAHLER's contributions to this file and the b2evolution project
 * under any OSI approved OSS license (http://www.opensource.org/licenses/).
 * }}
 *
 * @package plugins
 *
 * {@internal Below is a list of authors who have contributed to design/coding of this file: }}
 * @author Julien Moorrees
 *
 * @version $Id: _advert_banner.plugin.php,v 1.0 2008/06/13 12:35:41 MoorreesJ Exp $
 */
if( !defined('EVO_MAIN_INIT') ) die'Please, do not access this page directly.' );
 
 
/**
 */
class article_titles_plugin extends Plugin
{
    /**
     * Variables below MUST be overriden by plugin implementations,
     * either in the subclass declaration or in the subclass constructor.
     */
 
    var $name 'Article Titles Widget';
    var $code 'evo_ArticleTitles';
    var $priority 96;
    var $version '2.0';
    var $author 'Julien Moorrees';
    var $group 'widget';
 
 
    /**
     * Init
     */
    function PluginInit( & $params )
    {
        $this->short_desc T_('This skin tag displays a list of the article titles');
        $this->long_desc T_('Displays a list of article titles');
    }
 
 
  /**
   * Get definitions for widget specific editable params
   *
     * @see Plugin::GetDefaultSettings()
     * @param local params like 'for_editing' => true
     */
    function get_widget_param_definitions$params )
    {
        $r array(
            'enable' => array(
                'label' => T_('Enable'),
                'note' => T_('Enable this widget.'),
                'type' => 'checkbox',
                'defaultvalue' => true,
            ),
            'swhowonhome' => array(
                'label' => T_('Show on homepage'),
                'note' => T_('Show this widget on the homepage'),
                'type' => 'checkbox',
                'defaultvalue' => true,
            ),
            'swhowonarticle' => array(
                'label' => T_('Show on Article'),
                'note' => T_('Show this widget on an article page'),
                'type' => 'checkbox',
                'defaultvalue' => false,
            ),
            'title' => array(
                'label' => 'Block title',
                'size' => 60,
            ),
            
        );
        return $r;
    }
 
 
    /**
     * Event handler: SkinTag (widget)
     *
     * @param array Associative array of parameters.
     * @return boolean did we display?
     */
    function SkinTag$params )
    {
        global $generating_static$Plugins,$MainList;
 
 
        if( empty($MainList) )
        {
            return false;
        }
 
        if( ! empty($generating_static) || $Plugins->trigger_event_first_true('CacheIsCollectingContent') )
        { // We're not generating static pages nor is a caching plugin collecting the content, so we can display this block
            return false;
        }
 
        if ($params['enable']==false) {
            return false;
        }
        
        if( isset($MainList) && $MainList->result_num_rows )  {
            // We are on the homepage
            if ($params['swhowonhome']==false) {
                return false;
            }
        }
        else {
            // We are on an article
            if ($params['swhowonarticle']==false) {
                return false;
            }
        }
        
        echo $params['block_start'];
 
        echo $params['block_title_start'];
        echo $params['title'];
        echo $params['block_title_end'];
 
        //Do your magic here
 
        // -------------------- PREV/NEXT PAGE LINKS (POST LIST MODE) --------------------
        echo $MainList->page_linksarray(
                'block_start' => '',
                'block_end' => '',
                'block_single' => '',
                'links_format' => '#',
                'page_url' => ''// All generated links will refer to the current page
                'prev_text' => '&lt;&lt;',
                'next_text' => '&gt;&gt;',
                'no_prev_text' => '',
                'no_next_text' => '',
                'list_prev_text' => '...',
                'list_next_text' => '...',
                'list_span' => 4,
                'scroll_list_range' => 5,
            )
        );
        echo "<br />";
        // ------------------------- END OF PREV/NEXT PAGE LINKS -------------------------
 
        $MainList->current_idx 0;
        while( $Item $MainList->get_item() )
        {
            ?>
                <a href="<?php $Item->permanent_url() ?>" title="<?php echo T_('Permanent link to full entry'?>" ><?php $Item->title(); ?></a><br />
            <?php 
        }
        echo $params['block_end'];
        $MainList->current_idx 0;
        return true;
    }
}
?>

Upload to plugin directory and install as normally. You can now add the list as a widget.

Enjoy!

Jun 16, 2008 13:59

Fixed a little bug that showed an error on some pages like the contact page.

Jun 18, 2008 11:02

to install, produces this error:

Code

Warning: Cannot modify header information - headers already sent by (output started at /home/mysite/public_html/plugins/_article_titles.plugin.php:2) in /home/mysite/public_html/skins_adm/_html_header.inc.php on line 40

Jun 18, 2008 11:16

Delete the whitespace before the opening <?php tag ;)

¥

Jun 18, 2008 11:49

hello ¥åßßå

these are the first lines of _html_header.inc.php.
Delete the whitespace before the second opening <? Php tag.
follows the error

PHP

<?php
/**
 * This file displays the first part of the page menu (before the page title).
 *
 * This file is part of the evoCore framework - {@link http://evocore.net/}
 * See also {@link http://sourceforge.net/projects/evocms/}.
 *
 * @copyright (c)2003-2008 by Francois PLANQUE - {@link http://fplanque.net/}
 * Parts of this file are copyright (c)2005-2006 by PROGIDISTRI - {@link http://progidistri.com/}.
 *
 * {@internal License choice
 * - If you have received this file as part of a package, please find the license.txt file in
 *   the same folder or the closest folder above for complete license terms.
 * - If you have received this file individually (e-g: from http://evocms.cvs.sourceforge.net/)
 *   then you must choose one of the following licenses before using the file:
 *   - GNU General Public License 2 (GPL) - http://www.opensource.org/licenses/gpl-license.php
 *   - Mozilla Public License 1.1 (MPL) - http://www.opensource.org/licenses/mozilla1.1.php
 * }}
 *
 * {@internal Open Source relicensing agreement:
 * PROGIDISTRI S.A.S. grants Francois PLANQUE the right to license
 * PROGIDISTRI S.A.S.'s contributions to this file and the b2evolution project
 * under any OSI approved OSS license (http://www.opensource.org/licenses/).
 * }}
 *
 * @package admin
 *
 * @author blueyed
 * @author fplanque
 * @author mbruneau: Marc BRUNEAU / PROGIDISTRI
 *
 * @version $Id: _html_header.inc.php,v 1.6 2008/02/08 22:24:46 fplanque Exp $
 */
if( !defined('EVO_MAIN_INIT') ) die'Please, do not access this page directly.' );
 
global $io_charset$rsc_url$UserSettings$Debuglog$Plugins$generating_static;
global $month$month_abbrev$weekday$weekday_abbrev/* for localized calendar */
global $debug$Hit;
 
 => header'Content-type: text/html; charset='.$io_charset );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="<?php locale_lang() ?>" lang="<?php locale_lang() ?>">
<head>
    <title><?php echo $this->get_html_title(); ?></title>
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
<?php
    global $rsc_path$rsc_url$htsrv_url;

Jun 18, 2008 11:57

Don't access this file directly, but install it as a plugin. You can then add a widget to your template. Don't include this file in your template.

Jun 18, 2008 12:01

participacion wrote:

Warning: Cannot modify header information - headers already sent by (output started at /home/mysite/public_html/plugins/_article_titles.plugin.php:2) in /home/mysite/public_html/skins_adm/_html_header.inc.php on line 40

Check that file ;)

¥

Jun 18, 2008 12:08

I removed the whitespace in that file just now.

Jun 18, 2008 13:05

Copy and paste your plugin code as it is now, from notepad into here ( between [php][/php] tags )

¥

Jun 18, 2008 13:45

Ok, i editted the first message with using PHP tags. Is it alright now?

Jun 18, 2008 14:00

Sorry nims, that was directed at participation, if they still have the error then they still have whitespace in the file

¥

Jun 18, 2008 14:07

Then I don't understand if my plugin has an error, or that it is correct. I am using it myself, and have not got any problems at all.

Jun 18, 2008 14:26

Hi nims & participation,

Participation made a copy/paste error, so he unintendedly entered whitespace (carriage return "Enter" or space) before the first <?php resulting in the error mentioned.
Probably you could make a downloadable zip of the plugin to avoid confusion.

Good luck

Jun 18, 2008 14:32

hello Afwas
Here is the code

PHP

<?php 
/** 
 * This file implements the Article Titles plugin. 
 * 
 * @copyright (c)2008 by Julien Moorrees - {@link http://fplanque.net/} 
 * 
 * {@internal License choice 
 * - If you have received this file as part of a package, please find the license.txt file in 
 *   the same folder or the closest folder above for complete license terms. 
 * - If you have received this file individually (e-g: from http://evocms.cvs.sourceforge.net/) 
 *   then you must choose one of the following licenses before using the file: 
 *   - GNU General Public License 2 (GPL) - http://www.opensource.org/licenses/gpl-license.php 
 *   - Mozilla Public License 1.1 (MPL) - http://www.opensource.org/licenses/mozilla1.1.php 
 * }} 
 * 
 * {@internal Open Source relicensing agreement: 
 * Daniel HAHLER grants Francois PLANQUE the right to license 
 * Daniel HAHLER's contributions to this file and the b2evolution project 
 * under any OSI approved OSS license (http://www.opensource.org/licenses/). 
 * }} 
 * 
 * @package plugins 
 * 
 * {@internal Below is a list of authors who have contributed to design/coding of this file: }} 
 * @author Julien Moorrees 
 * 
 * @version $Id: _advert_banner.plugin.php,v 1.0 2008/06/13 12:35:41 MoorreesJ Exp $ 
 */ 
if( !defined('EVO_MAIN_INIT') ) die'Please, do not access this page directly.' ); 
 
 
/** 
 */ 
class article_titles_plugin extends Plugin 
   /** 
    * Variables below MUST be overriden by plugin implementations, 
    * either in the subclass declaration or in the subclass constructor. 
    */ 
 
   var $name 'Article Titles Widget'
   var $code 'evo_ArticleTitles'
   var $priority 96
   var $version '2.0'
   var $author 'Julien Moorrees'
   var $group 'widget'
 
 
   /** 
    * Init 
    */ 
   function PluginInit( & $params 
   { 
      $this->short_desc T_('This skin tag displays a list of the article titles'); 
      $this->long_desc T_('Displays a list of article titles'); 
   } 
 
 
  /** 
   * Get definitions for widget specific editable params 
   * 
    * @see Plugin::GetDefaultSettings() 
    * @param local params like 'for_editing' => true 
    */ 
   function get_widget_param_definitions$params 
   { 
      $r array
         'enable' => array
            'label' => T_('Enable'), 
            'note' => T_('Enable this widget.'), 
            'type' => 'checkbox'
            'defaultvalue' => true
         ), 
         'swhowonhome' => array
            'label' => T_('Show on homepage'), 
            'note' => T_('Show this widget on the homepage'), 
            'type' => 'checkbox'
            'defaultvalue' => true
         ), 
         'swhowonarticle' => array
            'label' => T_('Show on Article'), 
            'note' => T_('Show this widget on an article page'), 
            'type' => 'checkbox'
            'defaultvalue' => false
         ), 
         'title' => array
            'label' => 'Block title'
            'size' => 60
         ), 
          
      ); 
      return $r
   } 
 
 
   /** 
    * Event handler: SkinTag (widget) 
    * 
    * @param array Associative array of parameters. 
    * @return boolean did we display? 
    */ 
   function SkinTag$params 
   { 
      global $generating_static$Plugins,$MainList
 
 
      if( empty($MainList) ) 
      { 
         return false
      } 
 
      if( ! empty($generating_static) || $Plugins->trigger_event_first_true('CacheIsCollectingContent') ) 
      { // We're not generating static pages nor is a caching plugin collecting the content, so we can display this block 
         return false
      } 
 
      if ($params['enable']==false) { 
         return false
      } 
       
      if( isset($MainList) && $MainList->result_num_rows )  { 
         // We are on the homepage 
         if ($params['swhowonhome']==false) { 
            return false
         } 
      } 
      else { 
         // We are on an article 
         if ($params['swhowonarticle']==false) { 
            return false
         } 
      } 
       
      echo $params['block_start']; 
 
      echo $params['block_title_start']; 
      echo $params['title']; 
      echo $params['block_title_end']; 
 
      //Do your magic here 
 
      // -------------------- PREV/NEXT PAGE LINKS (POST LIST MODE) -------------------- 
      echo $MainList->page_linksarray
            'block_start' => ''
            'block_end' => ''
            'block_single' => ''
            'links_format' => '#'
            'page_url' => ''// All generated links will refer to the current page 
            'prev_text' => '&lt;&lt;'
            'next_text' => '&gt;&gt;'
            'no_prev_text' => ''
            'no_next_text' => ''
            'list_prev_text' => '...'
            'list_next_text' => '...'
            'list_span' => 4
            'scroll_list_range' => 5
         ) 
      ); 
      echo "<br />"
      // ------------------------- END OF PREV/NEXT PAGE LINKS ------------------------- 
 
      $MainList->current_idx 0
      while( $Item $MainList->get_item() ) 
      { 
         ?> 
            <a href="<?php $Item->permanent_url() ?>" title="<?php echo T_('Permanent link to full entry'?>" ><?php $Item->title(); ?></a><br /> 
         <?php 
      
      echo $params['block_end']; 
      $MainList->current_idx 0
      return true
   } 
?>

Jun 18, 2008 14:41

hi participation,

This shouldn't give an error. Do use a plain text editor when you save the file.

Good luck

Jun 18, 2008 14:47

I created the file _article_titles.plugin.php with notepad.

installing the plug, this new error occurs:

Code

Warning: Cannot modify header information - headers already sent by (output started at /home/podersoc/public_html/plugins/_article_titles.plugin.php:174) in /home/podersoc/public_html/skins_adm/_html_header.inc.php on line 40

Here is the code

PHP

<?php 
/** 
 * This file implements the Article Titles plugin. 
 * 
 * @copyright (c)2008 by Julien Moorrees - {@link http://fplanque.net/} 
 * 
 * {@internal License choice 
 * - If you have received this file as part of a package, please find the license.txt file in 
 *   the same folder or the closest folder above for complete license terms. 
 * - If you have received this file individually (e-g: from http://evocms.cvs.sourceforge.net/) 
 *   then you must choose one of the following licenses before using the file: 
 *   - GNU General Public License 2 (GPL) - http://www.opensource.org/licenses/gpl-license.php 
 *   - Mozilla Public License 1.1 (MPL) - http://www.opensource.org/licenses/mozilla1.1.php 
 * }} 
 * 
 * {@internal Open Source relicensing agreement: 
 * Daniel HAHLER grants Francois PLANQUE the right to license 
 * Daniel HAHLER's contributions to this file and the b2evolution project 
 * under any OSI approved OSS license (http://www.opensource.org/licenses/). 
 * }} 
 * 
 * @package plugins 
 * 
 * {@internal Below is a list of authors who have contributed to design/coding of this file: }} 
 * @author Julien Moorrees 
 * 
 * @version $Id: _advert_banner.plugin.php,v 1.0 2008/06/13 12:35:41 MoorreesJ Exp $ 
 */ 
if( !defined('EVO_MAIN_INIT') ) die'Please, do not access this page directly.' ); 
 
 
/** 
 */ 
class article_titles_plugin extends Plugin 
    /** 
     * Variables below MUST be overriden by plugin implementations, 
     * either in the subclass declaration or in the subclass constructor. 
     */ 
 
    var $name 'Article Titles Widget'
    var $code 'evo_ArticleTitles'
    var $priority 96
    var $version '2.0'
    var $author 'Julien Moorrees'
    var $group 'widget'
 
 
    /** 
     * Init 
     */ 
    function PluginInit( & $params 
    { 
        $this->short_desc T_('This skin tag displays a list of the article titles'); 
        $this->long_desc T_('Displays a list of article titles'); 
    } 
 
 
  /** 
   * Get definitions for widget specific editable params 
   * 
     * @see Plugin::GetDefaultSettings() 
     * @param local params like 'for_editing' => true 
     */ 
    function get_widget_param_definitions$params 
    { 
        $r array
            'enable' => array
                'label' => T_('Enable'), 
                'note' => T_('Enable this widget.'), 
                'type' => 'checkbox'
                'defaultvalue' => true
            ), 
            'swhowonhome' => array
                'label' => T_('Show on homepage'), 
                'note' => T_('Show this widget on the homepage'), 
                'type' => 'checkbox'
                'defaultvalue' => true
            ), 
            'swhowonarticle' => array
                'label' => T_('Show on Article'), 
                'note' => T_('Show this widget on an article page'), 
                'type' => 'checkbox'
                'defaultvalue' => false
            ), 
            'title' => array
                'label' => 'Block title'
                'size' => 60
            ), 
             
        ); 
        return $r
    } 
 
 
    /** 
     * Event handler: SkinTag (widget) 
     * 
     * @param array Associative array of parameters. 
     * @return boolean did we display? 
     */ 
    function SkinTag$params 
    { 
        global $generating_static$Plugins,$MainList
 
 
        if( empty($MainList) ) 
        { 
            return false
        } 
 
        if( ! empty($generating_static) || $Plugins->trigger_event_first_true('CacheIsCollectingContent') ) 
        { // We're not generating static pages nor is a caching plugin collecting the content, so we can display this block 
            return false
        } 
 
        if ($params['enable']==false) { 
            return false
        } 
         
        if( isset($MainList) && $MainList->result_num_rows )  { 
            // We are on the homepage 
            if ($params['swhowonhome']==false) { 
                return false
            } 
        } 
        else { 
            // We are on an article 
            if ($params['swhowonarticle']==false) { 
                return false
            } 
        } 
         
        echo $params['block_start']; 
 
        echo $params['block_title_start']; 
        echo $params['title']; 
        echo $params['block_title_end']; 
 
        //Do your magic here 
 
        // -------------------- PREV/NEXT PAGE LINKS (POST LIST MODE) -------------------- 
        echo $MainList->page_linksarray
                'block_start' => ''
                'block_end' => ''
                'block_single' => ''
                'links_format' => '#'
                'page_url' => ''// All generated links will refer to the current page 
                'prev_text' => '&lt;&lt;'
                'next_text' => '&gt;&gt;'
                'no_prev_text' => ''
                'no_next_text' => ''
                'list_prev_text' => '...'
                'list_next_text' => '...'
                'list_span' => 4
                'scroll_list_range' => 5
            ) 
        ); 
        echo "<br />"
        // ------------------------- END OF PREV/NEXT PAGE LINKS ------------------------- 
 
        $MainList->current_idx 0
        while( $Item $MainList->get_item() ) 
        { 
            ?> 
                <a href="<?php $Item->permanent_url() ?>" title="<?php echo T_('Permanent link to full entry'?>" ><?php $Item->title(); ?></a><br /> 
            <?php  
        
        echo $params['block_end']; 
        $MainList->current_idx 0
        return true
    } 
?>

Jun 18, 2008 14:48

Delete any whitespace *after* the closing ?>

Jun 18, 2008 14:54

I think you shouldn't use notepad, but a texteditor that dashes the CR/LF chars and just uses the linux format.
Ultraedit for example has an option to convert the file to linux format. Also some ftp-clients have the option to upload the file as text. Maybe that can "fix" your problem.

Jun 18, 2008 15:36

Afwas wrote:

Delete any whitespace *after* the closing ?>

Afwas
thanks ...
ready ...

nims
Thanks for the plugin

Jan 27, 2009 19:01

isnt that the same as lates t posts?

Jan 27, 2009 22:01

Yes it is. But it's a little more simple: it only shows the title list, and the paging numbers.

Jan 30, 2009 05:16

Well, I tried this plugin--copy & paste into dreamweaver file, nothing but code in first posting this thread.

Got this on attempted installation into plugins:

Code

Parse error: syntax error, unexpected '}' in /home/wordturn/public_html/healthygreenpaint/plugins/_article_titles.plugin.php on line 167

Ideas????

Feb 07, 2009 17:34

This plugin is virtually unusable when someone tries to copy/paste it from these forums. I kinda know what I'm doing with grabbing someone else's code, and I keep getting whitespace that simply doesn't show up here.

nims you really need to make a downloadable .zip of this thing else it will always cause the troubles that both participation and martha have reported.

Also please add a readme.html file so users will know what it will do and what they can do with it. Adding a readme is the crappiest ugliest longest WORST part of writing a plugin, but it really does help your users.

BOTTOM LINE: anyone trying to copy/paste this out of one the forums will have to edit out a space before the very first <?php and after the very last ?>

Jul 16, 2011 22:50

I do not agree with that.
I copied he code and pasted it in nano (Linux editor).
My editor wrapped some comment lines, but after repairing the plugin worked at once.
Now I have this widget, I only do not understand how to put it above the content on the main page. In the blog setting I can add the widget to the menus or header etc. but how do I generate a main index page with this?

Jul 16, 2011 23:21

@joopsiroop
This is a very old thread. You don't need this plugin if you are using b2evolution v3 or 4. Just go to Blog settings > Widgets and add a Post list widget


Form is loading...

Secure CMS – This forum is powered by b2evolution CMS, a complete engine for your website.