PLUGIN-XML-FILENAME-001
plugins/content/foo/foo.xml with a single php file
Plugin XML: only <filename plugin="x">x.php</filename>
A single php file still installs. Native Joomla 4+ plugins use a service provider and a subscriber class. The J3 file will run as CMSPlugin until you rewrite events.
plugins/content/foo/foo.xml with a single php file → Namespaced plugin class + services/provider.php
Symptoms people search
plugin installs but events never fire on J6 · no provider.php
Replace this code
Swap plugins/content/foo/foo.xml with a single php file for Namespaced plugin class + services/provider.php.
Joomla 3
Remove or stop calling this
<files>
<filename plugin="lms">lms.php</filename>
</files>Joomla 4 / 6
Use this instead
<namespace path="src">Acme\Plugin\Content\Lms</namespace>
<files>
<folder plugin="lms">services</folder>
<folder>src</folder>
</files>How to fix it
- 1Add services/provider.php.
- 2Move the plugin class into src/ and implement SubscriberInterface.
Also known as
filename plugin · plugin xml · services/provider.php
There is no 1:1 swap for this one. The architecture changed. If you cannot rewrite it, Infyways can.
Related issues
- Joomla 3 → 4PHP
JPATH_PLATFORM
JPATH_PLATFORM → Do not use — autoload instead
- Joomla 3 → 4Events / plugins
JDispatcher / JEventDispatcher
JDispatcher::getInstance() → Event dispatcher + SubscriberInterface
- Joomla 3 → 4Templates
Protostar site template
Protostar → Cassiopeia (or a Joomla 4+ template), preferably a child template
- Joomla 5 → 6Events / plugins
JPlugin onX methods vs SubscriberInterface
function onContentPrepare(...) → CMSPlugin + SubscriberInterface::getSubscribedEvents()
- Joomla 3 → 4Templates
Magic pagination_item_active functions
function pagination_item_active($item) → Layout joomla.pagination.link
- Joomla 3 → 4Joomla API
JProfiler::getmicrotime / getMemory
JProfiler::getmicrotime() → microtime(true) / memory_get_usage()