Skip to main content

ProductlistmenuField

ProductlistmenuField builds a dropdown of all Joomla site menu items that point to the J2Commerce products view (option=com_j2commerce&view=products). It is used in legacy router mode to let the store administrator select a canonical menu item URL for product list pages.

In standard J2Commerce configuration, this field is displayed only when router_type:legacy via a showon condition — pair it with RoutertypeField as shown below.

Class Details

PropertyValue
ClassProductlistmenuField
NamespaceJ2Commerce\Component\J2commerce\Administrator\Field
Fileadministrator/components/com_j2commerce/src/Field/ProductlistmenuField.php
ExtendsJoomla\CMS\Form\Field\ListField
Field type stringProductlistmenu
Since6.0.7

Data Source

getOptions() calls Factory::getApplication()->getMenu('site')->getMenu() and filters for menu items where:

  • type === 'component'
  • query['option'] === 'com_j2commerce'
  • query['view'] === 'products'

Each matching item contributes an option with value = $item->id (integer menu item ID) and text = $item->title. A leading empty "Select" option (COM_J2COMMERCE_SELECT_OPTION) is always prepended.

XML Usage

<form addfieldprefix="J2Commerce\Component\J2commerce\Administrator\Field">
<fieldset name="routing">
<field
name="router_type"
type="Routertype"
/>
<field
name="product_list_menuid"
type="Productlistmenu"
label="COM_J2COMMERCE_FIELD_PRODUCT_LIST_MENU"
description="COM_J2COMMERCE_FIELD_PRODUCT_LIST_MENU_DESC"
showon="router_type:legacy"
default=""
/>
</fieldset>
</form>

XML Attributes

AttributeRequiredDefaultDescription
nameYesField name. Stored value is the integer Joomla menu item ID or ''.
typeYesMust be Productlistmenu.
labelYesLanguage key for the field label.
descriptionNoLanguage key for the tooltip.
showonNoTypically router_type:legacy to hide the field when modern router is active.
defaultNo''Default to empty (no menu item selected).

Stored Value

The stored value is the Joomla menu item ID as a string (e.g., "42"). Retrieve it in PHP as:

$menuId = (int) ComponentHelper::getParams('com_j2commerce')->get('product_list_menuid', 0);
$menu = Factory::getApplication()->getMenu('site');
$item = $menu->getItem($menuId);

Error Handling

If getMenu() throws an exception, the field enqueues an error message using COM_J2COMMERCE_ERROR_LOADING_MENU_ITEMS and returns only the leading empty option.

Usage Notes

  • This field is meaningful only in legacy router mode. In modern router mode, SEF URLs are generated automatically from the registered menu item. Use showon="router_type:legacy" to hide it when not applicable.
  • If no J2Commerce products menu items exist, the dropdown contains only the empty "Select" option — creating a products menu item is a prerequisite for using this field.
  • The field reads live menu data at render time. Menu items created after the form was last loaded will appear immediately on next render.