Faceted Navigation on Plone 5.2.1

I'm fairly sure this is going to be a feature we're going to want to use for a number of things on our site in time, but for the moment, I have a pretty simple usage case. I'm putting together a company phone directory, based on information in our Active Directory. Currently I have a PowerShell script that pulls the required information, formats it, and uses the REST API to update a page with the required tables. It even inserts a little alphabetic selector at the top that allows you to jump to that letter of the alphabet.

I've been asked (since this is what they have now on Sharepoint, which we're transitioning from) if instead of jumping to a letter, I can have it filter the list to display just that letter instead.

My idea is to modify my REST API script to create an object for each person and display the results in a table, using Faceted Navigation to filter the list based on the letter of the alphabet clicked.

My first attempt used the eea.facetednavigation add-on. This seems to be pretty wildly broken in 5.2.1. The first issue is that the Actions to enable and disable faceted navigation don't appear after installation. I was able to manually create actions for these by just making an "Enable Faceted Navigation" and "Disable Faceted Navigation" Object action in Site Setup with their Action URL set to string:${object_url}/@@faceted_subtyper/enable and string:${object_url}/@@faceted_subtyper/disable, respectively. It's pretty kludgey and takes up a lot of UI space, but it does seem to work.

From there, as a simple test, I created some objects and set up a hidden filter that limits the navigation to their folder and a non-hidden alphabetic filter. It works! Except that instead of giving me a nice table of output, it only displays these gigantic tiles with each one labelled with that item's Title -- not really suitable for a phone directory. If I change the view to Tabular, the alphabetic selector still shows, but instead of a table below it, I get " This site encountered an error trying to fulfill your request. If the error persists please contact the site maintainer. Thank you for your patience." This seems to only occur if you use the alphabetic filter -- if you leave it out you can use a tabular display. However, it's pretty much the only reason for setting this up right now. The traceback for this is as follows:

Traceback (innermost last):
  Module ZPublisher.WSGIPublisher, line 156, in transaction_pubevents
  Module ZPublisher.WSGIPublisher, line 338, in publish_module
  Module ZPublisher.WSGIPublisher, line 256, in publish
  Module ZPublisher.mapply, line 85, in mapply
  Module ZPublisher.WSGIPublisher, line 62, in call_object
  Module eea.facetednavigation.caching.nocache, line 12, in replacement
  Module eea.facetednavigation.browser.app.query, line 213, in __call__
  Module Products.Five.browser.pagetemplatefile, line 126, in __call__
  Module Products.Five.browser.pagetemplatefile, line 61, in __call__
  Module zope.pagetemplate.pagetemplate, line 135, in pt_render
  Module Products.PageTemplates.engine, line 88, in __call__
  Module z3c.pt.pagetemplate, line 173, in render
  Module chameleon.zpt.template, line 306, in render
  Module chameleon.template, line 209, in render
  Module chameleon.utils, line 75, in raise_with_traceback
  Module chameleon.template, line 187, in render
  Module 52640c83ec016a02bef7a1622bcd409e.py, line 169, in render
  Module 0566690dfb5a6446ed300413119a1e0f.py, line 111, in render_content_core
  Module 0566690dfb5a6446ed300413119a1e0f.py, line 343, in render_listing
  Module Products.PageTemplates.expression, line 101, in __call__
  Module plone.app.contenttypes.browser.folder, line 104, in batch
  Module eea.facetednavigation.browser.app.query, line 207, in results
