To share information’s about the necessary changes I aim to write down my experiences here. I hope this is ok and prevents other developers from some research work.
First installI have installed my 1.0.7 version and the first impression was good. No errors!
Custom Toolbar Buttons (artf3368)In the Backend my custom Toolbar-Button isn’t displayed. The cause is a bug in mosAdminMenus see artf3368 for more information’s.
Usage of mosConfig global variables Example for a change:
form
Code:
global $mosConfig_live_site;
echo $mosConfig_live_site;
to
Code:
global $mainframe;
$live_site = $mainframe(‘live_site’);
echo $live_site;
Use an Editor in your extension.The procedure has changed.
Old style (Backend and Frontend)Code:
getEditorContents( 'editor1', 'text' ) ;
…
// parameters : areaname, content, hidden field, width, height, rows, cols
editorArea( 'editor1', $row->text , 'text', 400, 200, '50', '10' ) ;
New style (Backend and Frontend)Code:
$editor =& JEditor::getInstance();
echo $editor->getEditorContents( 'editor1', 'text' ) ;
….
// parameters : areaname, content, hidden field, width, height, rows, cols
$editor =& JEditor::getInstance();
echo $editor->getEditor( 'editor1', $row->definition , 'definition', '100%;', '200', '75', '20' ) ;
Language fileLanguage files are located in the language directory and there are subdirectories for specific languages eng_GB, ger_DE, ….. Your language file must stored in one subdirectory and named for example. eng_GB.com_rd_glossary.ini or {lang_tag}.com_{componentname}.ini
If you do it in that way, the language file is loaded automatic, if you component is loaded. You don’t must do something similar that.
Code:
// Get the right language if it exists
if (file_exists($mosConfig_absolute_path.'/administrator/components/'._COMP_NAME.'/languages/'.$mosConfig_lang.'_admin.php')) {
include_once($mosConfig_absolute_path.'/administrator/components/'._COMP_NAME.'/languages/'.$mosConfig_lang.'_admin.php');
} else {
include_once($mosConfig_absolute_path.'/administrator/components/'._COMP_NAME.'/languages/english_admin.php');
}
Many developers have stored strings as defines in {language}.php files and used this constants to create the output. Now you have to save your strings in ini-files.
Old style:Code:
define('_RD_ERROR1','Term must be uniq');
define('_RD_GLOSSARY_ADDNEW','Add an new entry');
New style:Code:
RD ERROR1=Term must be uniq
RD GLOSSARY ADDNEW=Add an new entry
The last step to make your application multi language ready, is to remove the constants from your files and replace them with the Jtext::_() function
You have to change this:
Code:
$addnew = "<a title=\""._RD_GLOSSARY_ADDNEW."\" href=\"". sefRelToAbs( "index.php?option=com_rd_glossary&task=new" . $Itemid ) . "\">". _RD_GLOSSARY_ADDNEW."</a>";
into this
Code:
$addnew = "<a title=\"". JText::_('RD GLOSSARY ADDNEW') ."\" href=\"" . sefRelToAbs( "index.php?option=com_rd_glossary&task=new" . $Itemid ) . "\">". JText::_('RD GLOSSARY ADDNEW') ."##</a>";
Keep in mind the installers language file copy function is broken so you have to copy the files by hand no direct accessCode:
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
change to
Code:
defined( '_JEXEC' ) or die( 'Restricted access' );
This isn't actual necessary but as we have opened a file we could do this now
Toolbar and admin screenThe new class for the toolbar is JMenuBar and there is a new function title.
Example:Code:
JMenuBar::title( JText::_( 'RD GLOSSARY ITEMLISTTITLE' ), 'addedit.png' );
With this function you can move the title in the toolbar area.
I have changed.
this (old 1.0.x style)
Code:
echo "<table class=\"adminheading\">";
echo "<tr><th class=\"addedit\" rowspan=\"2\">"._RD_GLOSSARY_ITEMLISTTITLE."</th>";
echo "<td colspan=\"2\" align=\"right\">$lists</td></tr>";
echo "<tr><td>Filter:</td><td> <input type=\"text\" name=\"search\" value=\"" . $search . "\" class=\"text_area\" onChange=\"document.adminForm.submit();\" />";
echo "</td></tr></table>";
into this (new 1.1 style)
Code:
echo "<table class=\"adminform\">";
echo "<tr><td align=\"left\" width=\"100%\">Filter: <input type=\"text\" name=\"search\" value=\"" . $search . "\" class=\"text_area\" onChange=\"document.adminForm.submit();\" />";
echo "<input type=\"button\" value=\"".JText::_('RD GO')."\" class=\"button\" onclick=\"this.form.submit();\" />";
echo "<input type=\"button\" value=\"".JText::_('RD RESET')."\" class=\"button\" onclick=\"getElementById('search').value='';this.form.submit();\" />";
echo "</td><td nowrap=\"nowrap\">$lists</td></tr></table>";
The table for the items must embedded in a “div”:
Code:
echo "<div id=\"tablecell\">";
TABLE
echo “</div>”;
Some small changesI have changed this it isn’t necessary at all but usefully.
Code:
$mosConfig_absolute_path -> JPATH_SITE
$mosConfig_absolute_path . ‘/administrator/components/’ -> JPATH_ADMINISTRATOR.'/components/'