В контроллере (catalog/controller/product/category.php массив $this->data['products'][] приводим к следующему виду:
$this->data['products'][] = array(
'product_id' => $result['product_id'],
'thumb' => $image,
'name' => $result['name'],
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',
'price' => $price,
'special' => $special,
'tax' => $tax,
'rating' => $result['rating'],
'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id']),
'options' => $this->model_catalog_product->getProductOptions($result['product_id'])
);
, т.е. добавилась предпоследняя строка.
А в category.tpl формируем в нужном месте следующее условие:
<?php if ($product['options']) {
echo "Вывод кнопки 'Подробнее'";
} else {
echo "Вывод кнопки 'Купить' ";
} ?>