3

In the latest J!3.4 when installing extension of type 'file' (or may be other types are affected also) there is a difference regarding what is going into element field of table _extensions.

Some extracts from \libraries\cms\installer\adapter\file.php

J!3.3.4:

$element = preg_replace('/\.xml/', '', basename($manifestPath));

Looks like filename is going to be stored into element field.

J!3.4.1:

$element = (string) $this->getManifest()->name;
$element = str_replace('files_', '', JFilterInput::getInstance()->clean($element, 'cmd'));

Now we have name tag into element field.

The problem comes when uninstalling such extension. In both cases Joomla is looking for manifest filename into element field. In the second case it will find name tage here. Since Joomla documentation is saying:

<name> – raw component name (e.g. com_banners).

there should be no problem, except ugly names in Extension Manager. But some old extensions simply do not work now, as they do not have pure filenames in the name tag.

Because we have another example in Joomla Docs:

Put anything into here, name is only shown in extension manager. 
  <name>Kunena Language Pack</name>

So, what to write in the name tag when creating manifest files?

2

For best understanding, you should check com_banners component. As you stated two ways to add <name> tag, both are ok to use and works well. In <name> tag you can write anything you prefer to, but as per document it should be `com_{compoentname}'. Let me give you two examples:

If you write like this:

<name>what ever</name>

whate ever will be the name of your component and will display same on both extension manager as well as on components menu.(Here I have intentionally ignored <menu> tag, that's out of the discussion for now.)

Where as if you write like below:

<name>com_componentname</name>

com_componentname will be the name of the component in extension manager as well as in components menu.

But here if you have used language file en-GB.com_componentname.sys.ini along with above com_componentname usage. You can specify language string for com_componentname. Joomla automatically searches for that name in relative language file.

COM_COMPONENTNAME="My whatever component"

and now this new language string My whatever component will display on both extension manager as well as on components menu. This is how it works.

Language file does not allow language key to be separated by white-space. And I think that is why the usage of <name>what ever</name> does display as it is.

Hope I am descriptive enough. :)

  • 1
    Thank you, working now. I have nice, translated name in the Extension Manager. But in the name tag you should have filename of the manifest file without .xml. If using the first approach - with white spaces ('what ever') you can not deinstall - File whatever.xml not found. At least this is true for type=file. – pl71 Apr 4 '15 at 13:43
  • Correct. It checks without space when you try to uninstall it. Glade to help you. – Saurin Dashadia Apr 4 '15 at 13:47
0

I've never tried with a file, but I suggest you do the following:

<name>files_helloworld</name>

Then in your administrator language ".sys" file, add the following:

HELLOWORLD="Hello World"

You see that I haven't used FILES_ in the language string as this gets stripped.

Note, I have not tested this but I think it will works. Let me know what the outcome is.

  • Extension is named files_helloworld, not 'Hello World' in Extension Manager. Joomla can find manifest file helloworld.xml and can deinstall it. Table _extensions: Field 'name'='files_helloworld', field 'element'='helloworld'. There is something wrong, or something new and not documented with this type. – pl71 Apr 3 '15 at 20:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.