Browse Forums Custom Sort Order Questions

1. Using the Forums - Browse Forums widget, I'm seeing that when I select the Custom order in Sort Order, it only shows me the first 50 forums in the query results. Is this intentionally limited and/or is there a setting/override to expand the query?

I'm looking to only enable about 15 forums, but some of the ones I want to see are at the end of the alphabet...

2. Newly added forums appear to be disabled by default when custom order is selected and while I understand the logic of not wanting to change a display that's already been configured, is there a method to enable new forums to display when created without having to go in and edit the widget every time?

I've got a Forums - Browse Forums widget that just lists every forum on the site at the home page, but there has been a request to reorder the forums list in a custom order. While custom order would seem to solve that requirement, new forums are added in sections that not everyone sees, but when they have the permission to see, it should appear in the main list too. I'd like to try to avoid giving the users who are creating new forum applications in sub groups the ability to edit the site home page. Complicating things further, we allow custom user theming on the home page and I don't want to have to revert people's customization for the widget to see new forums every time they are added.

Parents
  • Is this intentionally limited and/or is there a setting/override to expand the query?

    This is intentionally limited to 50. It is showing the first 50 forums alphabetically by name. I believe the reasoning was that manually ordering more than 50 items (or even that many) is difficult enough. 

    is there a method to enable new forums to display when created without having to go in and edit the widget every time?

    When a custom list of forums is defined, new forums are not shown because they are not part of that custom list. There is not currently a way to adjust this logic so that new forums would be included.

    I don't want to have to revert people's customization for the widget to see new forums every time they are added.

    If you lock the browse forums widget on the default version of the site homepage, you would be able to adjust its configuration and have those adjustments be inherited by every user-variation while still allowing users to arrange the browse forums widget and adjust other widgets in their customized homepages.

    Could you identify the use case a little more to help me understand how we could better address this situation? Why are there so many forums in the group? Why so many that you want to hide? Are the forums organized in sub-groups or not? Is there any other distinguishing characteristic in the forums that you want to show in the list (group association, age, etc)?

  • Could you identify the use case a little more to help me understand how we could better address this situation? Why are there so many forums in the group?

    We have what I'm going to call 6 classes of users: Guest, Basic, Intermediate, Advanced, Internal, and Admin. Through predominantly the use of site role permissioning and join-less groups, the user isn't really aware of where they fall in that hierarchy (excepting Guests and Admins for obvious differences) because they aren't generally aware of content that exists but they don't have access to see.

    Our Basic users generally only see applications that are public or, in the case of open membership groups, things they've requested to see additionally. Our Intermediate users are aware there is "more behind the curtain" so to speak as they are able to see an additional group that has specific applications that they are allowed access to use, but aren't aware of the extent of that area. Our Advanced users are aware of most, but not necessarily all, of the content in areas they have access to see, but are still not aware of the breadth of the site as a whole. Our Internal users have their own additional area, but could also still fall into the category of Basic, Intermediate, or Advanced as well. Site Admins of course see everything everywhere, while Group Admins see everything in their group, but not everything on the site. As the naming implies, Group Admins can add and remove applications in their group(s) only, while Site Admins can do so globally. Guests see only what is public to all.

    The site home page uses the browse forums widget which is scoped at the site root group with show all sub-groups and forums within enabled so that based on the permission of the accessing user, they can see everything that they have access to see but don't know what they are missing. Currently this is sorted alphabetically by application name with most users seeing 25 forums on average.

    Why so many that you want to hide?

    We're looking at merging users and content from another platform into our existing site and I wanted to use a Browse Forum widget to give them a single welcome section that just shows the list of the new forums their content has been moved into to help ease the transition pains from their old platform to this one. Ideally, this would probably be a section that sits above the main list and shows maybe 4 or 5 on a page with a page control to let them browse at the top but not affect the general users too much in the amount they need to scroll to see their usual content.

    Are the forums organized in sub-groups or not?

    Yes, and I think this is probably part blessing and part curse. The groups are used mostly as categories with further sub-grouping to narrow that down in logical breaks and/or join points (join-less group containing open membership sub-groups for example). Because they are spread out into different groups, I can't just scope the Browse Forums to a single group that includes them unless it's the site root group. *Maybe the feature request here is to be able to selectively target more than one group in the Browse Forums widget?*

    Is there any other distinguishing characteristic in the forums that you want to show in the list (group association, age, etc)?

    For the filtered welcome list, I show the parent group of the forum application in the Forum Title along with the forum title to give them hints as to where to actually navigate to find the content within the new structure, but that isn't a distinguishing characteristic that is unique amongst all of those items.

    Back to the full list, the desire there would be to order the default view of the list without filtering beyond user permission visibility such that the new and old forums about similar things can be shown as co-mingling while keeping the separation of the content itself into its appropriate group and not having to touch that widget for every user every time. This is very much a rabbit hole of I want it to look a specific way and the platform should just read my mind to make that programmatically happen so I can keep enjoying my latte.

    I suppose it would be nice if I could specify groupings (not to be confused with groups) in an interface somewhere (e.g. A,B,C, etc...) that I could assign the forum application to use and then have the ability to order within the grouping (A1, A2, A3, etc...) in the grouping interface and then order the groupings themselves (B>C>A>D>etc..) for display in the browse widget. If the location of the grouping assignment was at the application level and displayed on create, it would solve the new forums displayed on creation issue. Alternately, and perhaps better, in addition to the explicit buckets (A, B, C, etc..) having an unassigned bucket where new forums are thrown into and could use sort order logic to display their contents. This would give you the option to create something like:
    B - Always First Grouping
    C - Always Second Grouping
    (unassigned) - Somewhere in the middle there
    A - Always Second to Last Grouping
    D - Always Last Grouping

    Perhaps the shorter term workaround is to remove the limit on the number of forums in the custom sort order list and I could provide a locked widget with a custom sort order and remember to specifically add new forums to it.

  • Thank you for the detailed explanation. A few more questions:

    1. How many forums do you estimate need to be pulled out from the list of all in your community to be highlighted in the welcome area?
    2. Are these migrated forums in the welcome area distributed amongst multiple groups? (it sounds like they are... just verifying)
    3. Will you be adding new migrated forums over time to the welcome area or is this a one-time migration and potentially one-time configuration of the welcome forum list?
    4. Do you want to order the main list of forums similarly or is the functionality requirements/limitations only related to the welcome area and the migrated forum list?
    Perhaps the shorter term workaround is to remove the limit on the number of forums in the custom sort order list and I could provide a locked widget with a custom sort order and remember to specifically add new forums to it.

    We do have internal limits on the number of items we can retrieve at a time (100) and general guidelines for a maximum number items to show at a time. Roughly how many forums do you have overall in your community (since you're managing the entire set across all groups)?

    This is very much a rabbit hole of I want it to look a specific way and the platform should just read my mind to make that programmatically happen so I can keep enjoying my latte.

    That's a good feature request Smiley

    1. How many forums do you estimate need to be pulled out from the list of all in your community to be highlighted in the welcome area?
    2. Are these migrated forums in the welcome area distributed amongst multiple groups? (it sounds like they are... just verifying)
    3. Will you be adding new migrated forums over time to the welcome area or is this a one-time migration and potentially one-time configuration of the welcome forum list?
    4. Do you want to order the main list of forums similarly or is the functionality requirements/limitations only related to the welcome area and the migrated forum list?
    1. About 15
    2. Yes, from about 6 groups (though could be narrowed to 4 if "include sub-groups" is enabled
    3. One time migration (fingers-crossed) and ideally one-time configuration during the migration downtime (though there is always the risk of "you did that thing, can you do it for me here?")
    4. The forum order request is mostly for the main list where all of the content co-mingles. Though it would be nice to also order the welcome area (migrated) forums list, I could live with not ordering that since it would only display about 4 or 5 items at a time per page anyways.
    Roughly how many forums do you have overall in your community (since you're managing the entire set across all groups)?

    After the migration I estimate about 70ish "active"/enabled forums at a time. I use "active" here to mean enabled at the application level not as a reference to post frequency. We have a sizable number of forums that are disabled at the application level (older content archived), but those already aren't included for display so I'm not sure if they matter to your question.

  • Thanks for the additional details. I have a few possible ways to get close to what I think you want (all slight compromises):

    A. Instead of a single browse forums widget, add one per group to the site homepage. This may help you avoid the 50 forum limit when filtering. It may require updating the browse forum widget to hide when there are no items (to properly adjust based on your roles/permissions), but that's a simple change and I can provide guidance on making that change. (Least effort -- configuration and a single line widget modification)

    B. Create a copy of the browse forums widget and explicitly define (in the widget's implementation) the list of forums in their required order using the ApplicationIds parameter and ApplicationIdsOrder sort order against the core_v2_forum.List() API. By moving the order/list out of configuration, you'd be able to expose the rest of the configuration to users who customize their homepages while still being able to edit the order later as new forums are added. (Medium effort -- this would be a fair amount of work to get the application IDs of all of the forums and order them properly and apply changes to the widget to use this list)

    C. If you're using 10.2 or newer, define a custom forum ordering configuration template for the browse forums widget. In 10.2 and newer versions of the platform, widgets can define their own custom UIs (embedded in the widget) to define configuration options. With a custom implementation, the forum list could show multiple pages of forums potentially (to increase the limit beyond 50 or even 100). The implementation could also be done such that new forums *are* included. (Medium-high effort)

    Let me know if you'd like more details on any of these options.

    The details of the overall ordering and priority order for your forums is a bit more of a special case, but, if you log it in the feature requests list and it gets some votes, it will be considered for a future release.

  • Hi ,

    Thanks for your time and assistance on this. Option B seems like it would be the best fit for the Welcome Area requirement while Option C would probably be the best option for the full list (especially since I intend to have us update from 10.1 to 10.3.x before the import).

    If you wouldn't mind sharing details on B and C, I'd be very grateful. (Feel free to PM me if that's preferred.)

  • For Option B:

    1. In Widget Studio, find the Browse Forums widget and from the "Widget Actions" button, create a copy.
    2. In the widget copy,
      1. Edit the Configuration and remove the XML nodes defining the configuration options with IDs "group", "groupAndSubGroups", and "forumSelection" -- these won't be used anymore because the widget will have a hard-coded list of forums to include.
      2. In list.vm, 
        1. Remove this code (which reads the groupAndSubGroups configuration):
          #set ($showSubGroups = $core_v2_widget.GetBoolValue('groupAndSubGroups', false))
        2. Remove this code (which applies the groupAndSubGroups configuration to the query... note that this is part of the line that defines the $query variable):
          IncludeSubGroups=$showSubGroups,
        3. Remove this code (which reads and applies the group configuration to the forum listing query): 
          #set($group = false)
          #set($group = $core_v2_utility.ParseInt($core_v2_page.ParseQueryString($core_v2_widget.GetCustomValue('group', '')).Value('Group')))
          #if ($group > 0)
          	$query.Add('GroupId', $group)
          #else
          	$query.Add('GroupId', $core_v2_group.Current.Id.ToString())
          #end
        4. Remove this code (which reads the forumSelection configuration and applies it to the forum listing query):
          #if($sortBy == 'ApplicationIdsOrder')
              #set($forumSelection = false)
              #set ($forumSelection = $core_v2_widget.GetCustomValue('forumSelection', ''))
              #if ($forumSelection && $forumSelection.Length > 0)
              	#set($forumSelection = $core_v2_utility.Join(',', $core_v2_page.ParseQueryString($forumSelection).Values('forum')))
              	$query.Add('ApplicationIds', $forumSelection)
              #end
          #end
        5. After the $query variable is defined, you can add the following line to add a location for you to specify applications by their ID to be used by the forum listing query:
          $query.Add('ApplicationIds', 'ID1,ID2,ID3')
        6. In the line you just added, specify the comma-separated list of the Application IDs from forums that you want included in the widget. You can get these IDs by going to Manage Forum > Forum Options, scrolling to the bottom of that panel and clicking 'View Identifiers'. You'll want the "Application Identifier" for each forum you want to include in the result.
    3. Save the new widget and add it to your homepage.

    Option C is a bit more involved and would be easier to implement once we release the updated implementation of the configuration property template. When that is done, the page size and loading logic will be embedded in the browse forums widget and will be easier to adjust. 

  • Option B works great for the Welcome Area! I also edited the default value for the sortBy to be 'ApplicationIdsOrder' in list.vm and Configuration otherwise it defaulted to an alphabetical list of the enabled ApplicationIds.

    Is there a quick list of forums and their Application Ids or is going to each one and viewing the identifier the only way? I don't mind doing it the long way, just checking to see if there is a faster way.

    Option C is a bit more involved and would be easier to implement once we release the updated implementation of the configuration property template. When that is done, the page size and loading logic will be embedded in the browse forums widget and will be easier to adjust. 

    What's the time frame on that release? 10.3.x? 11? Future?

    Our upgrade and merge timeline is likely to happen before July 2019 so I want to be sure to plan appropriately.

  • s there a quick list of forums and their Application Ids or is going to each one and viewing the identifier the only way?

    This is a great use of the "Script Sandbox" in Widget Studio. Open that and paste the following script:

    #set($forums = $core_v2_forum.List("%{ SortBy = 'Name', SortOrder = 'Ascending', PageSize = 100, PageIndex = 0 }"))
    <ol>
    #foreach($forum in $forums)
        <li><b>$forum.Name</b> in $forum.Group.Name ($forum.ApplicationId)</li>
    #end
    </ol>

    This will list the first 100 forums ordered by name. You can change the PageIndex to get the next 100 if you need to.

    What's the time frame on that release? 10.3.x? 11? Future?

    Likely future. You could use the same technique as Option B in the meantime.

  • This is a great use of the "Script Sandbox" in Widget Studio

    I forget about that so often. Thanks for the tip.

    Likely future. You could use the same technique as Option B in the meantime.

    Unfortunately, option B doesn't take into account new forums as they are created and would need to be manually updated every time a forum is added anywhere unless there is some trick I'm missing from your explanation.

    I get the impression that option C, without the platform updates to the configuration template implementation, is probably too complex to post to an open forum thread for use without supervision. Is it something that you could PM me instead?

    Alternately, would the query structure support getting a full list of Application IDs at run-time (to catch new forums), removing the desired ordered IDs from the list (to avoid duplication), injecting the specific order at the beginning and/or end of the list and then returning the new list for pagination?

  • Is it something that you could PM me instead?

    That's the biggest issue, to be honest. If I had an implementation to share, it'd be in the next release.

    Alternately, would the query structure support getting a full list of Application IDs at run-time (to catch new forums), removing the desired ordered IDs from the list (to avoid duplication), injecting the specific order at the beginning and/or end of the list and then returning the new list for pagination?

    Yes, this could be accomplished by merging the approach for Option B with the sandbox script to list forums. Something like:

    #set($applicationIdsToInclude = $core_v2_utility.Split(',', 'ID1,ID2,ID3,ID4'))
    #set($applicationIdsToExclude = $core_v2_utility.Split(',', 'ID5,ID6'))
    
    #set($forums = $core_v2_forum.List("%{ SortBy = 'Name', SortOrder = 'Ascending', PageSize = 100, PageIndex = 0 }"))
    #foreach($forum in $forums)
        #set($forumApplicationId = $forum.ApplicationId.ToString())
        #if ($applicationIdsToInclude.IndexOf($forumApplicationId) < 0 && $applicationIdsToExclude.IndexOf($forumApplicationId) < 0)
            $applicationIdsToInclude.Add($forumApplicationId)
        #end
    #end
    
    $query.Add('ApplicationIds', $core_v2_utility.Join(',', $applicationIdsToInclude))

Reply
  • Is it something that you could PM me instead?

    That's the biggest issue, to be honest. If I had an implementation to share, it'd be in the next release.

    Alternately, would the query structure support getting a full list of Application IDs at run-time (to catch new forums), removing the desired ordered IDs from the list (to avoid duplication), injecting the specific order at the beginning and/or end of the list and then returning the new list for pagination?

    Yes, this could be accomplished by merging the approach for Option B with the sandbox script to list forums. Something like:

    #set($applicationIdsToInclude = $core_v2_utility.Split(',', 'ID1,ID2,ID3,ID4'))
    #set($applicationIdsToExclude = $core_v2_utility.Split(',', 'ID5,ID6'))
    
    #set($forums = $core_v2_forum.List("%{ SortBy = 'Name', SortOrder = 'Ascending', PageSize = 100, PageIndex = 0 }"))
    #foreach($forum in $forums)
        #set($forumApplicationId = $forum.ApplicationId.ToString())
        #if ($applicationIdsToInclude.IndexOf($forumApplicationId) < 0 && $applicationIdsToExclude.IndexOf($forumApplicationId) < 0)
            $applicationIdsToInclude.Add($forumApplicationId)
        #end
    #end
    
    $query.Add('ApplicationIds', $core_v2_utility.Join(',', $applicationIdsToInclude))

Children
No Data