Module overriding in Joomla 1.6 - templates

I am new to Joomla, started learning it just a day ago and didn't manage to find an answer to my question in the docs (which suck real bad compared to Drupal).
So what I want to do is override the whole module in a template. The documentation only suggests I can override the markup of a module by placing corresponding files in the html folder, but I have to make some corrections to the actual logic. Is copying the module, changing and then installing it as a separate entity the only way to go? I mean it makes sense that "template" folder is for "views" but with the kind of application I have to develop it is gonna be annoying...

Yeah, you can only override views.
If you want to override logic, you have 2 options:
Change the actual logic in-place, which leads to problems on updating etc
Duplicate the module and change the logic, as you suggested

One other way to consider is to replicate or fix the logic in the template. While this is not a very slick way of doing it, it is faster, especially than duplicating a whole component.
Note that you can also add your own libraries to the Joomla libraries folder to centralize your own code.
Further, if you manage your code with (for example) svn, you should not have any problems on upgrades with creating new views that may include their own logic.

Related

Customizing OpenCart - How should it be done?

I'm developing an OpenCart shop using OC 2.1 and I'm struggling to understand what is the best solution for creating custom changes on controller level.
Here's a simplified example to show you what I'm wondering about:
I'd like to modify my header. The graphic design I'm implementing uses different writing for My account link depending on if the user is already logged in or not. This is of course a very simple thing to change, so here are my ideas:
I could just edit my new template's header.tpl file to use:
<?php echo $logged ? $text_account_signed : $text_account; ?>
That requires a change in a language file and that file is outside of the template folder. I'll leave the language issue out for this example to make it less complicated.
But to create a solution that is more MVC I should make that change in the catalog/controller/header.php file, shouldn't I? Unfortunately that file is outside of the template folder so in case of an update, the change will be lost or would require fixing by hand.
I could however create an extension with an extension.ocmod.xml file that would make a change in the controller header.php file and it would be safer (not sure if 100% sage though) for future updates. But the amount of extensions and/or the complexity of creating them would greatly impact my project time, I suppose. And that makes me tempted to just edit the source code of OpenCart and make my future self worry about it later. But I care about this guy and I'm sure he'd hate me for that at some point.
So, my real question is: Is there a way of creating OpenCart modifications on controller level that would not break future updates?
Regarding modifying existing Controller, Models, Languages yes you either need to use vQmod or OCMOD and for template yes you can create your own template according to need. there is no other option.
If you are using vQmod or OCMOD then you don't have to worry about updates because there is less chances of issue (issue may occur only in major updates).
For vQmod there are other easy tools like vQgen and vQmanager available
For Opencart Overall general info

Beginning Joomla Development - Templates and Modules?

I am planning to begin my Joomla development adventures, so I have been digging up some resources on Joomla beginner such as:
Joomla 2.5 Beginner Guide
I think I have grasped the fundamental concept, though I have a doubt that if anyone doesn't mind clearing up for me.
If I have my own template ( I am planning to use my own Twitter Bootstrap template ), and I am planning to convert it to Joomla, and inside that template there are already samples for some modules such as front page slider, testimonials, partner links, etc, from what I understood these have to go as modules, since Joomla allows one component, and many modules in a page (hence a index page might have Welcome message as component, and sliding banner, testimonials as modules).
So my question is do I have to write these testimonials, page slider modules on my own? Since I already have the samples (css and html) and I know how they will be positioned. Wouldn't it be a bit of overkill to write modules for each? What if at later stage I am making another website, and I have another template?
Also, from examples I have seen, Joomla template have only one html template (index.php) which defines all the positions. If I want to define two possible layout for one template, is that possible? Or it has to go in different templates, and I assign them separately in my Template Manager.
Ok firstly, as for the Joomla version, you have 2 choices.
Joomla 2.5 as it's the recommended long term version.
Joomla 3.0, the new short term release which is completely based on Bootstrap, therefore it might be easier to adapt it to make it look like your template.
usually I would recommend Joomla 2.5 but in your case I think Joomla 3.0 might be the best way to go.
As for the modules, you don't necessarily have to write them yourself. You can download all these sort of things from the Joomla Extensions Directory. If you are worried about positioning of modules, then simply ensure that the template has the module positions in the correct place. Using the Joomla 3.0 template and adapting it to look like your template will be much easier when it comes to modules, as it already has a lot or pre-defined positions. If you feel the need to add more, you can do so. See links below:
Adding you own module positions in Joomla 1.5/2.5
Adding you own module positions in Joomla 3.0
I hope this helps you a little bit on your Joomla adventure and good luck.
Almost forgot, please also make sure you keep your Joomla version up to date unlike a lot of the people that post questions on here :) I posted an answer as to why it's important here
You absolutely right about Joomla allowing 1 component and many modules! Your also fine to convert your template into a Joomla template. Although note as Joomla 3.0 uses bootstrap (but is still very new and having many new features added to it - even though its technically stable) and thus it might be easier for you to use that. You can easily include bootstrap etc through that framework as well. Link here for how to do that
See the link here about module and module positions in templates. Whilst the numbers at the top say this is for 1.0,1.5 and 2.5. The bit under the 2.5 header also applies to Joomla 3.0!
In terms of different layouts for the template generally its good practice to have two separate templates if the layout changes are significant. However if the layouts differences are small, there is nothing wrong with adding in a Form Field and creating two template styles in the backend and just choosing the layout with a form field for each style!
If you want to use your customized modules I'm afraid yes you do have to do this. However there are module and component writers out there which can make the basics up for you so you can almost copy and paste your code straight into one file (with a few changes here and there). You can also use the Joomla Extension directory though - you may even find something you like more!
In terms of using the modules/components on another site this is actually much easier. Once created you can just go into the Joomla backend and install your extension again and tweak it how you want after that with either FormFields or in template overrides!
Any more questions feel free to ask!

