Правильный способ ссылки на представления (для решения многодоменной проблемы)
У меня есть один сайт (та же кодовая база, та же база данных), который использует два разных домена для отображения двух разных тем, в зависимости от контента. (Это достигается с помощью модуля Доступа к домену .)
Мне нужно иметь возможность ссылаться с одного домена на представление в другом домене без ручной вставки абсолютного URL-адреса, но я не уверен, как (или даже если это возможно).*
Я могу использовать l()
для связи с узлами без каких-либо проблем. Например, если я на first-domain.com и я хочу перейти по ссылке на second-domain.com/news-story , я бы сделал следующее:
<?php print l('News Story', 'node/2213'); ?>
Я точно не знаю, как это работает, но он понимает, что новость недоступна в первом домене, и автоматически создает абсолютную ссылку на второй домен.
Создать ссылку на представление, похоже, не так просто. Я убедился, что ограничения доступа представления установлены на Домены (и что только один домен выбран), но функция l()
, похоже, не ищет это.
Например, если я на first-domain.com и хотите перейти по ссылке на список всех новостей (который создается представлением) на second-domain.com , делая это:
<?php print l('Latest News Stories', 'news-stories'); ?>
Приводит к такой ссылке:
first-domain.com/news-stories
Когда я действительно хочу: second-domain.com/news-stories
Есть ли какой-нибудь способ решить эту проблему? Даже если бы я мог найти оба домена, которые были установлены через домен Модуль доступа будет работать, но я тоже не знаю, как это сделать. (Я также думал об использовании перенаправления пути, что лучше, чем ничего, но не совсем то, что я ищу.)
* Очевидно, что можно указать абсолютный URL-адрес, но это далеко не идеально, так как сайт в настоящее время разрабатывается локально и в конечном итоге будет перенесен на промежуточный сайт, а затем снова переведен в производство, как только будет готов. Не забывать каждый раз менять абсолютные ссылки было бы раздражающе лучший.
1 answers
Поскольку вы, очевидно, владеете PHP, лучший способ, который я могу придумать, - это написать пользовательскую оболочку для l()
, что-то вроде:
function ml($text, $path, int $domain = NULL, array $options = array()) {
switch ($domain) {
case 1:
return l($text, 'http://first-domain.com/'.$path, $options);
break;
case 2:
return l($text, 'http://second-domain.com/'.$path, $options);
break;
default:
return l($text, $path, $options);
break;
}
}
Таким образом, абсолютные домены должны изменяться только в этом одном центральном месте с каждым промежуточным шагом (домены могут даже храниться в settings.php).