New AddOn: recently_changed

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

Moderator: Tata

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

Re: New AddOn: recently_changed

Post by olape » Mon Mar 05, 2018 1:44 pm

cmb wrote:
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[$i]['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;
}
Wenn ich auch geschrieben hatte, wenn ich Zeit und Lust habe ... :D
Aber, es war nur so ein Gedanke. Eine konkrete Vorstellung hatte ich noch nicht.

Und mit dl, dt, dd. Das sind immer so die Feinheiten. Sehr schön.

Aber, irgendwas passt noch nicht. Ich habe auf der Spielwiese mal die alte (oben) und neue Version drin. Die Angeben der alten Variante sind korrekt. (unabhängig der CSS-Formatierung, die nun nicht mehr ganz passt.)
Die Datumsangaben variieren? Egal wie diese Formatiert sind.

cmb
Posts: 12718
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 2:18 pm

olape wrote:
Mon Mar 05, 2018 1:44 pm
Aber, irgendwas passt noch nicht. Ich habe auf der Spielwiese mal die alte (oben) und neue Version drin. Die Angeben der alten Variante sind korrekt. (unabhängig der CSS-Formatierung, die nun nicht mehr ganz passt.)
Die Datumsangaben variieren? Egal wie diese Formatiert sind.
Oh, stimmt! Da hatte sich ein Fehler eingeschlichen (in der Zeile mit $timestamp =), den ich im vorherigen Post nun korrigiert habe.
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

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

Re: New AddOn: recently_changed

Post by olape » Mon Mar 05, 2018 2:46 pm

cmb wrote:
Mon Mar 05, 2018 2:18 pm
Oh, stimmt! Da hatte sich ein Fehler eingeschlichen (in der Zeile mit $timestamp =), den ich im vorherigen Post nun korrigiert habe.
So passt es.

Danke

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

Re: New AddOn: recently_changed

Post by olape » Tue Mar 06, 2018 2:32 pm

Ich habe Christophs und Franks Funktion noch ein wenig "aufgebohrt".

Warum?

Wer, wie ich, in einer zweiten, dritten, oder auch x. Ebene, jeweils gleiche Seitennamen hat.
Also:
- Ebene-1a / Bilder
- Ebene-1b / Bilder
- Ebene-1c / Bilder
Bei dem kann das Ergebnis dann einfach so ausgfallen:
02.03.2018
- Bilder
- Bilder
03-03.2018
- Bilder
...
Das ist zwar korrekt, aber eben nicht so schön.
Besser wäre (finde ich):
02.03.2018
- Ebene-1a Bilder
- Ebene-1b Bilder
03-03.2018
- Ebene-1c Bilder
...

Code: Select all

<?php
/**
 * @copyright 2016 Christoph M. Becker
 * @copyright 2016 (for some additions) by svasti
 * 2018 small modifications by olape
 * @license   GPLv3
 */
/*
	{{{recently_changed()}}}, {{{recently_changed(10)}}}, {{{PLUGIN:recently_changed(10,24);}}}, {{{PLUGIN:recently_changed('',24);}}}
	oder im Template:
	<?php echo recently_changed()?>, <?php echo recently_changed(10)?>, <?php echo recently_changed(10,24)?>, <?php echo recently_changed('',24)?>
*/

function recently_changed($count = 5, $length = 28)
{
	global $pd_router, $cf;

	$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 = date('d.m.Y', $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>';
			$linktext = str_replace($cf['uri']['seperator'], ' ', $u[$page]);
			$linktext_length = strlen($linktext);
			if($linktext_length > $length) {
				$linktext = substr($linktext, -$length);
				$stringpos = strpos($linktext, ' ');
				$linktext = substr($linktext, (-$length + $stringpos));
			}
			$html .= '<dd><a href="' . "$sn?$u[$page]" . '">- ' . $linktext . '</a></dd>';
		}
	}
	$html .= '</dl>';
	return $html;
}

