对于中文环境来说,把标签文本最小长度限制为3是不合理的。因为中文是双音节词语,比拉丁文等西方国家语言简短,大量的有实际意义的词汇的文本长度为2。然而Joomla不支持配置它。经过调试,我发现它的代码把标签最小长度写在代码中限定死了。代码位于libraries\cms\html文件夹下tag.php文件里,第168行:
<?php /** * @package Joomla.Libraries * @subpackage HTML * * @copyright Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('JPATH_PLATFORM') or die; use Joomla\Utilities\ArrayHelper; /** * Utility class for tags * * @since 3.1 */ abstract class JHtmlTag { /** * Cached array of the tag items. * * @var array * @since 3.1 */ protected static $items = array(); /** * Returns an array of tags. * * @param array $config An array of configuration options. By default, only * published and unpublished categories are returned. * * @return array * * @since 3.1 */ public static function options($config = array('filter.published' => array(0, 1))) { $hash = md5(serialize($config)); if (!isset(static::$items[$hash])) { $config = (array) $config; $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.id, a.title, a.level') ->from('#__tags AS a') ->where('a.parent_id > 0'); // Filter on the published state if (isset($config['filter.published'])) { if (is_numeric($config['filter.published'])) { $query->where('a.published = ' . (int) $config['filter.published']); } elseif (is_array($config['filter.published'])) { $config['filter.published'] = ArrayHelper::toInteger($config['filter.published']); $query->where('a.published IN (' . implode(',', $config['filter.published']) . ')'); } } // Filter on the language if (isset($config['filter.language'])) { if (is_string($config['filter.language'])) { $query->where('a.language = ' . $db->quote($config['filter.language'])); } elseif (is_array($config['filter.language'])) { foreach ($config['filter.language'] as &$language) { $language = $db->quote($language); } $query->where('a.language IN (' . implode(',', $config['filter.language']) . ')'); } } $query->order('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; static::$items[$hash][] = JHtml::_('select.option', $item->id, $item->title); } } return static::$items[$hash]; } /** * Returns an array of tags. * * @param array $config An array of configuration options. By default, only published and unpublished tags are returned. * * @return array Tag data * * @since 3.1 */ public static function tags($config = array('filter.published' => array(0, 1))) { $hash = md5(serialize($config)); $config = (array) $config; $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('a.id, a.title, a.level, a.parent_id') ->from('#__tags AS a') ->where('a.parent_id > 0'); // Filter on the published state if (isset($config['filter.published'])) { if (is_numeric($config['filter.published'])) { $query->where('a.published = ' . (int) $config['filter.published']); } elseif (is_array($config['filter.published'])) { $config['filter.published'] = ArrayHelper::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. static::$items[$hash] = array(); foreach ($items as &$item) { $repeat = ($item->level - 1 >= 0) ? $item->level - 1 : 0; $item->title = str_repeat('- ', $repeat) . $item->title; static::$items[$hash][] = JHtml::_('select.option', $item->id, $item->title); } return static::$items[$hash]; } /** * This is just a proxy for the formbehavior.ajaxchosen method * * @param string $selector DOM id of the tag field * @param boolean $allowCustom Flag to allow custom values * * @return void * * @since 3.1 */ public static function ajaxfield($selector = '#jform_tags', $allowCustom = true) { // Get the component parameters $params = JComponentHelper::getParams('com_tags'); $minTermLength = (int) $params->get('min_term_length', 3); $displayData = array( 'minTermLength' => $minTermLength, 'selector' => $selector, 'allowCustom' => JFactory::getUser()->authorise('core.create', 'com_tags') ? $allowCustom : false, ); JLayoutHelper::render('joomla.html.tag', $displayData); return; } }
此外在administrator\components\com_tags文件夹下config.xml文件中发现配置节第181行也有长度的文字描述:
<?xml version="1.0" encoding="utf-8"?> <config> <fieldset name="taglist" label="COM_TAGS_CONFIG_TAG_SETTINGS_LABEL" description="COM_TAGS_CONFIG_TAG_SETTINGS_DESC"> <field name="tag_layout" type="componentlayout" label="COM_TAGS_CONFIG_TAGGED_ITEMS_FIELD_LAYOUT_LABEL" description="COM_TAGS_CONFIG_TAGGED_ITEMS_FIELD_LAYOUT_DESC" menuitems="true" extension="com_tags" view="tag" /> <field name="save_history" type="radio" label="JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL" description="JGLOBAL_SAVE_HISTORY_OPTIONS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="history_limit" type="number" label="JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL" description="JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC" filter="integer" default="5" showon="save_history:1" /> <field name="show_tag_title" type="radio" label="COM_TAGS_SHOW_TAG_TITLE_LABEL" description="COM_TAGS_SHOW_TAG_TITLE_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_show_tag_image" type="radio" label="COM_TAGS_SHOW_TAG_IMAGE_LABEL" description="COM_TAGS_SHOW_TAG_IMAGE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_show_tag_description" type="radio" label="COM_TAGS_SHOW_TAG_DESCRIPTION_LABEL" description="COM_TAGS_SHOW_TAG_DESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_image" type="media" label="COM_TAGS_TAG_LIST_MEDIA_LABEL" description="COM_TAGS_TAG_LIST_MEDIA_DESC" /> <field name="tag_list_orderby" type="list" label="JGLOBAL_FIELD_FIELD_ORDERING_LABEL" description="JGLOBAL_FIELD_FIELD_ORDERING_DESC" default="title" > <option value="c.core_title">JGLOBAL_TITLE</option> <option value="match_count">COM_TAGS_MATCH_COUNT</option> <option value="c.core_created_time">JGLOBAL_CREATED_DATE</option> <option value="c.core_modified_time">JGLOBAL_MODIFIED_DATE</option> <option value="c.core_publish_up">JGLOBAL_PUBLISHED_DATE</option> </field> <field name="tag_list_orderby_direction" type="radio" label="JGLOBAL_ORDER_DIRECTION_LABEL" description="JGLOBAL_ORDER_DIRECTION_DESC" class="btn-group btn-group-yesno" default="ASC" > <option value="ASC">JGLOBAL_ORDER_ASCENDING</option> <option value="DESC">JGLOBAL_ORDER_DESCENDING</option> </field> <field name="show_headings" type="radio" label="COM_TAGS_TAG_LIST_SHOW_HEADINGS_LABEL" description="COM_TAGS_TAG_LIST_SHOW_HEADINGS_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_show_date" type="list" label="COM_TAGS_TAG_LIST_SHOW_DATE_DESC" description="COM_TAGS_TAG_LIST_SHOW_DATE_LABEL" default="0" > <option value="0">JHIDE</option> <option value="created">JGLOBAL_CREATED</option> <option value="modified">JGLOBAL_MODIFIED</option> <option value="published">JPUBLISHED</option> </field> <field name="tag_list_show_item_image" type="radio" label="COM_TAGS_SHOW_ITEM_IMAGE_LABEL" description="COM_TAGS_SHOW_ITEM_IMAGE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_show_item_description" type="radio" label="COM_TAGS_TAG_LIST_SHOW_ITEM_DESCRIPTION_LABEL" description="COM_TAGS_TAG_LIST_SHOW_ITEM_DESCRIPTION_DESC" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="tag_list_item_maximum_characters" type="number" label="COM_TAGS_LIST_MAX_CHARACTERS_LABEL" description="COM_TAGS_LIST_MAX_CHARACTERS_DESC" filter="integer" showon="tag_list_show_item_description:1" /> </fieldset> <fieldset name="tagselection" label="COM_TAGS_CONFIG_SELECTION_SETTINGS_LABEL" description="COM_TAGS_CONFIG_SELECTION_SETTINGS_DESC"> <field name="min_term_length" type="integer" label="COM_TAGS_CONFIG_TAG_MIN_LENGTH_LABEL" description="COM_TAGS_CONFIG_TAG_MIN_LENGTH_DESC" first="1" last="1" step="1" default="3" /> <field name="return_any_or_all" type="radio" label="COM_TAGS_SEARCH_TYPE_LABEL" description="COM_TAGS_SEARCH_TYPE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">COM_TAGS_ANY</option> <option value="0">COM_TAGS_ALL</option> </field> <field name="include_children" type="radio" label="COM_TAGS_INCLUDE_CHILDREN_LABEL" description="COM_TAGS_INCLUDE_CHILDREN_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">COM_TAGS_INCLUDE</option> <option value="0">COM_TAGS_EXCLUDE</option> </field> <field name="maximum" type="number" label="COM_TAGS_LIST_MAX_LABEL" description="COM_TAGS_LIST_MAX_DESC" default="200" filter="integer" /> <field name="tag_list_language_filter" type="contentlanguage" label="COM_TAGS_FIELD_LANGUAGE_FILTER_LABEL" description="COM_TAGS_FIELD_LANGUAGE_FILTER_DESC" default="all" > <option value="all">JALL</option> <option value="current_language">JCURRENT</option> </field> </fieldset> <fieldset name="alltags" label="COM_TAGS_CONFIG_ALL_TAGS_SETTINGS_LABEL" description="COM_TAGS_CONFIG_ALL_TAGS_SETTINGS_DESC"> <field name="tags_layout" type="componentlayout" label="COM_TAGS_CONFIG_ALL_TAGS_FIELD_LAYOUT_LABEL" description="COM_TAGS_CONFIG_ALL_TAGS_FIELD_LAYOUT_DESC" menuitems="true" extension="com_tags" view="tags" /> <field name="all_tags_orderby" type="list" label="JGLOBAL_FIELD_FIELD_ORDERING_LABEL" description="JGLOBAL_FIELD_FIELD_ORDERING_DESC" default="title" > <option value="title">JGLOBAL_TITLE</option> <option value="hits">JGLOBAL_HITS</option> <option value="created_time">JGLOBAL_CREATED_DATE</option> <option value="modified_time">JGLOBAL_MODIFIED_DATE</option> <option value="publish_up">JGLOBAL_PUBLISHED_DATE</option> </field> <field name="all_tags_orderby_direction" type="radio" label="JGLOBAL_ORDER_DIRECTION_LABEL" description="JGLOBAL_ORDER_DIRECTION_DESC" class="btn-group btn-group-yesno" default="ASC" > <option value="ASC">JGLOBAL_ORDER_ASCENDING</option> <option value="DESC">JGLOBAL_ORDER_DESCENDING</option> </field> <field name="all_tags_show_tag_image" type="radio" label="COM_TAGS_SHOW_ITEM_IMAGE_LABEL" description="COM_TAGS_SHOW_ITEM_IMAGE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="all_tags_show_tag_descripion" type="radio" label="COM_TAGS_SHOW_ITEM_DESCRIPTION_LABEL" description="COM_TAGS_SHOW_ITEM_DESCRIPTION_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="all_tags_tag_maximum_characters" type="number" label="COM_TAGS_LIST_MAX_CHARACTERS_LABEL" description="COM_TAGS_LIST_MAX_CHARACTERS_DESC" filter="integer" showon="all_tags_show_tag_descripion:1" /> <field name="all_tags_show_tag_hits" type="radio" label="JGLOBAL_HITS" description="COM_TAGS_FIELD_CONFIG_HITS_DESC" class="btn-group btn-group-yesno" default="0" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="shared" label="COM_TAGS_CONFIG_SHARED_SETTINGS_LABEL" description="COM_TAGS_CONFIG_SHARED_SETTINGS_DESC"> <field name="filter_field" type="radio" label="JGLOBAL_FILTER_FIELD_LABEL" description="JGLOBAL_FILTER_FIELD_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_pagination_limit" type="radio" label="JGLOBAL_DISPLAY_SELECT_LABEL" description="JGLOBAL_DISPLAY_SELECT_DESC" default="1" class="btn-group btn-group-yesno" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> <field name="show_pagination" type="list" label="JGLOBAL_PAGINATION_LABEL" description="JGLOBAL_PAGINATION_DESC" default="2" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> <option value="2">JGLOBAL_AUTO</option> </field> <field name="show_pagination_results" type="radio" label="JGLOBAL_PAGINATION_RESULTS_LABEL" description="JGLOBAL_PAGINATION_RESULTS_DESC" class="btn-group btn-group-yesno" default="1" showon="show_pagination:1,2" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="data_entry" label="COM_TAGS_CONFIG_DATA_ENTRY_SETTINGS_LABEL" description="COM_TAGS_CONFIG_DATA_ENTRY_SETTINGS_DESC"> <field name="tag_field_ajax_mode" type="radio" label="COM_TAGS_TAG_FIELD_MODE_LABEL" description="COM_TAGS_TAG_FIELD_MODE_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">COM_TAGS_TAG_FIELD_MODE_AJAX</option> <option value="0">COM_TAGS_TAG_FIELD_MODE_NESTED</option> </field> </fieldset> <fieldset name="integration" label="JGLOBAL_INTEGRATION_LABEL" description="COM_TAGS_CONFIG_INTEGRATION_SETTINGS_DESC" > <field name="show_feed_link" type="radio" label="JGLOBAL_SHOW_FEED_LINK_LABEL" description="JGLOBAL_SHOW_FEED_LINK_DESC" class="btn-group btn-group-yesno" default="1" > <option value="1">JSHOW</option> <option value="0">JHIDE</option> </field> </fieldset> <fieldset name="permissions" label="JCONFIG_PERMISSIONS_LABEL" description="JCONFIG_PERMISSIONS_DESC" > <field name="rules" type="rules" label="JCONFIG_PERMISSIONS_LABEL" filter="rules" validate="rules" component="com_tags" section="component" /> </fieldset> </config>
把以上两个代码位置的3改为1就可以了。