Skip to main content

Joomla! 2.5: Multiple views, one model

Here goes MVC again: I was a bit confused that every time I created a second or third view for a component, I had to create a separate model for it. Did not make sense to me - I had the necessary algorithms in the model for the first view, did I really need to do copy & paste? I hate it! Redundancy, redundancy, redundancy.

That case occurred in my current project - I created user profiles and needed an "edit" view. The data is the same, but I need to have the data in editable text fields instead of fixed labels, and maybe some other buttons here and there... 

Well, some time later I realized that I just did not quite understand what Joomla! acutally means by "view".  And that there is something called "layout".

Long story short: If you have a model that provides all necessary information and you just want to have a different presentation of it, just add a new .php file to your views/<yourviewname>/tmpl folder - let's call it "layout2". Layout2.php has acces to all data default.php can access - they use the same model. If you want to use it on your site, just add &layout=layout2 to your URL (it would then be something like index.php&option=com_yourcomponent&view=yourview&layout=layout2...).

Comments

  1. THANK YOU. I HATE redundancy with a passion, and the more I study MVC, the more I see what a code-heavy mess it can be if used thoughtlessly. Respect the principles, but common sense does need to come into play. :)

    ReplyDelete
  2. That's a really helpful explanation about layouts and how they can simplify view creation.

    ReplyDelete

Post a Comment

Popular posts from this blog

Joomla! 2.5: Menu Items

Some time ago, I started to create my own components. Everything was working fine, but there was one thing that bugged me (even though it is not really necessary... it just looked strange): When I create a link to my component, I always ended up with something like this in my menu manager: Similar thing for the menu item type: I felt like I somehow missed something, but the tutorials did not say anything about it. After playing around for a little while, I found out that the solution actually is pretty simple: The site > views > viewname > tmpl > default.xml file specifies these texts. Joomla! will look for these keys in the language files. Thus, you just need to add some entries to the language files and voila - everything looks nice and clean, just like this: Step-By-Step: Let's assume you already created the default.xml file with contents similar to these: <?xml version="1.0" encoding="utf-8"?> <metadata>     ...

Joomla! 2.5: Component as Article

Can you put a component on a page together with other articles? Like, for example, to have a component and a blog layout on the "Home" page? Yes, you can! There are some nice extensions that allow for this. I used the "Plugin Include Component" plugin, which is available on extensions.joomla.org . With this plugin, you simply create an article that contains a special tag, indicating the component to include. Just like this: Install the plugin and put the following code in whatever article you need it in (substitute 'componentName' and 'viewname' for your component's and view's name...). {component url='index.php?option=com_ componentName &view= viewname '}