Page 1 of 3

New AddOn: recently_changed

Posted: Fri May 27, 2016 11:38 am
by cmb
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.

Re: New AddOn: recently_changed

Posted: Fri May 27, 2016 12:48 pm
by Gert
cmb wrote:the code is supposed to run on CMSimple 4 as well.
You should edit your signature :lol:

Re: New AddOn: recently_changed

Posted: Fri May 27, 2016 2:56 pm
by cmb
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. :)

Re: New AddOn: recently_changed

Posted: Sun May 29, 2016 10:40 am
by cmb
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.

Re: New AddOn: recently_changed

Posted: Wed Nov 08, 2017 11:51 pm
by mhz
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

Re: New AddOn: recently_changed

Posted: Thu Nov 09, 2017 6:55 am
by frase
In "style.css" irgendwo einfügen:

Code: Select all

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

Re: New AddOn: recently_changed

Posted: Thu Nov 09, 2017 10:50 am
by cmb
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.

Re: New AddOn: recently_changed

Posted: Thu Nov 09, 2017 3:35 pm
by mhz
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>';

Re: New AddOn: recently_changed

Posted: Sun Mar 04, 2018 8:18 pm
by olape
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.

Re: New AddOn: recently_changed

Posted: Mon Mar 05, 2018 11:21 am
by cmb
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;
}