Компонент выбора городов SelectCity для Joomla5:
3 режима работы - поддомен, подпапка, без подстановки алиаса города в url. Создание списка городов.
Импорт и экспорт списка городов в формате csv.
Модуль выбора городов для Joomla:
Выводит список опубликованных городов для выбора. Список формируется AJAX запросом к модулю, что не создает нагрузку во время загрузки страницы. Модуль в popup окне выводит список городов, и содержит форму для поиска
.
Демо: полимерная-пленка.рф, dominant-perm.ru, dmsite.ru
Плагин выбора городов для Joomla поддерживает замену шорт кодов, примеры работы:
"Барнаул" - название города.
"Барнаул" - число от 1 до 6, название города будет в соответствующем падеже.
"Любой текст" - Барнаул нужно заменить на название любого города, выведится текст если текущий город соответствует городу в шорт коде.
"" - Барнаул нужно заменить на название любого города, выведится текст если текущий город не соответствует городу в шорт коде.
"" - алиас текущего города.
"InSib Digital Agency" - название сайта из настроек.
"https://insib.su/" - домен сайта.
Для замены шорткодов, плагин использует регулярные выражения.
Плагин создает только один запрос в базу данных для получения списка городов.
Дополнительные настройки:
Генерация robots.txt и sitemap.xml по поддоменам.
Уникализация html кода для поддоменов: добавление в часто используемые классы алиаса текущего домена.
В планах: вывод шорткодов для стран и регионов, склонение.
Плагин SelectCity Sitemap WebCron
Плагин создан для уменьшения нагрузки при генерации sitemap.xml поддоменов. Он создает стаитические файлы по пути /media/plg_task_selectcity_sitemap из sitemap.xml в корне сайта.
Настройка: Активировать плагин plg_task_selectcity_sitemap, перейти в Система -> Планировщик задач -> Создать -> SelectCity Sitemap WebCron-> Задать интервал генерации.
Ссылка на создание планировщика: /administrator/index.php?option=com_scheduler&view=select&layout=default
ТЕСТИРОВАНИЕ: Joomla 5.1.0 | PHP 8.3.1 | nginx/1.25.5
Контакты:
По вопросам доработки, исправлений писать на - @insib_su
Инструкции:
HELPER для интеграций
Расширение содержит глобальный класс SelectcityData который который подключается плагином в самом начале инициализации Joomla, поэтому к его методам можно обращаться из сторонних расширений.
use Joomla\Plugin\System\Selectcity\Helper\SelectcityData;
// Получение данных текущего города
$currentCityInfo = SelectcityData::getCurrentCityCases();
// Вывод основных данных о городе
echo "Название города: " . $currentCityInfo['nominative'] . "<br>";
echo "Алиас города: " . SelectcityData::getCityAlias() . "<br>";
// Вывод склонений
echo "Именительный падеж: " . $currentCityInfo['nominative'] . "<br>";
echo "Родительный падеж: " . $currentCityInfo['genitive'] . "<br>";
echo "Дательный падеж: " . $currentCityInfo['dative'] . "<br>";
echo "Винительный падеж: " . $currentCityInfo['accusative'] . "<br>";
echo "Творительный падеж: " . $currentCityInfo['instrumental'] . "<br>";
echo "Предложный падеж: " . $currentCityInfo['prepositional'] . "<br>";
Методы плагина:
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Factory;
// Загрузка плагина
// Убедитесь, что импортируется нужный тип плагинов (например, 'system')
PluginHelper::importPlugin('system');
// Укажите имя и тип вашего плагина
$pluginName = 'selectcity'; // Имя вашего плагина
$pluginType = 'system'; // Тип вашего плагина
// Используйте метод bootPlugin для инициализации плагина
$application = Factory::getApplication();
$plugin = $application->bootPlugin($pluginName, $pluginType);
// Проверьте, что плагин был успешно инициализирован
if ($plugin) {
// Вызовите метод
if (method_exists($plugin, 'getCurrentCityName')) {
// Вывод основных данных о городе
echo "Название города: " . $plugin->getCurrentCityName() . "<br>";
echo "Алиас города: " . $plugin->getCurrentCityAlias() . "<br>";
// Вывод склонений
echo "Именительный падеж: " . $plugin->getCurrentCityCases()[1] . "<br>";
echo "Родительный падеж: " . $plugin->getCurrentCityCases()[2] . "<br>";
echo "Дательный падеж: " . $plugin->getCurrentCityCases()[3] . "<br>";
echo "Винительный падеж: " . $plugin->getCurrentCityCases()[4] . "<br>";
echo "Творительный падеж: " . $plugin->getCurrentCityCases()[5] . "<br>";
echo "Предложный падеж: " . $plugin->getCurrentCityCases()[6] . "<br>";
} else {
echo "Метод не существует в этом плагине.";
}
} else {
echo "Плагин не был загружен.";
}
Пример вывода:
Название города: Братск
Алиас города: bratsk
Именительный падеж: Братск
Родительный падеж: Братска
Дательный падеж: Братску
Винительный падеж: Братск
Творительный падеж: Братском
Предложный падеж: Братске
Для генерации robots.txt и sitemap.xml нужно создать перенаправления. В корне сайта должны лежать файлы robots.txt и sitemap.xml, компонент выбора городов для Joomla 5 читает и заменяет в этих файлах домен.
Для Apache:
Добавьте следующее правило в файл .htaccess, который обычно находится в корневой директории вашего сайта:
# Перенаправление запросов к robots.txt на компонент com_selectcity
RewriteCond %{REQUEST_URI} ^/robots\.txt$
RewriteRule ^robots\.txt$ index.php?option=com_selectcity&task=robots [L,QSA]
# Перенаправление запросов к sitemap.xml на компонент com_selectcity
RewriteRule ^sitemap\.xml$ index.php?option=com_selectcity&task=sitemap [L,QSA]
Для Nginx:
Вам нужно добавить следующую конфигурацию в блок сервера (server block) в конфигурационном файле Nginx для вашего сайта:
# Перенаправление запросов к robots.txt на компонент com_selectcity
location /robots.txt {
rewrite ^/robots\.txt$ /index.php?option=com_selectcity&task=robots last;
}
# Перенаправление запросов к sitemap.xml на компонент com_selectcity
location = /sitemap.xml {
rewrite ^ /index.php?option=com_selectcity&task=sitemap last;
}
Для корректной работы режима "поддомены" необходимо:
В разделе DNS добавить новую запись для вашего домена с параметрами:
- Запись: *
- Тип: А
- IP адрес или значение: внешний IP вашего впс
Далее, необходимо прикрепить поддомены к сайту (На разных хостингах данная операция делается по разному, лучше уточнить у поддержки). При выключенном плагине, сайт должен открываться по любой_текст.mydomain.com
Подключите ssl сертификат для *
Отладка и профилирование:
Обновление ключей: /administrator/index.php?option=com_installer&view=updatesites
Файлы для импорта: Российские города - all_city_rus.csv || с населением от 100 000 filtered_cities_rus.csv
💪Спасибо:
@omnamahshivayas - за вклад в тестирование и поддержку проекта.
@sergeytolkachyov - за статьи по разработке Joomla, которые легли в основу проекта, консультации и помощь в разработке.