1. ycway
  2. RO CSVI
  3. Monday, 31 August 2026
  4.  Subscribe via email
Hi Roland,
I found a reproducible issue with Joomla Menu Associations import in RO CSVI.
Environment

  • Joomla 6.1.3
  • RO CSVI 9.12.0
  • PHP 8.4.8
  • One frontend menu: mainmenu
  • Languages: en-GB, zh-CN, de-DE, ja-JP
  • Joomla Language Filter enabled

The multilingual menu uses one common menutype for all languages.
Equivalent menu items intentionally use the same logical alias/path in each language.
For example:
en-GB   Industries       path: industries   menutype: mainmenu
zh-CN 行业应用 path: industries menutype: mainmenu
de-DE Branchen path: industries menutype: mainmenu
ja-JP 業界別ソリューション path: industries menutype: mainmenu

Joomla itself accepts this structure correctly because the menu items are assigned to different languages.
Issue 1: Association target lookup does not distinguish language
I first created the Industries Menu Association manually in Joomla.
I then exported the menu item with RO CSVI.
RO CSVI exported the associations field as:
zh-CN#industries#mainmenu|de-DE#industries#mainmenu|ja-JP#industries#mainmenu

I therefore used the same format when importing the association.
The import completes without a visible error, but the expected Menu Associations are not created correctly.
In the RO CSVI debug log, the association targets are looked up using queries such as:
SELECT id
FROM #__menu
WHERE path = 'industries'
AND menutype = 'mainmenu'

The lookup is repeated for the different target languages, but the SQL does not include the menu item's language.
In this case there are four menu items with:
path = industries
menutype = mainmenu

but with different languages:
en-GB
zh-CN
de-DE
ja-JP

So path + menutype is not sufficient to uniquely identify the association target.
I would expect the target lookup to also use the language from the associations value.
For example:
SELECT id
FROM #__menu
WHERE path = 'industries'
AND menutype = 'mainmenu'
AND language = 'zh-CN'

and correspondingly:
language = 'de-DE'
language = 'ja-JP'

Workaround test
To verify whether the problem was specifically caused by the non-unique path, I temporarily changed the three non-English target aliases so that their paths became unique.
zh-CN   industries-assoc-zh
de-DE industries-assoc-de
ja-JP industries-assoc-ja

I then imported:
zh-CN#industries-assoc-zh#mainmenu|de-DE#industries-assoc-de#mainmenu|ja-JP#industries-assoc-ja#mainmenu

With unique target paths, the Menu Association was created successfully.
After the association was successfully created, I changed the three aliases back to:
industries

The Joomla Menu Association remained intact after restoring the original aliases/paths.
This appears to confirm that the association mechanism itself works, but the target lookup becomes ambiguous when multilingual menu items share the same:
path + menutype

Expected result
RO CSVI should use the language specified in the associations value when resolving the target menu item.
For example:
zh-CN#industries#mainmenu

should resolve the menu item using:
path = industries
menutype = mainmenu
language = zh-CN

Actual result
The lookup appears to use only:
path = industries
menutype = mainmenu

which is ambiguous on a multilingual Joomla site where equivalent menu items use the same path.
Issue 2: Updating associations changes the menu ordering
There is also a second issue when updating an existing menu item.
The test import uses:
Keep Menu ID = Yes

and updates an existing English Industries menu item.
However, the debug log shows the existing menu item being saved with values including:
parent_id = 1
level = 1
lft = 0

After the import, the Industries menu item moves to the first position in the menu.
I also tested adding:
menuordering = 3

to the import file.
The result was the same: Industries was still moved to the first position.
So an import intended only to add/update associations also changes the existing Joomla menu tree ordering.
Expected result
When updating only the associations field of an existing menu item, its existing menu-tree position should remain unchanged unless ordering or parent-related fields are explicitly being changed.
Actual result
The existing item is repositioned in the Joomla menu tree during the association import.
Suggested improvements
Could you please check whether the Joomla Menu Associations import can be improved in the following areas?

  1. Use language together with path and menutype when looking up association target menu items.
  2. Avoid changing the existing menu tree position when only associations are being updated.
  3. When Keep Menu ID is enabled, preserve the existing menu item's ordering and nested-set position unless those fields are explicitly being imported.

This is particularly relevant for multilingual Joomla websites that use one common menutype for all languages.
Joomla itself supports this structure, including equivalent menu items in different languages using the same logical alias/path.
Version comparison
I originally reproduced the issue with:
RO CSVI 9.8.0

I then upgraded to:
RO CSVI 9.12.0

and repeated the same test.
The behavior is still reproducible in RO CSVI 9.12.0.
I have the RO CSVI debug logs and the one-row test CSV files available and can attach them if needed.
Thank you for looking into this.
Attachments (2)
Accepted Answer Pending Moderation
Hello,
Thank you for the detailed report.

1. Use language together with path and menutype when looking up association target menu items.

