The correct code should be
if(trim($this->_selectedOrdering) == 'c.ordering'){
$this->_selectedOrdering = 'c.ordering, l.`category_name`';
}
$ordering = $this->_getOrdering();
Patrick maybe uncommented "$this->_selectedOrdering = 'c.ordering, l.`category_name`';"
Actually it should Order first by ordering and if the you have sometimes the same ordering, then by name. Example
Cat A Ordering 2
Cat B Ordering 2
Cat C Ordering 1
=> Cat C, Cat A, Cat B
I found the error, the reason is different
if(trim($this->_selectedOrdering) == 'c.ordering'){
$this->_selectedOrdering = 'c.ordering, category_name';
}
The new selectedOrdering was not in the self::$_validOrderingFields and failed
if(!in_array($selectedOrdering, self::$_validOrderingFields)){
$selectedOrdering = 'category_name';
}
in function getChildCategoryList, the solution is to add 'c.ordering, l.`category_name`' in line 33
static $_validOrderingFields = array('category_name','category_description','c.ordering','c.category_shared','c.published','c.ordering, l.`category_name`');