Thanks - that helps a lot. I won't be able to do #10 for a while - this is a mature, complex app, so it would probably take me a year of doing nothing else in order to rewrite it completely in OOP/MVC. I don't have that kind of time - there is a lot more going on in my life. So as I have learned more, I've decided that when I need to work on my existing pages for other reasons, I'll try to start building some of the pieces in OOP - hopefully if I structure them right, they can become part of the future MVC version of the monolith. The key is having enough vision to do them in such a way that they will fit into the future structure, so I don't have to redo them again (much!).
I'm encouraged by your comments that I don't need to be "hung up on..." or a "purist". Back in the days of the move to markup/CSS separation, table allergy, and the "everything must validate" mantra, I had a lot of trouble keeping up, and still do - although I try to be the purist that the world tells me to be, in many cases I spend 100 times as much time getting my layout to behave using CSS than it would have taken to whip up a quick table to hold some things in place. And after I spent a ton of time adding all kinds of things to my markup (e.g. "<br>" -> "<br />") to validate as XHTML, which was supposed to be the new standard, now with HTML5 I'm told that it doesn't matter anymore - argh. Anyway, I digress...
Yes, I would love to see examples of your table class (as well as the model and base you offered, although I think I'm closer to grasping those ideas). My tables also use a lot of jQuery - the simplest cases just use it to allow re-ordering (the tablesorter plugin), the medium cases add the capability of CSV export (hide display-only columns and show CSV-only columns, call the table2CSV plugin, then put it all back), and the fanciest cases (several throughout my app, all joining data from multiple database tables) initially hide columns that the user doesn't usually care about (user settings to choose which ones) and then allow them to show/hide columns dynamically (columnmanager and clickmenu plugins). For that last case, I ultimately want to only query data for the visible columns and use AJAX to fill in columns the user shows later, but I can't get the retroactive-column-filling to work for some reason, so right now I just pull in all the data (which can be quite slow!). I'm hoping that in the process of writing a generic PowerTable class and having to think through how my code works, I'll find the problem and get that last aspect to actually work.
Since I have three levels of fancy-ness, I'm trying to decide if that is best as one class that knows from the parameters which features to implement, or a simple class that is then extended twice by other classes. You can't answer that - I have to see which works best in my code.
Regarding models, I think the only key concept I still lack before diving in is how to handle joined data. The books and tutorial videos I've been studying use really simple examples, with each model representing a single db table. But my database is complex and highly normalized, so I'm constantly joining several db tables in different ways to get what I'm going to show my users. Am I supposed to "join" models somehow in my controllers?
Regarding templates (which I guess are synonymous with "views"?), when there are multiple things on a page (including multiple tables), would you structure it as a single template for the page that reaches out to helpers and instantiated model objects as needed, or a controller that assembles the page from multiple templates (e.g. header + form + powertable + another form + another table + footer)?