mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
FEATURE: add advanced order to search (#10385)
Similar to `advanced_filter` I introduced `advanced_order`. I needed a new option because default orders are evaluated after advanced_filter so I couldn't use it. Also, that part is a little bit more generic ``` elsif word =~ /order:\w+/ @order = word.gsub('order:', '').to_sym nil ``` After those changes, I can use them in plugins in this way: ``` Search.advanced_order(:votes) do |posts| posts.reorder("COALESCE((SELECT dvvc.counter FROM discourse_voting_vote_counters dvvc WHERE dvvc.topic_id = subquery.topic_id), 0) DESC") end ```
This commit is contained in:

committed by
GitHub

parent
ab2b6f8dea
commit
12a00d6dc5
@ -190,6 +190,22 @@ class Plugin::Instance
|
||||
DiscoursePluginRegistry.register_editable_group_custom_field(field, self)
|
||||
end
|
||||
|
||||
# Allows to define custom search order. Example usage:
|
||||
# Search.advanced_order(:chars) do |posts|
|
||||
# posts.reorder("(SELECT LENGTH(raw) FROM posts WHERE posts.topic_id = subquery.topic_id) DESC")
|
||||
# end
|
||||
def register_search_advanced_order(trigger, &block)
|
||||
Search.advanced_order(trigger, &block)
|
||||
end
|
||||
|
||||
# Allows to define custom search filters. Example usage:
|
||||
# Search.advanced_filter(/^min_chars:(\d+)$/) do |posts, match|
|
||||
# posts.where("(SELECT LENGTH(p2.raw) FROM posts p2 WHERE p2.id = posts.id) >= ?", match.to_i)
|
||||
# end
|
||||
def register_search_advanced_filter(trigger, &block)
|
||||
Search.advanced_filter(trigger, &block)
|
||||
end
|
||||
|
||||
# Request a new size for topic thumbnails
|
||||
# Will respect plugin enabled setting is enabled
|
||||
# Size should be an array with two elements [max_width, max_height]
|
||||
|
Reference in New Issue
Block a user