Очень странно, но в Joomla невозможно обновить адрес сервера обновлений у какого либо расширения. Получается если при обновлении например компонента, у новой версии в файле манифесте изменить адрес сервера, то добавится еще один.
Старый адрес можно удалить при установке или обновлении расширений. Достаточно добавить к расширению файл script.php
и прописать в методе preflight
перебор и удаление записей о всех серверах обновляемого расширения.
public function preflight($type, $parent)
{
$db = \JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('extension_id');
$query->from($db->quoteName('#__extensions'));
$query->where('element = "com_amgallery"'); // Ваше расширение!
$db->setQuery($query);
$listid = $db->loadObjectList();
foreach($listid as $lid)
{
$query = $db->getQuery(true);
$query->select('update_site_id');
$query->from($db->quoteName('#__update_sites_extensions'));
$query->where('extension_id = '.$lid->extension_id );
$db->setQuery($query);
$listsite = $db->loadObjectList();
foreach($listsite as $lsite)
{
$query = $db->getQuery(true);
$query->delete($db->quoteName('#__update_sites'));
$query->where('update_site_id = '.$lsite->update_site_id );
$db->setQuery($query);
$result = $db->execute();
}
$query = $db->getQuery(true);
$query->delete($db->quoteName('#__update_sites_extensions'));
$query->where('extension_id = '.$lid->extension_id );
$db->setQuery($query);
$result = $db->execute();
}
}
Измените в коде имя расширения на свое. Таким образом мы можем удалить перед установкой/обновлении все записи о всех серверах. А те которые прописаны в файле манифесте будут добавлены уже в процессе установки/обновлении.
Ну и весь код файла script.php
.
// No direct access
defined( '_JEXEC' ) or die;
class Com_MycomInstallerScript
{
/**
* Метод для установки компонента.
* @param object $parent класс, который вызывает этом метод.
* @return void
*/
public function install($parent)
{
//$parent->getParent()->setRedirectURL('index.php?option=com_mycom');
}
/**
* Метод для удаления компонента.
* @param object $parent класс, который вызывает этом метод.
* @return void
*/
public function uninstall($parent)
{
\JFactory::getApplication()->enqueueMessage(JText::_('COM_MYCOM_UNINSTALL_TEXT'));
\JFactory::getApplication()->enqueueMessage(JText::_('COM_MYCOM_SCRIPT_UNINSTALL_MESS'));
}
/**
* Метод для обновления компонента.
* @param object $parent класс, который вызывает этом метод.
* @return void
*/
public function update($parent)
{
}
/**
* Метод, который исполняется до install/update/uninstall.
* @param object $type тип изменений: install, update или discover_install
* @param object $parent класс, который вызывает этом метод.
* @return void
*/
public function preflight($type, $parent)
{
$db = \JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('extension_id');
$query->from($db->quoteName('#__extensions'));
$query->where('element = "com_mycom"'); // Ваше расширении!
$db->setQuery($query);
$listid = $db->loadObjectList();
foreach($listid as $lid)
{
$query = $db->getQuery(true);
$query->select('update_site_id');
$query->from($db->quoteName('#__update_sites_extensions'));
$query->where('extension_id = '.$lid->extension_id );
$db->setQuery($query);
$listsite = $db->loadObjectList();
foreach($listsite as $lsite)
{
$query = $db->getQuery(true);
$query->delete($db->quoteName('#__update_sites'));
$query->where('update_site_id = '.$lsite->update_site_id );
$db->setQuery($query);
$result = $db->execute();
}
$query = $db->getQuery(true);
$query->delete($db->quoteName('#__update_sites_extensions'));
$query->where('extension_id = '.$lid->extension_id );
$db->setQuery($query);
$result = $db->execute();
}
}
/**
* Метод, который исполняется после install/update/uninstall.
* @param object $type тип изменений: install, update или discover_install
* @param object $parent класс, который вызывает этом метод.
* @return void
*/
public function postflight($type, $parent)
{
\JFactory::getApplication()->enqueueMessage(JText::_('COM_MYCOM_SCRIPT_POSTFLIGHT_' . strtoupper($type) . '_TEXT'). ' v.'.$parent->get('manifest')->version);
}
}