New AddOn: recently_changed

Third Party Plugins to CMSimple - how to install, use and create plugins

Moderator: Tata

cmb
Posts: 12893
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

New AddOn: recently_changed

Post by cmb » Fri May 27, 2016 11:38 am

The "recently_changed" AddOn facilitates to display a list of pages that have most recently been changed. Only the page headings are listed as links to the respective page.

Installation: put the following code in cmsimple/userfuncs.php:

Code: Select all

<?php

/**
 * @copyright 2016 Christoph M. Becker
 * @license   GPLv3
 */
function recently_changed($count = 5)
{
    global $pd_router;

    $pageData = $pd_router->find_all();
    uasort($pageData, function ($a, $b) {
        return $b['last_edit'] - $a['last_edit'];
    });

    $pages = array();
    $i = 0;
    foreach (array_keys($pageData) as $page) {
        if ($i < $count) {
            if (!hide($page)) {
                $pages[] = $page;
            }
            $i++;
        } else {
            break;
        }
    }

    global $sn, $h, $u;

    $html = '<ul class="recently_changed">';
    foreach ($pages as $page) {
        $html .= '<li><a href="' . "$sn?$u[$page]" . '">' . $h[$page] . '</a></li>';
    }
    $html .= '</ul>';
    return $html;
}
Usage:
  • to show the list on all pages insert the following in an appropriate place in template.htm:

    Code: Select all

    <?php echo recently_changed()?>
  • to show the list on a single page only, insert the following on that page:

    Code: Select all

    {{{PLUGIN:recently_changed();}}} 
You can also give the maximum number of pages to list as parameter, like so:

Code: Select all

recently_changed(10) 
Enjoy!

Maybe somebody wants to tell Edi about this; the code is supposed to run on CMSimple 4 as well.
Last edited by cmb on Sun May 29, 2016 10:32 am, edited 1 time in total.
Reason: fixed bug reported by Gert
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

Gert
Posts: 3053
Joined: Fri May 30, 2008 4:53 pm
Location: Berlin
Contact:

Re: New AddOn: recently_changed

Post by Gert » Fri May 27, 2016 12:48 pm

cmb wrote:the code is supposed to run on CMSimple 4 as well.
You should edit your signature :lol:
Gert Ebersbach | CMSimple | Templates - Plugins - Services

cmb
Posts: 12893
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: New AddOn: recently_changed

Post by cmb » Fri May 27, 2016 2:56 pm

Gert wrote:
cmb wrote:the code is supposed to run on CMSimple 4 as well.
You should edit your signature :lol:
Well, this is an addon, not a plugin. :)
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

cmb
Posts: 12893
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: New AddOn: recently_changed

Post by cmb » Sun May 29, 2016 10:40 am

From http://cmsimple.org/forum/viewtopic.php ... 2046#p2047:
Gert wrote:Von solchen Schnellschüssen kann ich nur abraten. Dieses Addon erfasst z. B. auch versteckte Seiten, und es ist sicher nicht der Sinn einer versteckten Seite, dass sie nach einer Änderung aus Versehen verlinkt wird. Und es kümmert sich auch nicht darum, ob eine Seite mit MembersArea geschützt ist. Und es erfasst nicht nur neu erzeugte Seiten, sondern jede Änderung, und das will Edi ja gar nicht.
Indeed, showing hidden pages is a bug. Thanks for reporting. I fixed that in the code above.

Whether to show pages that are protected by MembersArea (or Memberpages or Register for that matter) is arguable. In my opinion it's not a problem to show these pages, as there still protected (well, the heading is shown, but that doesn't appear to be a real issue). And anyway, the add-on could be easily adapted to cater to protected pages, but I would prefer to do that with a common API instead of treating each memberpages-like plugin individually.

Your last concern is valid. However, there is Yanp_XH which could be used instead (requires CMSimple_XH, though). This had the nice additional benefit of offering an RSS feed.
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

mhz
Posts: 546
Joined: Tue Jun 25, 2013 8:46 pm
Location: Heusenstamm, Hessen
Contact:

Re: New AddOn: recently_changed

Post by mhz » Wed Nov 08, 2017 11:51 pm

Hallo zusammen,
ich habe recently_changed ins template eingefügt und wenn die geänderten Seiten angezeigt werden, kommen diese und weitere Aufzählungszeichen zum Vorschein; dann sind es doppelte nebeneinander (einmal als disc und dann auch als circle). Ich habe, um diese loszuwerden, die list-style-type: none; eingefügt. Der circle verschwand, disc bleibt übrig und ich weiß nicht, wie ich den wegbekomme bzw wo ich das in styles.css finde http://test.kramlade.de/ bzw. wo und was ich dort ergänzen muss.

@ cmb: Eine andere Überlegung habe ich auch: Lässt sich das addon vermutlich im Bereich <ul class=" so erweitern, dass dort festgelegt wird, dass keine Listenformatierung stattfindet?

Danke für eure Vorschläge!
Grüße
Michael
Michael Zajusch (mhz)-- Mein Tutorial für CMSimple_XH. Früher

