Customization of simple module
Hi,
I have a question, if the following is possible with a simple module.
I have a combination of "normal" pages and pages which get there content from simple modules.
In addition I have a simple module where I can define image stages for the layout.
I have overloaded the pages_model, so that I can add can create a mapping between page and image_stage via the page_id.
My next task is to provide a possibility to add a mapping between a simple module and image_stage.
Do you have any idea how to solve this? As far as I can see, there are no variables in simpel modules... For usability I am looking for a way to integrate this mapping into the backend.
Comments
One thought I had was regarding your mapping between module models. For associations between module models, I would look at the various ways to create relationships between models:
http://docs.getfuelcms.com/general/models#relationships
If you have a look at www.feuerwehr-bs.de in the header of the page you see that big image. This is the image_stage I am talking about.
So on my site I have a combination of simple content pages (I want to use the pages module for this) and more complex special pages which I want to realize via simple modules.
My idea is too have a table with the image_stages and a table where I define the relation between content page and image_stage.
For the normal content pages I have realized this via a hook in the pages_module to save the relation in the table.
For the special pages my idea is too have an image_stage for the overview page and another for the detail page.
Now I could make the database entries for this... but I want to have a way to select the image_stage in the backend... So I need to have a global variable in the simple module to save the stage id.
$fields['big_image'] = array('type' => 'select', 'model' => array('image_stages_model' => 'my_custom_options'));
More can be found here about using classes for your layouts:
http://docs.getfuelcms.com/general/layouts#layouts_custom_classes
For your generated module pages, I would add a image_stages_id foreign key field in the database table to capture the image_stages.id and then add the following to your simple module's model (assuming the model's name is image_stages_model):
public $foreign_keys = array('image_stages_id' => 'image_stages_model);
Also, do the simple modules contain all the information you need to generate the page? If so, the soon to be released develop branch makes this really easy with something called module posts.
https://github.com/daylightstudio/FUEL-CMS/tree/develop
The documentation for this can be found in the fuel/modules/fuel/views/_docs/modules/simple.php under the Generated Post Pages section.
the simple module is just used for adminstration of the database items.
The frontendpart will be represented by a "normal" content page with a special layout for the simple module which takes part of all the content grabbing etc. via the custom class.
I think then I do not need to save the image_stages_id in the simple modules table as foreign key. I would have one content page for the overview and one for the detail page. The layout for the simple module then will have a configuration parameter with a dropdown box for the image_stage_id. This is sufficient because I do not want to have a different image stage id for each simple modules item. They will all have the same image stage id.
Got it right?
I have chosen another way to select the stage for the content page...
I have build a custom pages_model my_pages_model and overwritten the form_fields method to add the parameter to the header fields.
public function form_fields($values = array(), $related = array()) { $fields = parent::form_fields($values = array(), $related = array()); $fields['stage']['type'] = 'select'; $fields['stage']['options'] = $this->_stage_options_list(); return $fields; } private function _stage_options_list() { $CI =& get_instance(); $this->load_model('stages_model'); return $this->stages_model->get_stage_options(); } public function on_after_save($values) { $CI =& get_instance(); $this->load_model('stages_model'); $values = parent::on_after_save($values); $page_id = $values['id']; $stage_id = $_POST['stage']; $this->stages_model->create_update_stage_mapping($page_id, $stage_id); return $values; } public function on_after_delete($where) { parent::on_after_delete($where); $this->db->where(array('page_id' => $where['id'])); $this->db->delete('stage_mapping'); }
Now the page model takes care about saving and deleting the stage_image mapping for the page.
$this->fuel_page->id;
isnt'working
Hmpf... got it ;-)
$CI->fuel_page->id...
sorry for that...