Filtering posts based on a few paramaters?



  • I have a few ideas about plugins. I want to use solr to create a plugin that updates the view in an ajax fashion. So basically on each keypress I ask for some data and in realtime update the list of posts/topics.

    I also want to have a filtering dropdown that allows me to select if I want to view the "latest" posts, "popular posts", or "unanswered" posts while updating the list in realtime.

    Normally I would use angular, or backbone for a job like this, theoretically I could implement them and copy the template from my theme into a client side template and hack like that, but its messy.

    I am curious how can I make some calls i.e solr/filterBy then use the response to update the view in a NodeBB way?

    I can dig into some existing plugins, but I want to ask here for some insights and possibly be pointed towards themes/plugins that have similar like features. I know NodeBB is already using ajaxify, so I could read more about it and maybe I can do something with that.

    Thanks



  • +1, would be good to see.


  • Admin

    We do something similar in groups details page (the member search). It's nothing special just jquery



  • @psychobunny Sooooo it could be factored into tags and categories? 😛



  • Ok so I have successfully done this with solr!

    This is probably obvious to all expert nodebb people here, but for me I had to really look at the source code/docs/google to understand how the eco system works.

    After configuring the nodebb-plugin-solr the api call out of the box looks like /api/search/KEYWORD?in=titlespost I am still trying to figure out how the plugin is hooked up with the core and how this route triggers the solr query.

    Simply with ajax I just make a get request to the route and with the response I see now how I can use ajaxify.

    // search function
    $('form.search').on('submit', function(e) {
        e.preventDefault();
    
        var word = $(this).find('input.searchV').val();
    
        $.ajax({
            url: '/api/search/'+word+'?in=titlesposts',
            type: 'get',
            dataType: 'html',
            success: function (data) {
                var parsed = JSON.parse(data);
                var results = parsed;
    
                console.log(results);
                
                // TODO: pass results.posts into template
                ajaxify.loadTemplate('partials/search_results_topic', function(resultItem) {
                    var html = templates.parse(resultItem, results);
                    $('.topic-list').html(html);
                });
    
            },error: function(data) {
    
                // TODO: error handling
                console.log(data);
            }
        });
    
    });

  • Community Rep

    fyi You can use $.get as a shortcut function.

    $.get('/api/search/'+word+'?in=titlesposts', function (results) {
      console.log(results);
    });
    


  • @yariplus lol yeah would be more simpler, I know about that method, but I went with the longer approach because my first few tries I had issues so I made assumptions that it was data type or something. Thanks though, that method definitely makes the code look cleaner.


 

| |