При подходе к реализации задачи создания многосайтовости на одном экземпляре CMS Joomla следует понимать, что роутинг в данной CMS базируется на меню. Поэтому подходы к реализации задачи как правило строятся вокруг переопределения логики работы компонента меню, в некоторых случаях так же работы роутинга. Но как правило второе не реализуют, поскольку такой подход может усложнить работу с материалами, их отображениям на сайтах разных регионов, а в особенности в вопросе расширения функционала сайта(то есть написании чего “то не коробочного”, и требующего при этом учёта работы реализованного многосайтового режима). Кроме того какого либо стандартного подхода у Joomla к многосайтовости в особенности с изменённым роутингом нет, при этом различные подходы к реализации встречаются в интернете в том числе с применением специально написанных для этого целей компонентов(не было практического опыта работы с такими, в целом при подходе к реализации считаю что тем не менее следует посмотреть готовые решения, и возможно скорректировать подходы предлагаемые в этом документе. Помню что логика работы какого то такого компонента построена на установке соответствующих галочек в компоненте меню - к какой именно версии сайта относится элемент).
Что на практике означает, реализация только изменения логики работы меню без изменений в роутинге, рассмотрим следующий пример.
Есть 2 сайта водоканала: город Иваново и город Шуя. У обоих есть страница вакансии /vakansii
Стандартная Joomla не учитывает в роутинге адрес субдомена, например shuya.основной-домен.ru
Таким образом контент shuya.основной-домен.ru/vakansii не может быть отличным от основной-домен.ru/vakansii и потребуется для Шуи иной алиас, например /vakansii-shuya
Последний подход создаст страницу а аналогичным контентом и на основном домене(хотя и без проставленной соответствующей ссылки в меню, что по идее не должно давать повода поисковым роботам индексировать страницы). Подавлением такого поведения, может быть реализовано переопределением работы меню или материала, что в результате позволит отобразить страницу 404 для неверных адресов.
Тем не менее есть возможности по реализации одного url с разным контентом. Например сделать в материале несколько полей(типа HTML) и предложить заполнить контент для разных городов в одном материале. Далее на уровне логики компонента в зависимости от серверной переменной содержащей HOST или переменной в сессии определять какой именно сайт открыт и выводить контент именно для него. Такой подход не подойдет если количество городов для которых нужен сайт будет увеличиваться, из за отображения множества полей при создании или редактировании материала. Разумеется можно сделать связь 1 - многие, то есть создать доп таблицу с контентом материалов для отдельных сайтов, и если записи относящейся к материалу не найдены, то не отображать их в админке. Но это не вся проблема, поскольку есть ещё и SEO поля, которые так же у материалов сайта могут отличаться(например description вакансий для Шуи должен быть для этого когода а не от аналогичного материала для Иваново), поэтому SEO поля так же потребуют создания отдельных таблиц с связью 1 - многие для их хранения. По идее такой подход может быть даже удобным для использования(если опять же не будет чрезмерного количества городов, куча материалов которых будет открываться на одной административной странице для редактирования а затем ещё и сохранять изменения во все поля сразу, а не только изменённые), потребуется реализовать на административном интерфейсе возможность добавления ещё одного материала для города, чтобы не отображать пустые. При всём этом по времени на реализацию такой вариант займет больше чем многие другие приведённые в текущем документе.
Другой вариант использования разных материалов на одном URi(обращу внимание что речь именно про Uri а не UrL, поскольку хосты отличаются, но хосты как уже отметил не влияют в joomla на стандартный роутинг) это создание нескольких баз данных(по количеству сайтов) с использованием единых php файлов.
Такой вариант на деле может оказаться одним из наиболее удобных. Поскольку на деле, если окажется что у сайта не так много одинаковых страниц то имеем следующее:
- один шаблон и один конфиг сайта, то есть редактируя один шаблон редактируются все. Единые настройки почты и прочие;
- независимое меню и материалы у всех сайтов(в отличие от bitrix роутинг в joomla построен на компоненте меню(если не брать в расчёт какой либо компонент наподобии VirtueMart который переопределяет работу роутинга), поэтому отдельная база означает полную свободу сайта над формированием url, поскольку меню хранится только в базе);
- свои пароли у администраторов сайтов в городах организации(и нет доступа к другим учетным записям), что так же не потребует от разработчика создания каких либо групповых политик;
- в случае создания личных кабинетов, данные хранятся в зависимости от города в своих базах данных(если же требуется тем не менее данные для личного кабинета брать из единой базы, у Joomla есть стандартные возможности на уровне API для создания сторонних соединений на системном драйвере, поэтому логика такого раздела тем не менее может быть отдельно реализована);
- одна из наиболее простых вариаций в реализации с стороны как написания логики так и затрачиваемого времени на реализацию;
- такой подход в отличии от других в наиболее полной мере может быть реализован без внесения изменений в ядро CMS и написания плагинов меняющих логику работы системных компонентов, а значит сохраняется возможность обновлять CMS;