This issue has been fixed with attached patch file. Load the patch file and check import again. This fix will be included in upcoming RO CSVI release.


2. Avoid changing the existing menu tree position when only associations are being updated.
3. When Keep Menu ID is enabled, preserve the existing menu item's ordering and nested-set position unless those fields are explicitly being imported.

Menu position is rebuilt based on parent_id and level of the menu item on import. RO CSVI finds parent_id using path set for menu item in import file. Since path is set to industries in import file (there is no parent set in path) so default value of 1 is used for parent_id. There is no level field set as well so default value 1 is used. Since parent_id 1 is the ID of root menu item, rebuild is also done based on the parent_id set. You should add parent_id and level field in import file. That should solve the position of menu item after import. Try and let me know on how that goes.
Attachments (1)
Kind regards,

Tharuna

=========================
If you use our extensions, please post a rating and a review at the Joomla! Extension Directory
  1. 3 weeks ago
  2. RO CSVI
  3. # 1
Accepted Answer Pending Moderation
Hi Tharuna,
Thank you for the patch.
I tried to load patch_menu_20260901.zip using:
Components → RO CSVI → Maintenance → RO CSVI → Load patch file
However, on Joomla 6.1.3 I get the following error:
Joomla\Filesystem\File::upload: File not uploaded for security reasons!

The patch ZIP cannot be uploaded.
This may be related to the newer Joomla Filesystem upload security checks for ZIP files containing PHP files.
Could you please check whether the RO CSVI "Load patch file" function needs to allow this type of trusted patch upload on Joomla 6.1.x, or provide the recommended installation method for this patch?
Environment:
Joomla 6.1.3
RO CSVI 9.12.0
PHP 8.4.8

Thank you.
  1. 3 weeks ago
  2. RO CSVI
  3. # 2
Accepted Answer Pending Moderation
Hi,
This may be related to the newer Joomla Filesystem upload security checks for ZIP files containing PHP files.
Could you please check whether the RO CSVI "Load patch file" function needs to allow this type of trusted patch upload on Joomla 6.1.x, or provide the recommended installation method for this patch?

Yes this issue is with Joomla 6.1.3 version and I have fixed it with attached patch file. From the attached zip file you need to copy the file maintenance.php in location /administrator/components/com_csvi/models/ using FTP or SFTP on your server. You should be able to load patch files after that.

Try and let me know.
Attachments (1)
Kind regards,

Tharuna

=========================
If you use our extensions, please post a rating and a review at the Joomla! Extension Directory
  1. 2 weeks ago
  2. RO CSVI
  3. # 3
Accepted Answer Pending Moderation
Hi Tharuna,
Thank you. I installed the patch and tested again.
The first issue is now fixed successfully.
RO CSVI can now correctly resolve the multilingual menu association targets even when they use the same path and menutype.
For my test with Capabilities, the associations were created correctly for:
en-GB
zh-CN
de-DE
ja-JP

The debug log now also shows the expected language-aware queries, for example:
SELECT id
FROM #__menu
WHERE path = 'capabilities'
AND menutype = 'mainmenu'
AND language = 'zh-CN'

and similarly for de-DE and ja-JP.
So the association lookup patch works correctly. Thank you.
However, I found another important issue with updating the source menu item.
Following your previous suggestion, my test CSV explicitly included:
parent_id = 1
level = 1

The English Capabilities menu item was originally:

  1. Published
  2. A top-level menu item in its correct menu position
  3. Menu Item Type: Single Article
  4. Linked to the English Capabilities article

After the association import, the associations were created correctly, but the English source menu item was changed in several unexpected ways:

  1. It moved to the first position in the menu.
  2. It became unpublished.
  3. Its selected Single Article target was lost completely.

The other language Capabilities menu items were not changed.
The debug log shows RO CSVI updating menu item ID 155 with:
parent_id = '1'
level = '1'
lft = '0'
link = 'index.php?option=com_content&view=article&id='
published = '0'

The relevant UPDATE query is:
UPDATE #__menu SET
parent_id='1',
level='1',
lft='0',
rgt='44',
alias='capabilities',
menutype='mainmenu',
title='Capabilities',
path='capabilities',
link='index.php?option=com_content&view=article&id=',
type='component',
published='0',
component_id='19',
...
WHERE id='155'

Before this test, the menu item was linked to the Capabilities article and was published.
The test CSV contained parent_id and level as suggested, but it did not contain published or the content article target fields because the purpose of the import was only to update the associations.
It therefore appears that fields which are not present in an association update can be overwritten with default/empty values instead of preserving the existing menu item values.
Also, even with:
parent_id = 1
level = 1

the menu item still receives:
lft = 0

and moves to the first position.
Could you please check this behavior?
Ideally, when updating only the associations of an existing menu item, RO CSVI should preserve existing values such as:

  1. Published status
  2. Selected article / menu link
  3. Menu ordering / nested-set position
  4. Other existing menu item settings that are not included in the import file

