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

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

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

 

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

Самое простое, что приходит в голову – 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
  • Просмотров: 474
  • Комментариев: 0
  • Создан: 13.03.2012 17:30

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