/category/results,81-160.html
/category.html
index.php?option=com_virtuemart&view=category&virtuemart_category_id=2
index.php?option=com_virtuemart&view=category&virtuemart_category_id=2&virtuemart_manufacturer_id=0&virtuemart_manufacturercategories_id=0&clearCart=0&limitstart=0
&limitstart=0
$active = $this->router->menu->getActive();
if ($active) {
$vars = array_merge($active->query, $vars);
}
SELECT
`id`,
`title`,
`link`
FROM `yourprefix_menu`
WHERE `link` LIKE 'index.php?option=com_virtuemart&view=category%';
UPDATE `yourprefix_menu`
SET `link` = CONCAT(
`link`,
IF(
`link` NOT LIKE '%virtuemart_manufacturer_id=%',
'&virtuemart_manufacturer_id=0',
''
),
IF(
`link` NOT LIKE '%virtuemart_manufacturercategories_id=%',
'&virtuemart_manufacturercategories_id=0',
''
),
IF(
`link` NOT LIKE '%clearCart=%',
'&clearCart=0',
''
),
IF(
`link` NOT LIKE '%limitstart=%',
'&limitstart=0',
''
)
)
WHERE `link` LIKE 'index.php?option=com_virtuemart&view=category%'
AND `published` = 1;
abc_menu
public function onAfterRoute(Event $event): void
{
$app = Factory::getApplication();
if (!$app->isClient('site')) {
return;
}
$input = $app->getInput();
if ($input->getCmd('option') !== 'com_virtuemart') {
return;
}
$view = $input->getCmd('view');
if (!\in_array($view, ['category', 'virtuemart', 'manufacturer', 'search'], true)) {
return;
}
// A real pagination request (page 2+) always carries limitstart in the URL.
// A bare URL means "page 1", so do not let the session value win.
if ($input->get('limitstart', null) !== null) {
return;
}
$input->set('limitstart', 0);
}VmMediaHandler::$theme_url is declared as null and is never assigned anywhere in the codebase (I checked both the site and administrator sides, including the legacy VmMedia class). Because of that, every "no image" placeholder built from it resolves to a broken URL that is missing the components/com_virtuemart/ segment.administrator/components/com_virtuemart/helpers/mediahandler.php:// line 45
static $theme_url = null;
// line 591, inside setNoImageSet()
$this->file_url_folder = self::$theme_url.'assets/images/vmgeneral/';
// line 736, inside getIcon()
$tC = self::$theme_url.'assets/images/vmgeneral/filetype_'.$this->file_extension.'.png';
// line 751, inside getIcon()
$file_url = self::$theme_url.'assets/images/vmgeneral/'.VmConfig::get('no_image_found');
$theme_url is always null, the concatenation collapses to just assets/images/vmgeneral/..., with the components/com_virtuemart/ prefix missing entirely.displayIt() (same file, around line 785):if( substr( $this->file_url, 0, 2) == "//" or substr( $this->file_url, 0, 4) == "http" ) {
} else if($absUrl){
$root = JURI::root(false);
} else {
$root = JURI::root(true).'/';
}
...
$imageArgs['src'] = $root.$file_url;
JURI::root(true) returns an empty string, so $root becomes just /. The final src ends up as:/assets/images/vmgeneral/noimage_new.gif/components/com_virtuemart/assets/images/vmgeneral/noimage_new.gifadministrator/components/com_virtuemart/models/config.php (around line 222), which hardcodes:$dirs[] = VMPATH_ROOT.'/components/com_virtuemart/assets/images/vmgeneral';src="/assets/images/vmgeneral/noimage_new.gif", which 404s.setNoImageSet() or the getIcon() fallback (vendor, product, category, etc.) whenever no image/file is set, on both front and back end.VmMediaHandler::$theme_url to 'components/com_virtuemart/' (the same segment already hardcoded in config.php) at class init, or replace the direct use of self::$theme_url in setNoImageSet() and getIcon() with a call that returns that path directly, since the property is currently dead weight that is only ever read, never written.Page created in 0.116 seconds with 13 queries.