Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#1 2007-07-16 12:09:26

gemal
Member
From: Copenhagen, Denmark
Registered: 2007-01-09
Posts: 107
Website

Make recent_articles context aware (exclude self)

When using txp:recent_articles in an article context it also list itself.

It could be really nice if txp:recent_articles was made context aware so that txp:recent_articles would exclude itself form it’s list.

Perhaps something like:

txp:recent_articles excludeself=1

Testcase:
Lets say you have the following articles:
test1
test2
test3

So if I’m in the article “test1” and use txp:recent_articles excludeself=1 I would get the following list:
test2
test3

So if I’m in the article “test2” and use txp:recent_articles excludeself=1 I would get the following list:
test1
test3

etc

Offline

#2 2007-07-19 10:27:22

gemal
Member
From: Copenhagen, Denmark
Registered: 2007-01-09
Posts: 107
Website

Re: Make recent_articles context aware (exclude self)

gemal wrote:

When using txp:recent_articles in an article context it also list itself.

If I produce a patch will someone look at it?

Offline

#3 2007-07-19 11:18:02

Sencer
Archived Developer
From: cgn, de
Registered: 2004-03-23
Posts: 1,803
Website

Re: Make recent_articles context aware (exclude self)

I think there may be a plugin that does that.

We can’t suddenly change behaviour for backwards-comaptibility. Especially when it is basically a matter of taste, whether the tag should out put all articles, omit the current one, or show the current one as plain-text in the same position in the list.

I think this fits really well into plugin territory.

Offline

#4 2007-07-19 11:50:41

gemal
Member
From: Copenhagen, Denmark
Registered: 2007-01-09
Posts: 107
Website

Re: Make recent_articles context aware (exclude self)

Sencer wrote:

I think there may be a plugin that does that.

We can’t suddenly change behaviour for backwards-comaptibility. Especially when it is basically a matter of taste, whether the tag should out put all articles, omit the current one, or show the current one as plain-text in the same position in the list.

I wouldn’t change default behavior. I would add a optional noself parameter that would exclude the article itself from the list. Calling the tag without this parameter would return the list as it is today.

Offline

#5 2007-07-24 19:03:38

gemal
Member
From: Copenhagen, Denmark
Registered: 2007-01-09
Posts: 107
Website

Re: Make recent_articles context aware (exclude self)

svn diff

Index: taghandlers.php
===================================================================
--- taghandlers.php     (revision 2503)
+++ taghandlers.php     (working copy)
@@ -585,6 +585,7 @@
                        'label'    => gTxt('recent_articles'),
                        'labeltag' => '',
                        'limit'    => 10,
+                       'no_self'  => '',
                        'section'  => '',
                        'sort'     => 'Posted desc',
                        'sortby'   => '',
@@ -613,7 +614,11 @@
                $categories = ($category) ? "and (Category1 = '".doSlash($category)."' or Category2 = '".doSlash($category)."')" : '
';
                $section = ($section) ? " and Section = '".doSlash($section)."'" : '';