TypeError: ('Could not adapt', <generator object WidgetFilterBrains.__call__ at 0x7fb30a22f0a0>, <InterfaceClass plone.app.contentlisting.interfaces.IContentListing>)

 - Expression: "view/batch"
 - Filename:   ... ne/app/contenttypes/browser/templates/listing_tabular.pt
 - Location:   (line 22: col 29)
 - Source:     <tal:results define="batch view/batch">
 - Expression: "view/macros"
 - Filename:   ... y3.6.egg/eea/facetednavigation/browser/template/query.pt
 - Location:   (line 11: col 28)
 - Source:     <metal:block use-macro="view/macros" />
 - Arguments:  template: <ViewPageTemplateFile - at 0x7fb3124dc780>
               options: {...} (0)
               args: <tuple - at 0x7fb32f407048>
               nothing: <NoneType - at 0x88e860>
               modules: <_SecureModuleImporter - at 0x7fb31d0efa58>
               request: <WSGIRequest - at 0x7fb30a4995c0>
               view: <SimpleViewClass from /opt/plone/buildout-cache/eggs/eea.facetednavigation-13.7-py3.6.egg/eea/facetednavigation/browser/template/query.pt faceted_query at 0x7fb30a2f87b8>
               context: <ImplicitAcquisitionWrapper projects at 0x7fb312a41438>
               views: <ViewMapper - at 0x7fb30a2f8e48>
               here: <ImplicitAcquisitionWrapper - at 0x7fb312a41af8>
               container: <ImplicitAcquisitionWrapper projects at 0x7fb312a41438>
               root: <ImplicitAcquisitionWrapper  at 0x7fb315122090>
               traverse_subpath: <list - at 0x7fb30a1b3408>
               user: <ImplicitAcquisitionWrapper - at 0x7fb312a413f0>
               default: <object - at 0x7fb32f402a90>
               repeat: {...} (0)
               loop: {...} (0)
               wrapped_repeat: <SafeMapping - at 0x7fb30a1b3488>
               target_language: <NoneType - at 0x88e860>
               translate: <function translate at 0x7fb30a1167b8>
               plone_view: <Plone plone at 0x7fb30a2f8630>
               batch_base_url: http://casdpln01:8080/Intranet/en-ca/projects
               folderContents: <Batch - at 0x7fb30a35d9e8>
               contentFilter: {...} (0)
               kssClassesView: <NoneType - at 0x88e860>
               getKssClasses: <NoneType - at 0x88e860>
               templateId: query.pt
               macroname: macros

I then tried using collective.collectionfilter, which has the nice plus of working on collections, thus allowing me to customize the table display to some degree. However, while it has a search widget, which is nice, its filter widgets seem to not only be based only on full values (so "Smith" instead of "S*"), but they seem to not allow Title as a possible value, and I'm not sure offhand how to extend the list of possible fields. (Also, I have no idea how I could add custom fields to the tabular display of a collection, but I believe that's at least possible.)

Are there any other faceted navigation tools that might be useful? Is it possible to make eea.facetednavigation work better with Plone 5.2.1, and/or work around that table display error? Am I overlooking a super obvious alternate way to do this?

I use eea.facettednavigation in multiple sites in Plone 5.2.1 and it works just fine, actions and all. I usually write a custom faceted:view to adapt what is displayed to my needs.
Which version do you use?

I was using 13.6, and I tried pinning 13.7 this morning, since I saw that version was the latest, but it didn't change the behaviour for me.

Both of our sites have had it installed and then uninstalled in the past. I wonder if it's possible that that's causing something to fail?

I have to admit that I've never written a custom faceted view. I've just started looking at it. The documentation seems a bit light. Is that a thing that's easy to do? Is it possible to point me to some docs on it? If not, that's okay; I'll google it when I get a chance. Things are a bit wild here right now.

Okay, the lack of actions appearing on the actions menu appears to be a re-occurrence of this issue:

Fortunately, the "quick fix" supplied in that thread does work (in the ZMI, go to portal_setup / Import, and import EEA Faceted Navigation Common Configuration).

Do you know of any good documentation on writing a custom faceted:view?

Also, the failure of eea.facetednavigation in Tabular View appears to be caused by the Alphabetic widget (which is unfortunately the specific widget I want to use) and is also a known issue going back a few years (sadly):

Plone Foundation Code of Conduct