Я так понимаю речь идет о чистой Joomla. Для K2 уже уточнили, что двух одинаковых псевдонимов в принципе быть не может.
Может материалы могут иметь одинаковый alias даже в одной категории. Без проблем создается (при редактировнии не работает)и есть в настройках SEF "Enable advanced SEF for K2 URLs" и вырубить "Use the item ID in the URL", ну чтобы url был красивым то два материала будет с одинаковым url.
Прописывание категорий в меню в принципе же решает проблему неопределенности.
Нет не спасает. У k2 есть удивительная штука фактически у к2 такой роут что можно попадать в материал через пункт меню даже если его нет в привязанной категории
Пример
Есть категория category1 и пукнт меню cat1 В ней материал art1 доступен по url /cat1/art1
Есть категория category2 и пукнт меню cat2 В ней материал art2 доступен по url /cat2/art2
Но так же можно спокойно открыть материал art2 по url /cat1/art2 это лечиться просто канониками и редиректами. Но вот если у вас сделано как я написал выше Enable advanced SEF for K2 URLs то два материал будут иметь один и тот же линк => работать будет только 1
Ну а если и категория одна тут вообще без вариантов, почему так ну наверное потому что по умалчаю url материала id-alias. Да и если переносите материал то с линком на него проблем нет.
Что плагин делает?
Да все просто: повешу на onBeforeK2Save запрос-проверку да и все и прибавлю -count к алаису.
UPD Припоздал с плагином. Теперь уже так Если настройки выстралнеы SEF "Enable advanced SEF for K2 URLs" = 1 "Use the item ID in the URL" = 0, то одинаковые создать не выйдет, но вот есть если по другому сделать то сохраняйте сколько угодно, и если их включить позднее то дубли алиасов ни куда не денуться.
Сам код на проверки алиса если нужно.
\administrator\components\com_k2\tables\k2item.php ~174
// Check if alias already exists. If so warn the user
$params = JComponentHelper::getParams('com_k2');
if ($params->get('k2Sef') && !$params->get('k2SefInsertItemId'))
{
$db = JFactory::getDBO();
$db->setQuery("SELECT id FROM #__k2_items WHERE alias = ".$db->quote($this->alias)." AND id != ".(int)$this->id);
$result = count($db->loadObjectList());
if ($result > 0)
{
$this->alias .= '-'.((int)$result + 1);
$application = JFactory::getApplication();
$application->enqueueMessage(JText::_('K2_WARNING_DUPLICATE_TITLE_ALIAS_DETECTED'), 'notice');
}
}
ТС можете добавить туда AND catid != ".(int)$this->catid и тогда в разный категориях могут быть одинаковые алиасы, материалов, но тогда глюк как я писал в примере выше, ни куда не денется.
$db->setQuery("SELECT id FROM #__k2_items WHERE alias = ".$db->quote($this->alias)." AND id != ".(int)$this->id." AND catid != ".(int)$this->catid);
Кстати в 2.6.9 я помню такой проверки не было, тогда то и превый раз подумал о плагине. (ну да я его под другие цели заточу =), Перенесу в after и сделаю чтобы в зависимоти от категорий алиса был либо id материала либо алиас маетриала для фронт добаления пригодиться )