?>
Aufruf: (erster Parameter wie gehabt, Anzahl der Einträge (Standard 5), zweiter Parameter max. Länge der Linktexte (Standard 28).

Code: Select all

{{{PLUGIN:recently_changed();}}}
{{{PLUGIN:recently_changed(10);}}} 
{{{PLUGIN:recently_changed(10,24);}}}
{{{PLUGIN:recently_changed('',24);}}}
Vorher:
Screenshot-2018-3-6_1.png
Nachher:
Screenshot-2018-3-6_2.png
You do not have the required permissions to view the files attached to this post.

pmschulze
Posts: 63
Joined: Thu Aug 07, 2014 5:29 pm

Re: New AddOn: recently_changed

Post by pmschulze » Sun Mar 11, 2018 1:42 pm

Tolle Idee, aber wie bekomme ich das Datum auf Deutsch eingestellt.
Egal, wo ich die Funktion einsetzte, bekomme ich die englische Version.
Das Layout mit der farblichen Absetzung sieht im Übrigen auch gut aus...

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

Re: New AddOn: recently_changed

Post by cmb » Sun Mar 11, 2018 2:00 pm

pmschulze wrote:
Sun Mar 11, 2018 1:42 pm
Tolle Idee, aber wie bekomme ich das Datum auf Deutsch eingestellt.
Egal, wo ich die Funktion einsetzte, bekomme ich die englische Version.
Die relevante Zeile in Olafs jüngster Version ist:

Code: Select all

$date = date('d.m.Y', $timestamp);
Das erzeugt ein Datum wie 11.03.2018.

In meiner jünsten Variante ist die relevante Zeile:

Code: Select all

$date = XH_formatDate($timestamp); // date('Y-m-d', $timestamp);
Wenn du diese verwendest (wovon ich ausgehe), dann solltest du in den Spracheinstellungen Locale → All auf de_DE setzen. Siehe dazu auch http://wiki.cmsimple-xh.org/doku.php/se ... ate_format; für dich ist wohl der zweite Absatz relevant.
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

pmschulze
Posts: 63
Joined: Thu Aug 07, 2014 5:29 pm

Re: New AddOn: recently_changed

Post by pmschulze » Sun Mar 11, 2018 4:49 pm

Welch ungewöhlicher Ort: Die Einstellung muss in der Sprach-Einstellung (Sprach-Datei) geändert werden, unter Locale: de_DE

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

Re: New AddOn: recently_changed

Post by olape » Sun Mar 11, 2018 7:18 pm

pmschulze wrote:
Sun Mar 11, 2018 4:49 pm
Welch ungewöhlicher Ort: Die Einstellung muss in der Sprach-Einstellung (Sprach-Datei) geändert werden, unter Locale: de_DE
Wenn man die Sprachdatei mal nicht auf Sprache reduziert, sondern unter dem Gesichtspunkt Localisierung sieht, dann passt das gut.

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

Re: New AddOn: recently_changed

Post by cmb » Sun Mar 11, 2018 9:44 pm

olape wrote:
Sun Mar 11, 2018 7:18 pm
pmschulze wrote:
Sun Mar 11, 2018 4:49 pm
Welch ungewöhlicher Ort: Die Einstellung muss in der Sprach-Einstellung (Sprach-Datei) geändert werden, unter Locale: de_DE
Wenn man die Sprachdatei mal nicht auf Sprache reduziert, sondern unter dem Gesichtspunkt Localisierung sieht, dann passt das gut.
Und letztlich ist das eben eine Einstellung, die im Zweifel für jede Sprache unterschiedlich sein muss.
Christoph M. Becker –Plugins for CMSimple_XH, but not for CMSimple 4+

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

Re: New AddOn: recently_changed

Post by olape » Sun Mar 18, 2018 6:33 pm

olape wrote:
Tue Mar 06, 2018 2:32 pm

Code: Select all

<?php
/**
 * @copyright 2016 Christoph M. Becker
 * @copyright 2016 (for some additions) by svasti
 * 2018 small modifications by olape
 * @license   GPLv3
 */
/*
	{{{recently_changed()}}}, {{{recently_changed(10)}}}, {{{PLUGIN:recently_changed(10,24);}}}, {{{PLUGIN:recently_changed('',24);}}}
	oder im Template:
	<?php echo recently_changed()?>, <?php echo recently_changed(10)?>, <?php echo recently_changed(10,24)?>, <?php echo recently_changed('',24)?>
*/

function recently_changed($count = 5, $length = 28)
{
	global $pd_router, $cf;

	$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 = date('d.m.Y', $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>';
			$linktext = str_replace($cf['uri']['seperator'], ' ', $u[$page]);
			$linktext_length = strlen($linktext);
			if($linktext_length > $length) {
				$linktext = substr($linktext, -$length);
				$stringpos = strpos($linktext, ' ');
				$linktext = substr($linktext, (-$length + $stringpos));
			}
			$html .= '<dd><a href="' . "$sn?$u[$page]" . '">- ' . $linktext . '</a></dd>';
		}
	}
	$html .= '</dl>';
	return $html;
}

?>
So richtig 100%ig funktioniert das immer noch nicht.
Rufe ich nur

Code: Select all

{{{recently_changed()}}}
auf, dann habe ich manchmal 5 Einträge (so soll es ja sein), manchmal aber auch nur 3. Warum? in welchem Zusammenhang? keine Ahnung.
Also, das ist nicht zufällig durch Seitenwechsel bedingt, sondern ändert sich max. mit der nächsten Bearbeitung.
Jetzt habe ich

Code: Select all

{{{recently_changed('7', '28')}}}
drin.
Ergebnis:
Screenshot-2018-3-18 CMSimple_XH Plugins Kawasaki Vulcan VN800 VN1600 Classic.png
Oder mit der Datumsformatierung von Christoph:

Code: Select all

$date = XH_formatDate($timestamp); // date('Y-m-d', $timestamp);
Screenshot-2018-3-18 CMSimple_XH Plugins Kawasaki Vulcan VN800 VN1600 Classic 2.png
You do not have the required permissions to view the files attached to this post.

Post Reply