В итоге все виджеты на странице дублировались.
=) Вот чтобы не дублировались эта строчка удаляет все виджеты которые были отрендерены ранее.
Это костыльный вариант, но вариант))
cmsCore::getInstance()->runWidgets(); // получаем все виджеты на странице и формируем их html-вид
$this->widgets('название_позиции'); // выводим только виджеты из указанной позиции
unset($this->widgets); // удаляем полученные ранее в шаге 1 виджеты
чуть позже движок снова вызывает метод
cmsCore::getInstance()->runWidgets(); и уже системно показывает виджеты
если нужно выводить один виджет лучше генерить его как я показывал выше, без дополнительных расходов.
В принципе не исключается и более системный подход вместо слепой генерации всех виджетов ( cmsCore::getInstance()->runWidgets(); ), делаем запрос в БД, получаем виджеты привязанные к нашей позиции, затем уже их рендерим и показываем.