I'm new to joomla development, but I can't seem to figure out how to dynamically fetch descriptions to be displayed as tool tips for the form data of a module backend. I'm looking at an example module from joomlart and their code for a single field element in their xml file looks like this.
<field
name="mainWidth"
type="text"
default="auto"
size="5"
label="MAIN_WIDTH"
description="MAIN_WIDTH_DESC" />
MAIN_WIDTH and MAIN_WIDTH_DESC are obviously variables that are somehow being accessed and rendered later when the module is run in the backend but I can't find where the values to these variables are stored or how to replicate this behavior. Any help would be appreciated.
Label is the label that prints to screen, and description is rendered as the tooltip.
You can just replace these variable names with the actual text and it will work when the form is rendered.
However, in your example, I believe they are using language files to get the text to display.
Whilst you can set a language file within your module for that module's use, naming convention suggests to me that these are being pulled from somewhere like the template's language file.
( Such a file is likely to be found either under /language or /administrator/language or /templates/yourtemplate/language )
The benefit of such files is to allow for translations of the site to exist without having to write a new module / template each time.
Ultimately, if you don't want various language versions of your site, and you only intend to use the module on one site and not sell it as an extension, then there is no strong need to create a language file for your own bespoke modules (though best practise would probably be to do so).
Related
So I want to use Lazysizes (lazy loading responsive images). Included in my Grunt stack is Responsive Images Extender, which outputs responsive image code (srcset) from simply including an "img" tag with a "src" attribute. Lazysizes requires the "data-srcset" attribute in replace of the "srcset" attribute, however. I added a script to my page that changes the "srcset" attributes to "data-srcset" attributes, but this isn't ideal as images are are already downloaded at runtime. It would be ideal if I could change the tags with Grunt, as there is no advantage in changing them live.
This seems like a very common thing, but I cannot find a good way to do it. String replace doesn't seem like an ideal solution, since it can cause problems if I ever use "srcset=" in my code.
I gave the grunt-responsive-images-extender a major makeover and added the possibility to change the attribute name of srcset to anything you want (data-srcset in your case) via the srcsetAttributeName option.
There is a grunt tans called dom_munger. With dom_munger you can change HTML attributes and do a lot of interesting stuff; however I cannot find a way to change an attribute name to another thing. Perhapse you can have a better luck checking it.
I would like to know if there is a way to change text in the code instead of using the admin panel? I have Filezilla installed and can access my site/files from there.
If I use the inspect element in any browser, I can see an HTML structure, but as I have understood there is no HTML document in Magento, right? So where do I go if I want to make a change to a text element on my site and I don't want to use the admin panel?
Most of the text elements are handled by Magento's language translation system.
Quite often, you don't have to mess around hacking templates, just simply add a line to the translation CSV with the text string exactly as it appears, add a comma and then the new text string you want Magento to display.
For example, if you're working with US English, you can use the following file in your own custom template package as follows:
app/design/frontend/default/your_package/locale/en_US/translate.csv
Let's for example, change one of the window shade bar titles in the One Page Shopping Cart. Add a line to translate.csv as follows:
"Billing Information","Billing Address Information"
How this works, in the template the following line normally displays the title:
<?php echo $this->__('Billing Address') ?>
This code snippet $this->__('Billing Address') is a call to Magento's language translation system. It reads the translate.csv file finds Billing Address and changes it to Billing Address Information when it assembles the page html.
Lotta people out there have made changing text like this far harder than it has to be.
Hunting down the proper template, changing the text, finding the template got messed up, or trying to remember after the fact what was changed.
VS.
Changing a simple central file that contains all the text string translations... Often only by adding a new line to the file
Magento actually makes this very simple.
Thank you! So magento stores all text in .csv? or just the stuff that needs to be translated? I'm making a search for .csv via Filezilla but I only get two languages (the site is translated to multiple languages). Should I be looking somewhere else?
In my custom module, my themes are structured like this:
/modules/mod_ab_art/tmpl/default/default.php
/modules/mod_ab_art/tmpl/arz/default.php
I have an option for the user to select a theme from the admin section like this:
<field
name="theme"
type="list"
default="default"
label="MOD_AB_ART_THEME_LABEL"
description="MOD_AB_ART_THEME_DESC">
<option value="default">MOD_AB_ART_THEME_DEFAULT</option>
<option value="arz">MOD_AB_ART_FIELD_ARZ</option>
</field>
I also have an alternative layout option as shown below but this is not displaying anything in the dropdown list. I think this is supposed to display Default in the dropdown list. Is it because of the theme subdirectories inside the tmpl directory? Does alternative layout work only with a single theme?
<field name="altlayout"
type="modulelayout"
label="JFIELD_ALT_LAYOUT_LABEL"
description="JFIELD_ALT_MODULE_LAYOUT_DESC" />
Although David's answer is 100% correct, I would like to clarify the distinction between template overrides and having multiple layout files packaged with your module. In the end, they both accomplish the same things. It just depends on if you want/need the alternate layouts encapsulated within the module entirely or not.
Regardless, you would need to remove the extra directory exactly like David explained above. So your tmpl directory will have both the default.php and arz.php files in it.
The second thing would be to alter the code in your modules entry point to capture the 'theme' parameter and use it when rendering the layout:
require JModuleHelper::getLayoutPath('mod_ab_art', $params->get('theme', 'default'));
You'll notice this is identical to almost all the core modules execution of the same line of code, except it pulls the 'layout' parameter, which is a listing of layout overrides in the active template for the particular module.
Joomla would not expect the folders under tmpl for a module. It would expect just the full layout to be one file and each to be named a different name to signify the layout. So you would probably do best to have layout files like this:
/modules/mod_ab_art/tmpl/default.php
/modules/mod_ab_art/tmpl/arz.php
You can have as many different files in the tmpl folder and even different ones in the theme (typically at templates/*template_name*/html/mod_ab_art/override.php).
I am doing Multi-language store in magento. i have some custom menu in header section like how to order, Help etc. .
now currently these menu i have given direct link like
<li>Help</li>
<li>how to order</li>
i am not sure how multi-language feature will work with this menu.. How can i write these top menu as if It will change with language change.
any suggestions will be helpful for me.
thanks
Any text that is hard-coded into your template needs to be wrapped in the translation helper.
echo $this->__('Help');
But make sure the block it applies to has a helper declared, otherwise you'll need to load the generic helper.
Mage::helper('core')->__('Help')
Then, you can edit the relevant translation CSV file. By putting "Help" in the first column, and the translation in the second column.
Although, you'll be able to use translate in-line once you are using the above PHP.
I'm currently working on a site that uses the 'RAXO All-mode PRO' module to display a list of articles on the home page, and the 'JXtended labels' component to display pages containing a list of articles associated with given labels. The front-end functionality in both is very similar - get a list of articles and display them.
Ideally, I'd like both lists to display articles in the same format. However, since each component/module has its own way of fetching the data, and its own template, they're currently inconsistent. What's the best way of going about resolving this?
I can envisage a common bit of code (a module? plugin? component?) that deals with the display of a list of articles, and has its own template for that purpose. I guess I'd then need to hack the existing module and component to hand over to this common piece. There's also the question of getting the same set of data - e.g. RAXO All-mode PRO currently gets an article's category; JXtended labels doesn't.
Has anyone come across this issue before?
The issue of the modules pulling different data sets can only be remedied by hacking the core to get the data that is missing.
Everything else can be accomplished by a simple override. You can modify the module template files then save the new version in JOOMLA/templates/YOUR TEMPLATE/html/MODULE NAME/default.php. You can make the override files match pretty much exactly so the display will be consistent across both modules.