Recently I was developing the Magic Scroller Plugin for Virtuemart also called ajax infinite pagination. It requires some html content to be entered by user. So a textarea field is added in plugin manifest file.But it also needs to be prefilled with some html content, so that user can easily understand how to change content. I entered a language string in the default value and saved it as shown below in code
<field
type="textarea"
name="mscroll_loading_html"
label="PLG_CONTENT_VM_MSCROLL_LOADING_HTML"
description="PLG_CONTENT_VM_MSCROLL_LOADING_HTML_EXPL"
editor="false" rows="3" cols="50"
default="PLG_CONTENT_VM_MSCROLL_LOADING_HTML_VALUE" filter="raw"
/>
Now I refreshed the backend , and to my surprise the html content is not there, instead the language string PLG_CONTENT_VM_MSCROLL_LOADING_HTML_VALUE is prefilled there. Label and description attribute of field are sucessfully translated but not the default value.
While searching on Joomla forum, I got to know a new attribute translate_default="true" must be added to the field to translte the default value.
<field
type="textarea"
name="mscroll_loading_html"
label="PLG_CONTENT_VM_MSCROLL_LOADING_HTML"
description="PLG_CONTENT_VM_MSCROLL_LOADING_HTML_EXPL"
editor="false" rows="3" cols="50"
default="PLG_CONTENT_VM_MSCROLL_LOADING_HTML_VALUE" filter="raw"
translate_default="true"
/>
Now I refreshed the module backend, and default value is translated and textarea is now prefilled with html. So trick is to add new attribute translate_default="true" to field. After finishing with coding, I made a plugin zip package to install it from the joomla installer and now it's time for testing. Installation goes fine without any errors on my dev server.
When edited the plugin from Joomla Plugin manager, to my surprise textarea is not prefilled with html content, but with language string. I installed the plugin on other two joomla installation, but stuck with same un translated language string in textarea. Now I googled for the same issue, but found nothing to fix it. I spent more than 3-4 hr to fix this issue, but without any success.
Ultimately, I looked down the joomla core files and found that upon installation, the default values are stored in joomla extension table #__extensions in params column. Now inspecting params column from phpMyAdmin , I noticed language string is present there. After more digging in joomla core file in noticed, if params column is empty then the default value is taken from xml files and joomla will successfully translate it. If there are values against the field Joomla assume it has already translated the fields and just display them as it. Immediately clearly the params column and refreshed the plugin backend. I can see html content is prefilled in textarea.
So culprit is upon plug in installation joomla store un translated values.Now solution is params column should be empty when the plugin first installed.
So question is how to make the params column to be empty after installation? The solution is very simple add installation script in plugin xml file.
For complete reference on add installation script check this tutorial
So, I add a scriptfile tag in xml file <scriptfile>vmmscroll.script.php</scriptfile>
Now vmmscroll.script.php is executed after installation of plugin and write a simple query to clear params in install function.
public function install() {
$db=Jfactory::getDbo();
$query="update #__extensions set params='' where element='vmmscroll' limit 1";
$db->setQuery($query);
$db->query();
}
I again make a zip package and tested on other joomla installation and plugin infinite pagination for virtuemart is working successfully.