Создаем один портал из множества проектов

Допустим у Вас в компании на каждый большой проект был создан отдельный сайт, а сейчас вы решили объединить это в один большой портал. При том желательно, чтобы отдельные сайты работали как сами по себе, так и через единый центр. Не каждый пользователь знает, где эта адресная строка и сможет набрать там незвучное название сайта да еще на английском. Также дело может обстоять с объединением обычных сервисов.

Какие проблемы нас поджидают на нашем пути?

 

У каждого сайта есть свой центр, свое меню. А здесь получается это меню должно будет стать подменю с другим центром. И желательно – если мы получаем имя пользователя на главном портале – не искать его повторно на внутренних.

Самое простое, что приходит в голову – iframe. Действительно – просто – делаем отдельный сайт с содержанием в виде iframe. В каждом из которых находится наш сайт и всего делов. Только такой метод не удовлетворяет единой системе ссылок.

Ладно. Не делаем iframe (за редким исключением). А как тогда? Очевидно – внутренняя часть должна генериться тем самым побочным сайтом и возвращаться без начальных тегов head и title. Хорошо. Уже кое что. При этом самый главный портал должен передавать побочному сайту страницу обращения пользователя, съедая первую часть, по которой он и узнал что речь идет именно об этом побочном портале.

Тогда нужно либо дергать тот сайт при помощи
file_get_contents(http://subsite1.ru/{$parametres}), либо include.
В первом случае – все ссылки остаются с текущими стилями, js и изображениями, а также ссылки ведут на относительные адреса главного сайта + нужно фильтровать htmlheadи прочие. Отдельная груда операций. Во втором случае – нужно прописать в файле, который хотим инклудить – чтобы он понимал, что мы обращаемся со страницы главного портала и ему нужно выдавать побочный шаблон и часть данных (подключений) у нас уже есть. Как это сделать?

Легко. В главном файле заводим переменную

$is_portal=true;

А в файле побочном – проверяем ее

if (empty($is_portal))Мы обращаемся напрямую;

Отлично. Теперь мы можем завести вспомогательный шаблон для случая обращения через внешний портал.

Хорошо. Да не очень. Мы пишем инклуд, а все остальные инклуды идут относительно папки вызываемой. Ну это лечится очень просто, нужно лишь поменять базовый каталог на время вызываемого файла и вернуть его обратно. А в самом файле сделать

return $Smarty->fetch();

Чтобы он не был выведен раньше времени.

Пишем следующий код

$dir=getcwd();
chdir('/subsite1.ru/html/');
$data=include('index.php');
chdir($dir);

Теперь на время выполнения – директория переключается туда и обратно.

Передаем наш путь при помощи сопряжения. Мы можем разбить все параметры строки и передать в качестве аргумента до вызова нашего сайта. Для него это будет словно манна небесная. И на нем может и не быть ЧПУ, но в момент сопряжения мы его передаем. Этим и занимается контролер.

По схеме описанной ранее – мы легко можем опираться на переменные и создать данный блок.

Что делать с тегом base, ведь для каждого сайта он был указана, ведущим на основную директорию. Делаем просто. Пишем, общий тег base, в который включаем наш текущий проект и выборную директорию с проектом. Для основного меню – ставим перед ссылками /link.php, а у побочных проектов этого не делаем и компьютер сам поймет, что нужно стучаться по ним.

Все общие JS и CSS лучше свалить в отдельную папку и инклудить один раз. Остальные, относящиеся к каждому побочному проекту – инклудить с указанием прямых путей.

Для главного меню делаем какой-нибудь редкий тег, желательно с ссылкой на id. #topmenu например.

Остается вопрос с ajax и побочными вызываемыми файлами. Придется опираться на вызов основного домена. Можно для этого в JSсоздать переменную и опираться на нее. В остальном – этого должно хватить. Используйте разные пространства имен по возможности namespace.

Больше материалов выкладываю на своем Дзен канале

  • Автор: kosmom
  • Рейтинг: 0
  • Просмотров: 920
  • Комментариев: 0
  • Создан: 13.03.2012 17:30

Комментарии (0)

Ваши предложения и пожелания пишите на pro@kosmom.ru

Теги

ajax axios backup bootstrap core framework eloquent excel home project html ios javascript keep-alive kpi laravel legacy mvp orm php rip scroll solid timestamp undefined vue vuetify watch безопасность биометрический паспорт ваша любаша для путешествий загран на 10 лет загран паспорт загранпаспорт нового образца зимние книги как заполнить анкеты кеширование книги на новый год логирование мцф недвижимость новогодние книги образец заполнения антеты паспорт для путешествий паспорт нового поколения печать продукт проектирование прокси разработка ремонт ремонт в апартаментах ремонт нежилого помещения самокат сдача сколько стоил ремонт апартаментов спорт стандарты таблица финансы хостинг цена ремонта что почитать зимой юзабилити

Случайный пост

21.11.2014 13:38
Распущенные волосы нон-стоп