For the first grid, a dataProvider for published book;
For the second grid, a dataProvider for unpublished book;
An ActiveForm to handle user data;
For 1) and 2) if you don’t need to implement search inside the grid, model is unnecessary, because it is required only the data provider for each grid;
For 3) you can pass an empty model and then in the controller check if $_POST data is filled.
The problem is both of cgridview filter send the same name attributes (Book[id],Book[title] etc) to the action, so there is conflict on filter of two cgridviews
In addition the form (that generates names based on the class name of the models) may make worst the conflict with the two cgridviews, especially in case all of them use the same method (GET or POST)
Both of widgets, $fotm->textField ,etc use internally the get_class PHP function to generate the name of the html fields
In addition, I want to use search both for two cgridview (your answer 1,2).
The only think that separate the form for the two cgridview is by using GET (about cgridview) and POST method (about form). But I can’t seperate the cgridview filters…