Does an "article" really need to be a different kind of thing? Or rather, what kind of thing does it need to be? Is it simply the root post of a thread, with the special behavior that it disappears within x days if there are no comments? Or is it a sort of ad-hoc category in its own right, with the first comment being "level 1" within that category? (I'm not talking implementation, but conceptually.)
I'm still thinking through this as I type, but I'll throw my current thinking out in case it triggers any flashes of inspiration.
Let's say you have categories. Within each category, you can have articles and "unassociated" threads. Internally you maintain an "Open Topic article" for each category, which the "unassociated" threads actually descend from. The display can be admin- or user-selected to be one of three styles, depending on forum type and traffic:
- Only articles on the front page. "Open Topic" is listed as the last article on the page. All articles show an "Unread Posts" count. (Non-logged-in users would just see "Posts".) Open Topic shows "X Unread Posts in Y threads". To create a new open thread you have to click into the Open Topic article first. Articles (except for Open Topic) drop off the front page after x days.
- After "Articles" on the front page are the unread second level threads under the Open Topic article, each appearing as a top-level article. All topics and Open Topic threads show "Unread Posts". (Or "Posts" when not logged in.) There is a "New Topic" button at the top of the page that adds an "Open Topic" thread. Articles drop off the front page after x days.
- Similar to option 2, but show all unread threads expanded.
I would think under options 1 & 2 if you are viewing an article "Mark All" should work at the article level, which means all threads under the Open Topic would roll up under a single date. Under option 3, or when viewing the front page under options 1 & 2, "Mark All" would work for all articles in a category. Basically "Mark All" applies to whatever level you're looking at. This might mean setting dates for every top-level article in a category, or having a separate date field at the category level, depending on performance / optimization issues.