-               $rs = safe_rows_start('*, id as thisid, unix_timestamp(Posted) as posted', 'textpattern', 
+               if ($no_self)
+               {
+                       $limit++;
+               }
+               $rs = safe_rows_start('*, id as thisid, unix_timestamp(Posted) as posted', 'textpattern',
                        "Status = 4 $section $categories and Posted <= now() order by ".doSlash($sort).' limit 0,'.intval($limit));

                if ($rs)
@@ -622,12 +627,19 @@

                        while ($a = nextRow($rs))
                        {
-                               $a['Title'] = ($no_widow) ? noWidow(escape_title($a['Title'])) : escape_title($a['Title']);
-                               $out[] = href($a['Title'], permlinkurl($a));
+                               if (!($no_self && ($thisarticle['thisid'] == $a['ID'])))
+                               {
+                                       $a['Title'] = ($no_widow) ? noWidow(escape_title($a['Title'])) : escape_title($a['Title']);
+                                       $out[] = href($a['Title'], permlinkurl($a));
+                               }
                        }

                        if ($out)
                        {
+                               if ($no_self && count($out) > $limit)
+                               {
+                                       array_splice($out, -1);
+                               }
                                return doLabel($label, $labeltag).doWrap($out, $wraptag, $break, $class);
                        }

Last edited by gemal (2007-07-24 19:17:51)

Offline

#6 2007-07-24 19:39:07

ruud
Developer Emeritus
From: a galaxy far far away
Registered: 2006-06-04
Posts: 5,068
Website

Re: Make recent_articles context aware (exclude self)

That can be done much shorter by excluding the current article ID in the SQL query when no_self is set.

Offline

#7 2007-07-24 20:05:04

gemal
Member
From: Copenhagen, Denmark
Registered: 2007-01-09
Posts: 107
Website

Re: Make recent_articles context aware (exclude self)

ruud wrote:

That can be done much shorter by excluding the current article ID in the SQL query when no_self is set.

Index: taghandlers.php
===================================================================
--- taghandlers.php     (revision 2503)
+++ taghandlers.php     (working copy)
@@ -585,6 +585,7 @@
                        'label'    => gTxt('recent_articles'),
                        'labeltag' => '',
                        'limit'    => 10,
+                       'no_self'  => '',
                        'section'  => '',
                        'sort'     => 'Posted desc',
                        'sortby'   => '',
@@ -613,8 +614,13 @@
                $categories = ($category) ? "and (Category1 = '".doSlash($category)."' or Category2 = '".doSlash($category)."')" : '';
                $section = ($section) ? " and Section = '".doSlash($section)."'" : '';

+               $exclude = '';
+               if ($no_self)
+               {
+                       $exclude = ' and id != ' . $thisarticle['thisid'];
+               }
                $rs = safe_rows_start('*, id as thisid, unix_timestamp(Posted) as posted', 'textpattern', 
-                       "Status = 4 $section $categories and Posted <= now() order by ".doSlash($sort).' limit 0,'.intval($limit));
+                       "Status = 4 $section $categories and Posted <= now() $exclude order by ".doSlash($sort).' limit 0,'.intval($limit));

                if ($rs)
                {

Last edited by gemal (2007-07-24 20:18:51)

Offline

#8 2007-07-25 05:34:21

gemal
Member
From: Copenhagen, Denmark
Registered: 2007-01-09
Posts: 107
Website

Re: Make recent_articles context aware (exclude self)

Complete patch. Will someone please look at it?

Index: lang/en-gb.txt
===================================================================
--- lang/en-gb.txt      (revision 2503)
+++ lang/en-gb.txt      (working copy)
@@ -897,6 +897,7 @@
 decimals => Display # numbers after the decimal point
 default_title => Text to use for default section link
 exclude => Exclude
+exclude_self => Exclude current article?
 filename => Name
 file_download_tags => File Downloads
 flavor => Syndication format
Index: include/txp_tag.php
===================================================================
--- include/txp_tag.php (revision 2503)
+++ include/txp_tag.php (working copy)
@@ -940,6 +940,7 @@
           'label',
           'labeltag',
           'limit',
+          'exclude_self',
           'section',
           'sort',
           'wraptag',
@@ -968,6 +969,9 @@
           tagRow('limit',
                fInput('text', 'limit', $limit, 'edit', '', '', 2)).

+          tagRow('exclude_self',
+               yesno_pop('exclude_self', $exclude_self)).
+
           tagRow('label',
                fInput('text', 'label', ($label ? $label : gTxt('recent_articles')), 'edit', '', '', 20)).

@@ -1072,6 +1076,7 @@
           'label',
           'labeltag',
           'limit',
+          'exclude_self',
           'sort',
           'wraptag',
        ));
@@ -1093,6 +1098,9 @@
           tagRow('limit',
                fInput('text', 'limit', $limit, 'edit', '', '', 2)).

+          tagRow('exclude_self',
+               yesno_pop('exclude_self', $exclude_self)).
+
           tagRow('label',
                fInput('text', 'label', ($label ? $label : gTxt('recent_comments')), 'edit', '', '', 20)).

Index: setup/en-gb.php
===================================================================
--- setup/en-gb.php     (revision 2503)
+++ setup/en-gb.php     (working copy)
@@ -903,6 +903,7 @@
        'decimals' => 'Display # numbers after the decimal point',
        'default_title' => 'Text to use for default section link',
        'exclude' => 'Exclude',
