Forum OpenACS Q&A: Response to Pull-down menus and other navigation issues

Posted by David Richards on
Hey Michael,

It's good to see that you're still thinking of improvements and stuff.

Tagging might be the right idea, but it would be such a strong divergence from pure ACS...hmmm.

But say we got it going.  If we do it right, it ought to be generally applicable, right?

I guess this is how I'd do it.  I'd build a top-down tool that surveys the site.  Instead of using a relational model, I'd build something with a dimensional model.

So, you'd have a fact table with one row in it for every page.  The fact table would have dozens of foreign keys defined in it.  The foreign keys point to attribute tables.  So, the page is not only defined as being a part of the Intranet Module, and is usually called from page X.  Also, it would be defined as an adp page, a page that implements Karl Goldstein's templating system, and a page that feeds to page Z.  If a clickstream datamart is ever built for the ACS (my dream project if I could ever concentrate on it long enough), web-site activity could be integrated into the system.

Then, any sort of site navigation can be built on top of a dimensional model instead of a relational model.  Yes, you could build navigation bars and site maps.  You can also build a site-wide search engine that circumvents any efforts at controlled navigation.  But, the real power would come in getting extremely intellegint query responses.  You could say give me this user's favorite pages, broken by group, as well as some other popular pages, given that these pages are not forms, that they use my specific flavor of formatting, that this user has permission to see them, and they are in the same language this user is browsing in.  This can be done with different modules already, but in an extremely messy sql statement (if it's relational).  But if we take a dimensional approach--the sky's the limit.  If you can dream of a navigational tool, you can probably feed it the right data in one query with this approach.

Of course, you trade elegant code for system resources in this case.  You could have a very good baseline for a navigational system, but you're going to have back-office processes building these tables, you could be forced to invest in a seperate data warehouse machine and a  hot-swap machine to keep things running on a busy site.

I don't know.  It's just a thought.  Really, it's a tangent.  I am reading these discussion boards because my pull-down menus are choking.

David Richards