Правильный способ ссылки на представления (для решения многодоменной проблемы)


У меня есть один сайт (та же кодовая база, та же база данных), который использует два разных домена для отображения двух разных тем, в зависимости от контента. (Это достигается с помощью модуля Доступа к домену .)

Мне нужно иметь возможность ссылаться с одного домена на представление в другом домене без ручной вставки абсолютного 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-адрес, но это далеко не идеально, так как сайт в настоящее время разрабатывается локально и в конечном итоге будет перенесен на промежуточный сайт, а затем снова переведен в производство, как только будет готов. Не забывать каждый раз менять абсолютные ссылки было бы раздражающе лучший.

Author: jelina, 2012-04-25

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).

 1
Author: Paul, 2012-04-27 11:33:34