+       'exclude_self' => 'Exclude current article',
        'filename' => 'Name',
        'file_download_tags' => 'File Downloads',
        'flavor' => 'Syndication format',
Index: publish/taghandlers.php
===================================================================
--- publish/taghandlers.php (revision 2503)
+++ publish/taghandlers.php (working copy)
@@ -577,7 +577,7 @@

  function recent_articles($atts)
  {
-       global $prefs;
+       global $prefs, $thisarticle;
        extract(lAtts(array(
           'break'    => br,
           'category' => '',
@@ -585,6 +585,7 @@
           'label'    => gTxt('recent_articles'),
           'labeltag' => '',
           'limit'    => 10,
+          'exclude_self' => '',
           'section'  => '',
           'sort'     => 'Posted desc',
           'sortby'   => '',
@@ -613,8 +614,13 @@
        $categories = ($category) ? "and (Category1 = '".doSlash($category)."' or Category2 = '".doSlash($category)."')" : '';
        $section = ($section) ? " and Section = '".doSlash($section)."'" : '';

+       $exclude = '';
+       if ($exclude_self)
+       {
+          $exclude = 'and id != ' . $thisarticle['thisid'];
+       }
        $rs = safe_rows_start('*, id as thisid, unix_timestamp(Posted) as posted', 'textpattern', 
-          "Status = 4 $section $categories and Posted <= now() order by ".doSlash($sort).' limit 0,'.intval($limit));
+          "Status = 4 $section $categories and Posted <= now() $exclude order by ".doSlash($sort).' limit 0,'.intval($limit));

        if ($rs)
        {
@@ -639,18 +645,25 @@

  function recent_comments($atts)
  {
+       global $thisarticle;
        extract(lAtts(array(
           'break'           => br,
           'class'           => __FUNCTION__,
           'label'           => '',
           'labeltag' => '',
           'limit'           => 10,
+          'exclude_self'   => '',
           'sort'     => 'posted desc',
           'wraptag'     => '',
        ), $atts));

+       $exclude = '';
+       if ($exclude_self)
+       {
+          $exclude = 'and parentid != ' . $thisarticle['thisid'];
+       }
        $rs = safe_rows_start('parentid, name, discussid', 'txp_discuss', 
-          'visible = '.VISIBLE.' order by '.doSlash($sort).' limit 0,'.intval($limit));
+          'visible = '.VISIBLE." $exclude order by ".doSlash($sort).' limit 0,'.intval($limit));

        if ($rs)
        {

Offline

#9 2007-07-25 07:06:45

ruud
Developer Emeritus
From: a galaxy far far away
Registered: 2006-06-04
Posts: 5,068
Website

Re: Make recent_articles context aware (exclude self)

What happens when $thisarticle[‘thisid’] is not set (when you’re not on an individual article page)?

Offline

#10 2007-07-25 07:23:31

gemal
Member
From: Copenhagen, Denmark
Registered: 2007-01-09
Posts: 107
Website

Re: Make recent_articles context aware (exclude self)

ruud wrote:

What happens when $thisarticle[‘thisid’] is not set (when you’re not on an individual article page)?

Fail :(
I’ll rewrite when I get home and have access to svn

Offline

#11 2007-07-25 13:40:00

gemal
Member
From: Copenhagen, Denmark
Registered: 2007-01-09
Posts: 107
Website

Re: Make recent_articles context aware (exclude self)

gemal wrote:

Fail :( I’ll rewrite when I get home and have access to svn

What is needed for this to be checked in?

Index: lang/en-gb.txt
===================================================================
--- lang/en-gb.txt      (revision 2503)
+++ lang/en-gb.txt      (working copy)
@@ -897,6 +897,7 @@
 decimals => Display # numbers after the decimal point
 default_title => Text to use for default section link
 exclude => Exclude
+exclude_self => Exclude current article?
 filename => Name
 file_download_tags => File Downloads
 flavor => Syndication format
Index: include/txp_tag.php
===================================================================
--- include/txp_tag.php (revision 2503)
+++ include/txp_tag.php (working copy)
@@ -940,6 +940,7 @@
                'label',
                'labeltag',
                'limit',
+               'exclude_self',
                'section',
                'sort',
                'wraptag',
@@ -968,6 +969,9 @@
                tagRow('limit',
                        fInput('text', 'limit', $limit, 'edit', '', '', 2)).

+               tagRow('exclude_self',
+                       yesno_pop('exclude_self', $exclude_self)).
+
                tagRow('label',
                        fInput('text', 'label', ($label ? $label : gTxt('recent_articles')), 'edit', '', '', 20)).

@@ -1072,6 +1076,7 @@
                'label',
                'labeltag',
                'limit',
+               'exclude_self',
                'sort',
                'wraptag',
           ));
@@ -1093,6 +1098,9 @@
                tagRow('limit',
                        fInput('text', 'limit', $limit, 'edit', '', '', 2)).

+               tagRow('exclude_self',
+                       yesno_pop('exclude_self', $exclude_self)).
+
                tagRow('label',
                        fInput('text', 'label', ($label ? $label : gTxt('recent_comments')), 'edit', '', '', 20)).

Index: setup/en-gb.php
===================================================================
--- setup/en-gb.php     (revision 2503)
+++ setup/en-gb.php     (working copy)
@@ -903,6 +903,7 @@
           'decimals' => 'Display # numbers after the decimal point',
           'default_title' => 'Text to use for default section link',
           'exclude' => 'Exclude',
+          'exclude_self' => 'Exclude current article',
           'filename' => 'Name',
           'file_download_tags' => 'File Downloads',
           'flavor' => 'Syndication format',
Index: publish/taghandlers.php
===================================================================
--- publish/taghandlers.php     (revision 2503)
+++ publish/taghandlers.php     (working copy)
@@ -577,7 +577,7 @@

        function recent_articles($atts)
        {
-          global $prefs;
+          global $prefs, $thisarticle;
           extract(lAtts(array(
                'break'    => br,
                'category' => '',
@@ -585,6 +585,7 @@
                'label'    => gTxt('recent_articles'),
                'labeltag' => '',
                'limit'    => 10,
+               'exclude_self' => '',
                'section'  => '',
                'sort'     => 'Posted desc',
                'sortby'   => '',
@@ -613,8 +614,13 @@
           $categories = ($category) ? "and (Category1 = '".doSlash($category)."' or Category2 = '".doSlash($category)."')" : '';
           $section = ($section) ? " and Section = '".doSlash($section)."'" : '';

+          $exclude = '';
+          if ($exclude_self && $thisarticle['thisid'])
+          {
+               $exclude = 'and id != ' . $thisarticle['thisid'];
+          }
           $rs = safe_rows_start('*, id as thisid, unix_timestamp(Posted) as posted', 'textpattern', 
-               "Status = 4 $section $categories and Posted <= now() order by ".doSlash($sort).' limit 0,'.intval($limit));
+               "Status = 4 $section $categories and Posted <= now() $exclude order by ".doSlash($sort).' limit 0,'.intval($limit));

           if ($rs)
           {
@@ -639,18 +645,25 @@

        function recent_comments($atts)
        {
+          global $thisarticle;
           extract(lAtts(array(
                'break'          => br,
                'class'          => __FUNCTION__,
                'label'          => '',
                'labeltag' => '',
                'limit'          => 10,
+               'exclude_self'   => '',
                'sort'     => 'posted desc',
                'wraptag'        => '',
           ), $atts));

+          $exclude = '';
+          if ($exclude_self && $thisarticle['thisid'])
+          {
+               $exclude = 'and parentid != ' . $thisarticle['thisid'];
+          }
           $rs = safe_rows_start('parentid, name, discussid', 'txp_discuss', 
-               'visible = '.VISIBLE.' order by '.doSlash($sort).' limit 0,'.intval($limit));
+               'visible = '.VISIBLE." $exclude order by ".doSlash($sort).' limit 0,'.intval($limit));

           if ($rs)
           {

Last edited by gemal (2007-07-25 13:50:24)

Offline

#12 2007-07-25 14:34:18

ruud
Developer Emeritus
From: a galaxy far far away
Registered: 2006-06-04
Posts: 5,068
Website

Re: Make recent_articles context aware (exclude self)

Some discussion between the developers, tonight :)

Offline

Board footer

Powered by FluxBB