frase
Posts: 2298
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: New AddOn: recently_changed

Post by frase » Thu Nov 09, 2017 6:55 am

In "style.css" irgendwo einfügen:

Code: Select all

ul.recently_changed {
    list-style-type: none;
}

cmb
Posts: 12893
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: New AddOn: recently_changed

Post by cmb » Thu Nov 09, 2017 10:50 am

mhz wrote:Eine andere Überlegung habe ich auch: Lässt sich das addon vermutlich im Bereich <ul class=" so erweitern, dass dort festgelegt wird, dass keine Listenformatierung stattfindet?
Ich denke, das würde nicht viel helfen, da statt list-style heutzutage häufig ::before Pseudoelemente verwendet werden, um Listen zu stylen. Ich sehe zwei Möglichkeiten: entweder stylt man bei Bedarf individuell nach (in diesem Fall sollte die Liste eigentlich korrekt dargestellt werden), oder man ändert das Addon, so dass statt <ul> und <li> eben <div>s generiert werden.
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

mhz
Posts: 546
Joined: Tue Jun 25, 2013 8:46 pm
Location: Heusenstamm, Hessen
Contact:

Re: New AddOn: recently_changed

Post by mhz » Thu Nov 09, 2017 3:35 pm

Danke Christoph!
Ich bin Deinem Vorschlag gefolgt und habe im Addon die <ul> und <li> gegen <div> und natürlich die </ul> und </li> gegen </div>ersetzt.
Das klappt gut und es hat auch noch den schönen Nebeneffekt, dass der Abstand (den vorher die blockbullets einnahmen) nicht mehr da ist und ausgeglichen werden muss. Die Seitennamen erscheinen nun gleich linksbündig.

Der bisherige Programmcode war:

Code: Select all

    $html = '<ul class="recently_changed">';
    foreach ($pages as $page) {
        $html .= '<li>' . date("d.m.Y", $pageData[$page]['last_edit'])
               . ':  <a href="' . "$sn?$u[$page]" . '">' . $h[$page] . '</a></li>';
    }
    $html .= '</ul>';
Der neue Programmcode ist:

Code: Select all

        $html = '<div class="recently_changed">';
        foreach ($pages as $page) {
        $html .= '<div>' . date("d.m.Y", $pageData[$page]['last_edit'])
               . ':  <a href="' . "$sn?$u[$page]" . '">' . $h[$page] . '</a></div>';
        }
        $html .= '</div>';
Michael Zajusch (mhz)-- Mein Tutorial für CMSimple_XH. Früher

olape
Posts: 666
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: New AddOn: recently_changed

Post by olape » Sun Mar 04, 2018 8:18 pm

Ich habe die Funktion i.M. auch in meiner Seite drin.
Das Datum als h2.

Jetzt fände ich es schöner, wenn im Extremfall vielleicht 5 Seiten am gleichen Tag geändert wären, dass nicht 5x das Datum auftaucht, sondern eben nur einmal mit 5 Links.
Also, alle Seiten mit dem gleichen Änderungsdatum unter einer Datumsangabe zusammengefasst würden.
Ich hoffe, ich drücke mich verständlich aus.

Müsste man vielleicht über ein zweidimensionales Array lösen können.
Wenn ich Lust und Zeit habe, seh ich mir das noch mal an.

cmb
Posts: 12893
Joined: Tue Jun 21, 2011 11:04 am
Location: Mü-Sa, RLP, DE
Contact:

Re: New AddOn: recently_changed

Post by cmb » Mon Mar 05, 2018 11:21 am

olape wrote:
Sun Mar 04, 2018 8:18 pm
Müsste man vielleicht über ein zweidimensionales Array lösen können.
Ja. Könnte etwa so aussehen:

Code: Select all

<?php

/**
 * @copyright 2018 Christoph M. Becker
 * @license   GPLv3
 */
function recently_changed($count = 5)
{
    global $pd_router;

    $pageData = $pd_router->find_all();
    uasort($pageData, function ($a, $b) {
        return $b['last_edit'] - $a['last_edit'];
    });

    $pages = array();
    $i = 0;
    foreach (array_keys($pageData) as $page) {
        if ($i < $count) {
            if (!hide($page)) {
                $timestamp = $pageData[$page]['last_edit'];
                $date = XH_formatDate($timestamp); // date('Y-m-d', $timestamp);
                $pages[$date][] = $page;
            }
            $i++;
        } else {
            break;
        }
    }

    global $sn, $h, $u;

    $html = '<dl class="recently_changed">';
    foreach ($pages as $date => $group) {
        $html .= '<dt>' . $date . '</dt>';
        foreach ($group as $page) {
            $html .= '<dd><a href="' . "$sn?$u[$page]" . '">' . $h[$page] . '</a></dd>';
        }
    }
    $html .= '</dl>';
    return $html;
}
Last edited by cmb on Mon Mar 05, 2018 2:17 pm, edited 1 time in total.
Reason: Code korrigiert
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

Post Reply