diff --git a/administrator/components/com_categories/models/categories.php b/administrator/components/com_categories/models/categories.php index afe98851f241a..9567a10fad494 100644 --- a/administrator/components/com_categories/models/categories.php +++ b/administrator/components/com_categories/models/categories.php @@ -360,16 +360,48 @@ public function getItems() { $extension = $this->getState('filter.extension'); - // Load Helper file of the component for which com_categories displays the categories - $classname = ucfirst(substr($extension, 4)) . 'Helper'; + $this->countItems($items, $extension); + } + + return $items; + } - if (class_exists($classname) && method_exists($classname, 'countItems')) + /** + * Method to load the countItems method from the extensions + * + * @param stdClass[] &$items The category items + * @param string $extension The category extension + * + * @return void + * + * @since 3.5 + */ + public function countItems(&$items, $extension) + { + $parts = explode('.', $extension); + $component = $parts[0]; + $section = null; + + if (count($parts) > 1) + { + $section = $parts[1]; + } + + // Try to find the component helper. + $eName = str_replace('com_', '', $component); + $file = JPath::clean(JPATH_ADMINISTRATOR . '/components/' . $component . '/helpers/' . $eName . '.php'); + + if (file_exists($file)) + { + require_once $file; + + $prefix = ucfirst(str_replace('com_', '', $component)); + $cName = $prefix . 'Helper'; + + if (class_exists($cName) && is_callable(array($cName, 'countItems'))) { - // Get the SQL to extend the com_category $query object with item count (published, unpublished, trashed) - $classname::countItems($items); + call_user_func(array($cName, 'countItems'), $items, $section); } } - - return $items; } } diff --git a/administrator/components/com_categories/views/categories/tmpl/default.php b/administrator/components/com_categories/views/categories/tmpl/default.php index 05ce824cec0df..b565caa7b1b86 100644 --- a/administrator/components/com_categories/views/categories/tmpl/default.php +++ b/administrator/components/com_categories/views/categories/tmpl/default.php @@ -9,6 +9,8 @@ defined('_JEXEC') or die; +use Joomla\String\Inflector; + // Include the component HTML helpers. JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); @@ -24,7 +26,22 @@ $listDirn = $this->escape($this->state->get('list.direction')); $ordering = ($listOrder == 'a.lft'); $saveOrder = ($listOrder == 'a.lft' && strtolower($listDirn) == 'asc'); -$component = $app->input->get('extension'); +$parts = explode('.', $extension); +$component = $parts[0]; +$section = null; + +if (count($parts) > 1) +{ + $section = $parts[1]; + + $inflector = Inflector::getInstance(); + + if (!$inflector->isPlural($section)) + { + $section = $inflector->toPlural($section); + } +} + $columns = 7; if ($saveOrder) @@ -193,25 +210,25 @@ items[0]) && property_exists($this->items[0], 'count_published')) : ?> - " title="" href="id . '&filter[published]=1' . '&filter[level]=' . (int) $item->level);?>"> + " title="" href="id . '&filter[published]=1' . '&filter[level]=' . (int) $item->level);?>"> count_published; ?> items[0]) && property_exists($this->items[0], 'count_unpublished')) : ?> - " title="" href="id . '&filter[published]=0' . '&filter[level]=' . (int) $item->level);?>"> + " title="" href="id . '&filter[published]=0' . '&filter[level]=' . (int) $item->level);?>"> count_unpublished; ?> items[0]) && property_exists($this->items[0], 'count_archived')) : ?> - " title="" href="id . '&filter[published]=2' . '&filter[level]=' . (int) $item->level);?>"> + " title="" href="id . '&filter[published]=2' . '&filter[level]=' . (int) $item->level);?>"> count_archived; ?> items[0]) && property_exists($this->items[0], 'count_trashed')) : ?> - " title="" href="id . '&filter[published]=-2' . '&filter[level]=' . (int) $item->level);?>"> + " title="" href="id . '&filter[published]=-2' . '&filter[level]=' . (int) $item->level);?>"> count_trashed; ?>