Page 1 of 1

Einträge in umgekehrter Reihenfolge anzeigen

Posted: Mon Nov 04, 2019 3:15 am
by orang
Hallo zusammen,

ich habe schon vor Jahren einen Serendipity-Blog eingerichtet, bei dem ich den Code in functions_entries.inc_.php so geändert hatte, dass die Einträge:
- in umgekehrter Reihenfolge dargestellt werden, d.h. der älteste zuerst, der neueste zum Schluss
- und nur die Einträge dargestellt werden, die neuer sind als der aktuelle Timestamp.

Jetzt habe ich aber vor einigen Monaten schon eine neue Version draufgespielt (Serendipity 2.1.4) und ich kriege es nicht mehr hin. Könnte mir jemand dabei helfen? Oder gibt es mittlerweile eine Einstellung, die das ermöglicht?

Dankeschön!
Stefan


Um diesen Code-Abschnitt geht es:

Code: Select all

function &serendipity_fetchEntries($range = null, $full = true, $limit = '', $fetchDrafts = false, $modified_since = false, $orderby = 'timestamp DESC', $filter_sql = '', $noCache = false, $noSticky = false, $select_key = null, $group_by = null, $returncode = 'array', $joinauthors = true, $joincategories = true, $joinown = null) {
    global $serendipity;

    if ($serendipity['useInternalCache']) {
        $cache = serendipity_setupCache();

        $args = func_get_args();
        $args = array_values($args);
        $key = md5(serialize($args));

        if (($entries = $cache->get($key, "fetchEntries")) !== false) {
            return unserialize($entries);
        }
    }
    
    $cond = array();
    $cond['orderby'] = $orderby;
    if (isset($serendipity['short_archives']) && $serendipity['short_archives']) {
        // In the short listing of all titles for a month, we don't want to have a limit applied. And we don't need/want toe
        // full article body (consumes memory)
        $limit   = '';
        $full    = false;
    }

    if ($full === true) {
        $noCache = true; // So no entryproperties related to body/extended caching will be loaded
        $body = ', e.body, e.extended';
    } else {
        $body = '';
    }

    if ($fetchDrafts === false) {
        $drafts = "isdraft = 'false'";
    }

    if ($limit != '') {
        $serendipity['fetchLimit'] = $limit;
    }

    /* Attempt to grab range from $serendipity, if $range is not an array or null */
    if (!is_array($range) && !is_null($range) && isset($serendipity['range'])) {
        $range = $serendipity['range'];
    }

    if (is_numeric($range)) {
        $year  = (int)substr($range, 0, 4);
        $month = (int)substr($range, 4, 2);
        $day   = (int)substr($range, 6, 2);

        $startts = serendipity_serverOffsetHour(mktime(0, 0, 0, $month, ($day == 0 ? 1 : $day), $year), true);
		
		
		
		
        if ($day == 0) {
            $month++;
        } else {
            $day++;
        }

        $endts = serendipity_serverOffsetHour(mktime(0, 0, 0, $month, ($day == 0 ? 1 : $day), $year), true);
		
		
		
        $cond['and'] = " WHERE e.timestamp >= $startts AND e.timestamp <= $endts";
    } elseif (is_array($range) && count($range)==2) {
        $startts = serendipity_serverOffsetHour((int)$range[0], true);
        $endts   = serendipity_serverOffsetHour((int)$range[1], true);
        $cond['and'] = " WHERE e.timestamp >= $startts AND e.timestamp <= $endts";
    } else {
        if ($modified_since) {
            $unix_modified = strtotime($modified_since);
            if ($unix_modified != -1) {
                $cond['and'] = ' WHERE last_modified >= ' . (int)$unix_modified;
                if (!empty($limit)) {
                    $limit = ($limit > $serendipity['max_fetch_limit'] ? $limit : $serendipity['max_fetch_limit']);
                }
                $cond['orderby'] = 'last_modified DESC';
            }
        }
    }

Re: Einträge in umgekehrter Reihenfolge anzeigen

Posted: Mon Nov 04, 2019 3:19 am
by orang
Ich wollte noch hinzufügen:

Ich habe es geschafft, die Einträge in umgekehrter Reihenfolge darzustellen, aber was ich nicht hinkriege, ist die "range" bzw. den SQL string so zu definieren, dass nur die Einträge dargestellt werden, die neuer sind als der aktuelle Timestamp!

Re: Einträge in umgekehrter Reihenfolge anzeigen

Posted: Tue Nov 12, 2019 6:12 pm
by orang
Gibt es niemanden, der mir helfen könnte?

Re: Einträge in umgekehrter Reihenfolge anzeigen

Posted: Tue Nov 12, 2019 10:26 pm
by onli
Wie sah die Modifikation der Funktion denn früher aus, und was wäre diesmal dein Ansatz?

Re: Einträge in umgekehrter Reihenfolge anzeigen

Posted: Fri Nov 15, 2019 12:22 am
by Be@t
Achtung: unqualifizierter Beitrag!

Bin gerade über nachfolgendes Plugin gestolpert. Habe es nicht ausprobiert, doch vielleicht löst es das Problem.

Einträge für nicht-registrierte Benutzer nach Verfallsdatum ausblenden

serendipity_event_outdate_entries
version 1.6 (GPL, Zuletzt aktualisiert 2013-12-11)
Garvin Hicking
Serendipity >= 0.8

Blendet alle Einträge die ein definiertes Alter überschritten haben aus, so dass sie nur für registrierte Benutzer sichtbar sind.

Re: Einträge in umgekehrter Reihenfolge anzeigen

Posted: Thu Jan 30, 2020 9:59 pm
by orang
Hallo,

es tut mir leid, dass ich mich so spät melde. Die Notify-per-E-Mail-Funktion funktionierte nicht und ich habe es dann total vergessen. Ich hoffe, jemand antwortet mir dennoch!

Mein Ansatz früher war folgender:

In der am Anfang gequoteten Funktion war mein erster Schritt:
  • Die Variable $orderby, die am Anfang übergeben wird, würde ich auf DESC setzen, also so:

    Code: Select all

     function &serendipity_fetchEntries(..... $orderby = 'timestamp DESC', ....
    - Das funktioniert auch tatsächlich immer noch.
Danach hatte ich im folgenden Abschnitt - wenn ich mich richtig erinnere - die Variable $today, die in der else-if-Schleife definiert wird, benutzt um dann weiter unten, wo die SQL-Abfrage definiert wird, die SQL-Abfrage zu erweitern, um diesen Teil:

Code: Select all

AND e.timestamp >= $today

Hier dieser gesamte Abschnitt, wie er früher war:

Code: Select all

/* Attempt to grab range from $serendipity, if $range is not an array or null */
    if (!is_array($range) && !is_null($range) && isset($serendipity['range'])) {
        $range = $serendipity['range'];
    }
	elseif (is_null($range))
	 {
		$today=mktime();
		$cond['and'] = " WHERE timestamp >= $today";
	}
	
	//$today=date('n') . date('d') . date('Y');

    if (is_numeric($range)) {
        $year  = (int)substr($range, 0, 4);
        $month = (int)substr($range, 4, 2);
        $day   = (int)substr($range, 6, 2);

        $startts = serendipity_serverOffsetHour(mktime(0, 0, 0, $month, ($day == 0 ? 1 : $day), $year), true);
	$today=mktime();

        if ($day == 0) {
            $month++;
        } else {
            $day++;
        }

        $endts = serendipity_serverOffsetHour(mktime(0, 0, 0, $month, ($day == 0 ? 1 : $day), $year), true);
	
	$cond['and'] = " WHERE e.timestamp >= $startts AND e.timestamp <= $endts AND e.timestamp >= $today";
        //$cond['and'] = " WHERE e.timestamp >= $startts AND e.timestamp <= $endts";
    } elseif (is_array($range) && count($range)==2) {
        $startts = serendipity_serverOffsetHour((int)$range[0], true);
        $endts   = serendipity_serverOffsetHour((int)$range[1], true);
        $cond['and'] = " WHERE e.timestamp >= $startts AND e.timestamp <= $endts";
        .
        .
        .

Das Problem ist, dass dieser Teil der Funktion geändert wurde. Soweit ich das sehe wurde diese else-if herausgenommen

Code: Select all

elseif (is_null($range))
	 {
		$today=mktime();
		$cond['and'] = " WHERE timestamp >= $today";
	} :

Hier der aktuelle Code. Ich bin inzwischen einfach zu sehr raus aus dem Kontext, steige nicht mehr so ganz durch, was ich da jetzt machen könnte... Hat jemand eine Idee?

Code: Select all

/* Attempt to grab range from $serendipity, if $range is not an array or null */
    if (!is_array($range) && !is_null($range) && isset($serendipity['range'])) {
        $range = $serendipity['range'];
    }

    if (is_numeric($range)) {
        $year  = (int)substr($range, 0, 4);
        $month = (int)substr($range, 4, 2);
        $day   = (int)substr($range, 6, 2);

        $startts = serendipity_serverOffsetHour(mktime(0, 0, 0, $month, ($day == 0 ? 1 : $day), $year), true);
		
		
		
		
        if ($day == 0) {
            $month++;
        } else {
            $day++;
        }

        $endts = serendipity_serverOffsetHour(mktime(0, 0, 0, $month, ($day == 0 ? 1 : $day), $year), true);
		
		
		
        $cond['and'] = " WHERE e.timestamp >= $startts AND e.timestamp <= $endts";
} elseif (is_array($range) && count($range)==2) {
        $startts = serendipity_serverOffsetHour((int)$range[0], true);
        $endts   = serendipity_serverOffsetHour((int)$range[1], true);
        $cond['and'] = " WHERE e.timestamp >= $startts AND e.timestamp <= $endts";

Ich wäre sehr dankbar um jeden Rat oder Input! Dankeschön!!

LG,
Stefan

Re: Einträge in umgekehrter Reihenfolge anzeigen

Posted: Thu Jan 30, 2020 10:01 pm
by orang
Be@t wrote: Fri Nov 15, 2019 12:22 am Achtung: unqualifizierter Beitrag!

Bin gerade über nachfolgendes Plugin gestolpert. Habe es nicht ausprobiert, doch vielleicht löst es das Problem.

Einträge für nicht-registrierte Benutzer nach Verfallsdatum ausblenden

serendipity_event_outdate_entries
version 1.6 (GPL, Zuletzt aktualisiert 2013-12-11)
Garvin Hicking
Serendipity >= 0.8

Blendet alle Einträge die ein definiertes Alter überschritten haben aus, so dass sie nur für registrierte Benutzer sichtbar sind.
Ich habe mir das noch nicht weiter angeschaut. Auf unserer Seite gibt es keine Registrierung, alle Inhalte sind frei sichtbar, deshalb wird es vermutlich nicht funktionieren??


LG,
Stefan