joomla-platform / libraries / joomla / html / html / category.php

<?php
/**
 * @package     Joomla.Platform
 * @subpackage  HTML
 *
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 */

defined('JPATH_PLATFORM') or die;

/**
 * Utility class for categories
 *
 * @static
 * @package     Joomla.Platform
 * @subpackage  HTML
 * @since       11.1
 */
abstract class JHtmlCategory
{
    /**
     * @var array   Cached array of the category items.
     */
    protected static $items = array();

    /**
     * Returns an array of categories for the given extension.
     *
     * @param   string  The extension option.
     * @param   array   An array of configuration options. By default, only published and unpulbished categories are returned.
     *
     * @return  array
     */
    public static function options($extension, $config = array('filter.published' => array(0,1)))
    {
        $hash = md5($extension.'.'.serialize($config));

        if (!isset(self::$items[$hash])) {
            $config = (array) $config;
            $db     = JFactory::getDbo();
            $query  = $db->getQuery(true);

            $query->select('a.id, a.title, a.level');
            $query->from('#__categories AS a');
            $query->where('a.parent_id > 0');

            // Filter on extension.
            $query->where('extension = '.$db->quote($extension));

            // Filter on the published state
            if (isset($config['filter.published'])) {
                if (is_numeric($config['filter.published'])) {
                    $query->where('a.published = '.(int) $config['filter.published']);
                } else if (is_array($config['filter.published'])) {
                    JArrayHelper::toInteger($config['filter.published']);
                    $query->where('a.published IN ('.implode(',', $config['filter.published']).')');
                }
            }

            $query->order('a.lft');

            $db->setQuery($query);
            $items = $db->loadObjectList();

            // Assemble the list options.
            self::$items[$hash] = array();

            foreach ($items as &$item) {
                $repeat = ( $item->level - 1 >= 0 ) ? $item->level - 1 : 0;
                $item->title = str_repeat('- ', $repeat).$item->title;
                self::$items[$hash][] = JHtml::_('select.option', $item->id, $item->title);
            }
        }

        return self::$items[$hash];
    }

    /**
     * Returns an array of categories for the given extension.
     *
     * @param   string  The extension option.
     * @param   array   An array of configuration options. By default, only published and unpulbished categories are returned.
     *
     * @return  array
     */
    public static function categories($extension, $config = array('filter.published' => array(0,1)))
    {
        $hash = md5($extension.'.'.serialize($config));

        if (!isset(self::$items[$hash])) {
            $config = (array) $config;
            $db     = JFactory::getDbo();
            $query  = $db->getQuery(true);

            $query->select('a.id, a.title, a.level, a.parent_id');
            $query->from('#__categories AS a');
            $query->where('a.parent_id > 0');

            // Filter on extension.
            $query->where('extension = '.$db->quote($extension));

            // Filter on the published state
            if (isset($config['filter.published'])) {
                if (is_numeric($config['filter.published'])) {
                    $query->where('a.published = '.(int) $config['filter.published']);
                } else if (is_array($config['filter.published'])) {
                    JArrayHelper::toInteger($config['filter.published']);
                    $query->where('a.published IN ('.implode(',', $config['filter.published']).')');
                }
            }

            $query->order('a.lft');

            $db->setQuery($query);
            $items = $db->loadObjectList();

            // Assemble the list options.
            self::$items[$hash] = array();

                foreach ($items as &$item) {
                    $repeat = ( $item->level - 1 >= 0 ) ? $item->level - 1 : 0;
                    $item->title = str_repeat('- ', $repeat).$item->title;
                    self::$items[$hash][] = JHtml::_('select.option', $item->id, $item->title);
                }
                // Special "Add to root" option:
                self::$items[$hash][] = JHtml::_('select.option', '1', JText::_('JLIB_HTML_ADD_TO_ROOT'));
        }

        return self::$items[$hash];
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.