Can the Joomla jConfig be extended with an administrator plugin?

I'm trying to add some external configuration parameters to a new J2.5 site, and before I resort to hacks, I want to know if it is possible to write a plugin that will actually integrate with, or extend the jConfig object.
I have been googling, and cannot find any discussion or example of such a thing - only component or module configuration, so wanted to know if anyone had attempted this, or knew of a "native" way of accomplishing it.
Note - We'd accomplished this in earlier versions by way of a system plugin that set a global variable to make the information available, but we're hoping to include it in the Joomla Global Configuration to be able to use native Joomla config logic.
The short answer is no, you can't. With a plugin it's only possible to override some minor classes, when the plugins files are first loaded (which would be the first hook for our custom code) JConfig is already loaded along with another 40 classes.
You could however extend it once it's loaded, add your parameters, save, and those should be persisted when the user saves from the backend, and made available in the following requests. Provided you're not saving too many it could work fine.
Otherwise just put your parameters in the component (which would be the standard Joomla way).

integrating third-party django apps and templates

I'm new to Django and fairly confused about how third-party apps are best integrated. In my (possibly naive) interpretation of DRY, I want to minimize copy/pasting not only my own code but other people's code as well, so I'm happy with, for example, the pattern of using contrib.auth as mostly a black box if I needed additional info on auth.User (by extending auth.User with a UserProfile object or inheritance). And this was how I imagined I'd use most third-party apps as well.
However, I quickly found out this was very difficult, so now I've resigned to having "copies" of all of my third-party apps living inside my project folder that are basically entire copies with minimal changes. The final straw was me wanting to add a basic blog (I settled on django-basic-blog) and needing to just change a single template, and I thought of no better solution than just making a copy of that app inside my project with the single template changed.
My questions:
in this specific case where I need to change just a single template, is this (copy the entire app over) the best I can do? If I just needed to change a single model I can keep the third-party app respectfully intact and do a model inheritance in my own app...
in general, this practice of copying the apps under my project and patching each a tiny bit feels crazily wasteful and dirty. It also feels like if I'm using a frequently-updated third-party app it will be a pain to sync the changes. Should I just learn to love the bomb or is there some obvious architectural pattern / Django-provided assistance I am missing?
You should not modify the code of 3rd-party modules, as it's hard to track the changes and it creates a mess with the same code copied into many projects. Typical solution is to have only one version of each third-party module in your python path, not in your project's dir. This single package can then be reused by all of your projects.
However different approach is needed for templates, as they often need to be modified on a per-project basis. That's why Django comes with settings.TEMPLATE_DIRS and settings.TEMPLATE_LOADERS.
TEMPLATE_DIRS specifies list of directories containing template files. TEMPLATE_LOADERS specifies the classes used to load templates. The loaders will be used in order they were defined and the directories will be traversed in order they were defined. So you can look for templates in your project's directory first and in other modules as a fallback.
So basically you do not need to copy the entire python module in order to change one template. Copy just the templates directory of that 3rd party module or even just the single template you want to change. If you'll put in the right place and add have the path in TEMPLATE_DIR Django will use it.

Better Templating for Grails

For all the things I love about Grails I do have one small issue and this isn't really even a Grails specific problem. GSP changes require redeployments of the entire web application. I'm not talking about adding new dynamic data or major changes. These generally requires server side changes as well anyway.
But I'm talking about smaller changes like flipping the position of a couple of elements or modifying some simple static text on the page. So my question is, what are some patterns used or plugins, etc that allow minor changes to GSP's without redeploying the entire application? How can I make Grails template/GSP's more like templates and less requiring compiling?
I'm also possibly looking for something more designer friendly.
grails.gsp.view.dir, I think.
A trick to remember: add trailing slash and remember that grails-app/views will be added to it.
There is a Grails Plugin for using FreeMarker templates as views (I have not used this plugin myself). It is not listed as SpringSource supported, but I think the author is one the core grails devs and the plugin is based on a relatively new version of FreeMarker.