joomla标签表单从db加载整个列表

时间:2015-10-13 22:41:24

标签: joomla

我注意到joomla标签输入字段非常愚蠢。它从db加载所有内容,在本例中为9K标记。显然,ui变得如此缓慢。

任何想法如何解决?似乎已经存在ajax功能,那么为什么不完全依赖它呢? J方式很疯狂。

enter image description here

1的想法是修改getOption方法,只加载与当前文章编辑器相关的标签。

但在这种情况下,我似乎没有文章ID。

任何想法如何解决问题?我相信你们中有些人会碰到这个:S

/**
 * Method to get a list of tags
 *
 * @return  array  The field option objects.
 *
 * @since   3.1
 */
protected function getOptions()
{
    $published = $this->element['published']? $this->element['published'] : array(0,1);

    $db    = JFactory::getDbo();
    $query = $db->getQuery(true)
        ->select('DISTINCT a.id AS value, a.path, a.title AS text, a.level, a.published, a.lft')
        ->from('#__tags AS a')
        ->join('LEFT', $db->qn('#__tags') . ' AS b ON a.lft > b.lft AND a.rgt < b.rgt');

    // Filter language
    if (!empty($this->element['language']))
    {
        $query->where('a.language = ' . $db->q($this->element['language']));
    }

    $query->where($db->qn('a.lft') . ' > 0');

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

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

    // Get the options.
    $db->setQuery($query);

    try
    {
        $options = $db->loadObjectList();
    }
    catch (RuntimeException $e)
    {
        return false;
    }

    // Block the possibility to set a tag as it own parent
    if ($this->form->getName() == 'com_tags.tag')
    {
        $id   = (int) $this->form->getValue('id', 0);

        foreach ($options as $option)
        {
            if ($option->value == $id)
            {
                $option->disable = true;
            }
        }
    }

    // Merge any additional options in the XML definition.
    $options = array_merge(parent::getOptions(), $options);

    // Prepare nested data
    if ($this->isNested())
    {
        $this->prepareOptionsNested($options);
    }
    else
    {
        $options = JHelperTags::convertPathsToNames($options);
    }

    return $options;
}

1 个答案:

答案 0 :(得分:1)

所以我修改了预加载的列表,只加载了文章中存在的标签(保存为属于文章)。自动完成功能仍然适用于ajax,因此不会丢失任何功能。

enter image description here