Recommended Upgrade-safe Way To Override Helix Ultimate Feature Classes (e.g., Menu.php RenderLogin())? - Question | JoomShaper

Recommended Upgrade-safe Way To Override Helix Ultimate Feature Classes (e.g., Menu.php RenderLogin())?

Brad Thompson

Brad Thompson

EasyStore 2 days ago

Currently using the Trove template and I need to customize the user drop-down menu links rendered by HelixUltimateFeatureMenu::renderLogin() (Wishlist, Orders, Profile, Logout). These links are hardcoded in the feature class file at templates/{template}/features/menu.php, not in a component or module view.

The standard Joomla html/layouts/ override mechanism doesn't work here because:

getHeaderStyle() passes the template's headers/ directory as the basePath to FileLayout, which has highest search priority and always wins over html/layouts/. The feature classes are loaded via include_features() in HelixUltimate.php, which hardcodes the features/ directory path — there's no override path lookup.

My current workaround:

Created templates/{template}/overrides/features/ with copies of the feature files.

Edited all templates/{template}/headers/*/header.php to change $feature_folder_path from features/ to overrides/features/.

Edited all templates/{template}/offcanvas/*/canvas.php similarly.

Edited HelixUltimate.php include_features() to check for overrides/features/ first (to avoid "Cannot redeclare class" fatal errors).

This works, but steps 2–4 are lost on every trove template and Helix Ultimate plugin update, requiring manual re-application.

Is there an officially supported, upgrade-safe method to override feature class behavior in Helix Ultimate? For example:

A plugin event that fires before renderLogin() output is returned? A layout override path that getHeaderStyle() actually respects? A config option to point include_features() at a custom directory?

Any guidance on the intended customization path for feature classes would be appreciated.

0
4 Answers
Ziaul Kabir
Ziaul Kabir
Accepted Answer
Support Agent 1 day ago #231183

Hi Brad,

Thanks for the very detailed write-up — we went through the Helix Ultimate framework code to verify this.

You've diagnosed it correctly, on all three points:

include_features() does hardcode the template's features/ directory and includes files from it directly — there's no override path lookup there.

Every headers//header.php and offcanvas//canvas.php file independently hardcodes $feature_folder_path to the same features/ directory, rather than going through one central place.

getHeaderStyle() passes the template's headers/ directory to FileLayout as a custom base path, and that base path does take priority over the standard html/layouts/ override path — so the normal Joomla override mechanism genuinely can't reach feature class rendering here.

So to directly answer your question: no, there isn't currently an officially supported, upgrade-safe way to override feature class behavior (no plugin event before renderLogin() output, no override path getHeaderStyle() respects, no config option for include_features()). Your workaround is, as far as we can tell, the correct way to achieve this today — and you're right that it's fragile because it requires re-patching vendor files after every template/plugin update.

We've forwarded this to our development team as a proper feature request: adding an override-aware lookup (e.g. checking templates/{template}/overrides/features/ before features/) in include_features() and consolidating the per-header/per-canvas hardcoded paths so a template-level override actually works and survives updates. This isn't a quick one-line fix since it touches every header/offcanvas layout file across the framework, so I can't give you a firm timeline yet, but I'll update you here once we have news.

In the meantime, your current workaround remains the recommended approach — just keep a note of the four changes you listed so you can reapply them quickly after updates.

Thanks again for the thorough investigation — it made this much easier to verify.

Best regards,

0
Brad Thompson
Brad Thompson
Accepted Answer
1 day ago #231231

Thanks Ziaul for looking into this in detail.

I came across this when setting up our first client Easy Store and realized the user menu was below current standards and user experience.

I would love to see instead of a hard coded user menu, the ability to set Joomla menu that we can easily edit. This would be the ultimate method of control an important user section.

Look forward to the update.

Brad

0
Ziaul Kabir
Ziaul Kabir
Accepted Answer
Support Agent 1 day ago #231255

Hi Brad,

Thank you for your valuable feedback and suggestion.

I have forwarded your request to our development team for review. If I receive any updates regarding this feature, I'll be sure to let you know.

Thank you for your support!

0
Ziaul Kabir
Ziaul Kabir
Accepted Answer
Support Agent 1 day ago #231278

Also, for your information, we have a module position named logged-in-usermenu. You can create a Menu module and assign it to this position to display it for logged-in users.

Thanks!

0