From 7ec0441e689c9fc6f7e4a15ea0e73223f848460d Mon Sep 17 00:00:00 2001 From: onli Date: Fri, 20 Feb 2026 12:16:09 +0100 Subject: [PATCH 1/3] freetags 4.1: Base related entries on amount of shared tags Instead of taking all entries with common tags and to order them by date, now it orders all those entries first by the amount of common tags. That way entries that are topically related will feature more prominently in the list of related entries, if tagged accordingly --- serendipity_event_freetag/ChangeLog | 2 ++ .../serendipity_event_freetag.php | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/serendipity_event_freetag/ChangeLog b/serendipity_event_freetag/ChangeLog index f6b268a6f..028ba3d6d 100644 --- a/serendipity_event_freetag/ChangeLog +++ b/serendipity_event_freetag/ChangeLog @@ -1,3 +1,5 @@ +4.1: Match related entries by amount of shared tags + 4.0: * Avoid more warnings under PHP 8.x * Drop outdated option to create a technorati link diff --git a/serendipity_event_freetag/serendipity_event_freetag.php b/serendipity_event_freetag/serendipity_event_freetag.php index 71f2beb81..1d3e3df7d 100644 --- a/serendipity_event_freetag/serendipity_event_freetag.php +++ b/serendipity_event_freetag/serendipity_event_freetag.php @@ -67,7 +67,7 @@ function introspect(&$propbag) 'smarty' => '2.6.7', 'php' => '7.0' )); - $propbag->add('version', '4.0'); + $propbag->add('version', '4.1'); $propbag->add('event_hooks', array( 'frontend_fetchentries' => true, 'frontend_fetchentry' => true, @@ -415,9 +415,10 @@ function getRelatedEntries($tags, $postID) { $tags[$idx] = serendipity_db_escape_string($tag); } - $q = "SELECT DISTINCT e1.entryid, + $q = "SELECT e1.entryid, e2.title, - e2.timestamp + e2.timestamp, + COUNT(e2.title) AS shared_tags FROM {$serendipity['dbPrefix']}entrytags AS e1 LEFT JOIN {$serendipity['dbPrefix']}entries AS e2 ON e1.entryid = e2.id @@ -425,7 +426,8 @@ function getRelatedEntries($tags, $postID) { AND e1.entryid != " . (int)$postID . " AND e2.isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e2.timestamp <= " . time() : '') . " - ORDER BY e2.timestamp DESC + GROUP BY e2.id + ORDER BY shared_tags DESC, e2.timestamp DESC LIMIT " . $this->get_config('show_related_count', 10); $result = serendipity_db_query($q, false, 'assoc', false, 'entryid', 'title'); From 27c541628ee0b6905e8c0a5337d19a6f02bc40da Mon Sep 17 00:00:00 2001 From: onli Date: Tue, 24 Feb 2026 11:59:09 +0100 Subject: [PATCH 2/3] Fix freetag for mysql and postgres by extending group clause --- serendipity_event_freetag/serendipity_event_freetag.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/serendipity_event_freetag/serendipity_event_freetag.php b/serendipity_event_freetag/serendipity_event_freetag.php index 1d3e3df7d..7a92cba50 100644 --- a/serendipity_event_freetag/serendipity_event_freetag.php +++ b/serendipity_event_freetag/serendipity_event_freetag.php @@ -418,7 +418,7 @@ function getRelatedEntries($tags, $postID) { $q = "SELECT e1.entryid, e2.title, e2.timestamp, - COUNT(e2.title) AS shared_tags + COUNT(e2.id) AS shared_tags FROM {$serendipity['dbPrefix']}entrytags AS e1 LEFT JOIN {$serendipity['dbPrefix']}entries AS e2 ON e1.entryid = e2.id @@ -426,7 +426,7 @@ function getRelatedEntries($tags, $postID) { AND e1.entryid != " . (int)$postID . " AND e2.isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e2.timestamp <= " . time() : '') . " - GROUP BY e2.id + GROUP BY e2.id, e1.entryid, e2.title, e2.timestamp ORDER BY shared_tags DESC, e2.timestamp DESC LIMIT " . $this->get_config('show_related_count', 10); From 3a437e06e7809df7c9992181d6dc865704488f06 Mon Sep 17 00:00:00 2001 From: onli Date: Wed, 25 Feb 2026 08:49:00 +0100 Subject: [PATCH 3/3] Remove unnecessary column from GROUP clause --- serendipity_event_freetag/serendipity_event_freetag.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serendipity_event_freetag/serendipity_event_freetag.php b/serendipity_event_freetag/serendipity_event_freetag.php index 7a92cba50..e56157b62 100644 --- a/serendipity_event_freetag/serendipity_event_freetag.php +++ b/serendipity_event_freetag/serendipity_event_freetag.php @@ -426,7 +426,7 @@ function getRelatedEntries($tags, $postID) { AND e1.entryid != " . (int)$postID . " AND e2.isdraft = 'false' " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e2.timestamp <= " . time() : '') . " - GROUP BY e2.id, e1.entryid, e2.title, e2.timestamp + GROUP BY e1.entryid, e2.title, e2.timestamp ORDER BY shared_tags DESC, e2.timestamp DESC LIMIT " . $this->get_config('show_related_count', 10);