If RO CSVI requires all existing menu fields to be included when importing associations, please let me know which fields are required for a safe association-only update.
I can attach the latest debug log and the one-row test CSV.
Thank you.
Attachments (2)
  1. 2 weeks ago
  2. RO CSVI
  3. # 4
Accepted Answer Pending Moderation
Hi,
Thank you. I installed the patch and tested again.
The first issue is now fixed successfully.
RO CSVI can now correctly resolve the multilingual menu association targets even when they use the same path and menutype.

Thank you for confirming both patches work. These fixes will be included with upcoming RO CSVI release.

Published status
Selected article / menu link
Menu ordering / nested-set position
Other existing menu item settings that are not included in the import file

We are looking into these and will keep you posted on what we find.
Kind regards,

Tharuna

=========================
If you use our extensions, please post a rating and a review at the Joomla! Extension Directory
  1. 2 weeks ago
  2. RO CSVI
  3. # 5
Accepted Answer Pending Moderation
Hello,
Published status
Selected article / menu link
Menu ordering / nested-set position
Other existing menu item settings that are not included in the import file

The issue with menu ordering and nested position is fixed with attached patch file. Please load the attached patch file and check.

As of other issues, I don't see any fields changed with import. For few fields if there is no value in import file we use what is saved in database and update menu. For example check published status, if you have status set to 0 when menu is created that will be same value used when menu is updated. That is if you don't have it set in import file.
Attachments (1)
Kind regards,

Tharuna

=========================
If you use our extensions, please post a rating and a review at the Joomla! Extension Directory
  1. 2 weeks ago
  2. RO CSVI
  3. # 6
Accepted Answer Pending Moderation
Hi Tharuna,
I found another reproducible multilingual menu import issue.
The Menu Association lookup is now fixed correctly with the previous patch, but the parent menu lookup when creating a new child menu item still appears to ignore language.
I tested creating a new Chinese Company News menu item with:
language = zh-CN
parent_id = 195
path = resources/company-news
menutype = mainmenu

The intended parent is the Chinese Resources menu item:
ID 195
path = resources
language = zh-CN

However, RO CSVI performs this parent lookup:
SELECT id
FROM #__menu
WHERE path = 'resources'
AND menutype = 'mainmenu'

There is no language condition in this query.
Because the English Resources menu item has the same path and menutype, RO CSVI resolves the parent as English Resources ID 164.
The final INSERT therefore uses:
parent_id = 164
language = zh-CN

So the Chinese child menu item is created successfully, but under the English Resources parent.
I would expect the parent lookup to include the child menu language, for example:
SELECT id
FROM #__menu
WHERE path = 'resources'
AND menutype = 'mainmenu'
AND language = 'zh-CN'

This looks very similar to the multilingual association lookup issue that was already fixed, but it occurs in the parent menu lookup used when creating a new child menu item.
I can attach the debug log and the one-row test CSV if needed.
Thank you.
Attachments (2)
  1. 2 weeks ago
  2. RO CSVI
  3. # 7
Accepted Answer Pending Moderation
Hi,
Yes I was able to see the issue with parent menu item and have fixed it with attached patch file. Load the attached patch file and run import and check.
Attachments (1)
Kind regards,

Tharuna

=========================
If you use our extensions, please post a rating and a review at the Joomla! Extension Directory
  1. 2 weeks ago
  2. RO CSVI
  3. # 8
Accepted Answer Pending Moderation
Hi,
Please try import with modified patch file and see if language check is added for fetching menu item query. Try and let me know how that goes.
Attachments (1)
Kind regards,

Tharuna

=========================
If you use our extensions, please post a rating and a review at the Joomla! Extension Directory
  1. 6 days ago
  2. RO CSVI
  3. # 9
Accepted Answer Pending Moderation
Hi,

Thank you. The parent menu lookup is now fixed. The debug log shows the language condition correctly:

SELECT id FROM #__menu WHERE path = 'resources' AND menutype = 'mainmenu' AND language = 'de-DE'

However, there still seems to be another language-related lookup issue when RO CSVI identifies the menu item itself.

The log shows:

SELECT id FROM #__menu WHERE path = 'resources/company-news' AND menutype = 'mainmenu'

This query does not include the language condition.

Because a Chinese menu item with the same path already existed, RO CSVI matched that record (ID 275) and updated it into the German menu item instead of creating a new German menu item.

The final query was an UPDATE ... WHERE id = 275, not an INSERT.

Since our multilingual menus intentionally use the same path/alias across languages, I think this menu item lookup also needs to include the language, similar to the parent lookup.

I have attached the debug log com_csvi.log.40.php for reference.

Thanks.
Attachments (1)
  1. one week ago
  2. RO CSVI
  3. # 10
  • Page :
  • 1


There are no replies made for this post yet.
Be one of the first to reply to this post!