joomla 标签表单从数据库加载整个列表

问题描述 投票:0回答:1

我注意到 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;
}
php joomla
1个回答
1
投票

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.