Массив $parts образуется из значения $this->request->get['path'] путём разбивания этого значения на части по символу подчёркивания. Если $this->request->get['path'] будет пустым, то и $parts будет пустым, и будет ошибка.
Поскольку дальше по скрипту $category_id разрешено быть нулевым - добавьте $parts = array(0); перед 45-ой строкой, ошибка исчезнет. А правильнее сделать:
//-- GET ALL PRODUCTS FILTER BY CATEGORY
if(isset($this->request->get['path'])) {
$parts = explode('_', (string)$this->request->get['path']);
$category_id = (int)array_pop($parts);
} else {
$category_id = 0;
}