Einträge in umgekehrter Reihenfolge anzeigen

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
orang
Regular
Posts: 23
Joined: Wed Aug 16, 2006 9:03 am

Einträge in umgekehrter Reihenfolge anzeigen

Post by orang » Mon Nov 04, 2019 3:15 am

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';
            }
        }
    }
Last edited by orang on Mon Nov 04, 2019 3:21 am, edited 1 time in total.

orang
Regular
Posts: 23
Joined: Wed Aug 16, 2006 9:03 am

Re: Einträge in umgekehrter Reihenfolge anzeigen

Post by orang » Mon Nov 04, 2019 3:19 am

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!

orang
Regular
Posts: 23
Joined: Wed Aug 16, 2006 9:03 am

Re: Einträge in umgekehrter Reihenfolge anzeigen

Post by orang » Tue Nov 12, 2019 6:12 pm

Gibt es niemanden, der mir helfen könnte?

User avatar
onli
Regular
Posts: 2296
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Einträge in umgekehrter Reihenfolge anzeigen

Post by onli » Tue Nov 12, 2019 10:26 pm

Wie sah die Modifikation der Funktion denn früher aus, und was wäre diesmal dein Ansatz?

Be@t
Regular
Posts: 92
Joined: Sun Dec 18, 2005 5:24 pm
Location: switzerland
Contact:

Re: Einträge in umgekehrter Reihenfolge anzeigen

Post by Be@t » 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.

orang
Regular
Posts: 23
Joined: Wed Aug 16, 2006 9:03 am

Re: Einträge in umgekehrter Reihenfolge anzeigen

Post by orang » Thu Jan 30, 2020 9:59 pm

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

orang
Regular
Posts: 23
Joined: Wed Aug 16, 2006 9:03 am

Re: Einträge in umgekehrter Reihenfolge anzeigen

Post by orang » Thu Jan 30, 2020 10:01 pm

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

Post Reply