Back to Category class

Method options

public static array
options
(mixed $extension, mixed $config = array('filter.published' => array(0, 1)))
Returns an array of categories for the given extension.
Parameters
  • string $extension The extension option e.g. com_something.
  • array $config An array of configuration options. By default, only published and unpublished categories are returned.
Returns
  • array
Since
  • 1.5
Class: Category
Project: Joomla

Method options - Source code

/**
 * Returns an array of categories for the given extension.
 *
 * @param   string  $extension  The extension option e.g. com_something.
 * @param   array   $config     An array of configuration options. By default, only
 *                              published and unpublished categories are returned.
 *
 * @return  array
 *
 * @since   1.5
 */
public static function options($extension, $config = array('filter.published' => array(0, 1)))
{
    $hash = md5($extension . '.' . serialize($config));
    if (!isset(static::$items[$hash])) {
        $config = (array) $config;
        $db = Factory::getDbo();
        $user = Factory::getUser();
        $groups = $user->getAuthorisedViewLevels();
        $query = $db->getQuery(true)->select([$db->quoteName('a.id'), $db->quoteName('a.title'), $db->quoteName('a.level'), $db->quoteName('a.language')])->from($db->quoteName('#__categories', 'a'))->where($db->quoteName('a.parent_id') . ' > 0');
        // Filter on extension.
        $query->where($db->quoteName('a.extension') . ' = :extension')->bind(':extension', $extension);
        // Filter on user access level
        $query->whereIn($db->quoteName('a.access'), $groups);
        // Filter on the published state
        if (isset($config['filter.published'])) {
            if (is_numeric($config['filter.published'])) {
                $query->where($db->quoteName('a.published') . ' = :published')->bind(':published', $config['filter.published'], ParameterType::INTEGER);
            } elseif (is_array($config['filter.published'])) {
                $config['filter.published'] = ArrayHelper::toInteger($config['filter.published']);
                $query->whereIn($db->quoteName('a.published'), $config['filter.published']);
            }
        }
        // Filter on the language
        if (isset($config['filter.language'])) {
            if (is_string($config['filter.language'])) {
                $query->where($db->quoteName('a.language') . ' = :language')->bind(':language', $config['filter.language']);
            } elseif (is_array($config['filter.language'])) {
                $query->whereIn($db->quoteName('a.language'), $config['filter.language'], ParameterType::STRING);
            }
        }
        // Filter on the access
        if (isset($config['filter.access'])) {
            if (is_numeric($config['filter.access'])) {
                $query->where($db->quoteName('a.access') . ' = :access')->bind(':access', $config['filter_access'], ParameterType::INTEGER);
            } elseif (is_array($config['filter.access'])) {
                $config['filter.access'] = ArrayHelper::toInteger($config['filter.access']);
                $query->whereIn($db->quoteName('a.access'), $config['filter.access']);
            }
        }
        $query->order($db->quoteName('a.lft'));
        $db->setQuery($query);
        $items = $db->loadObjectList();
        // Assemble the list options.
        static::$items[$hash] = array();
        foreach ($items as &$item) {
            $repeat = $item->level - 1 >= 0 ? $item->level - 1 : 0;
            $item->title = str_repeat('- ', $repeat) . $item->title;
            if ($item->language !== '*') {
                $item->title .= ' (' . $item->language . ')';
            }
            static::$items[$hash][] = HTMLHelper::_('select.option', $item->id, $item->title);
        }
    }
    return static::$items[$hash];
}