Вводная: партнерка с формой, форму показываем только разрешенным сайтам, которым выдан ключ доступа (адреса и ключи в базе хранятся). Та же самая форма показывается на сайте-родителе, но в другом виде (отличается верстка).
Чтобы победить гемор с обработкой формы, пришлось изобрести следующий велосипед:
view.html.php:
$d_server = parse_url($_SERVER['HTTP_REFERER']);
$d_server = (string)$d_server['host'];
$l_server = parse_url(JUri::base());
$l_server = (string)$l_server['host'];
$input = JFactory::getApplication()->input;
$partner = $input->getString('server','');
$is_base = ($d_server == $l_server) && ($partner == '');
$this->displaymode = 0;
if (!$is_base) {
if ($partner != '')
$d_server = $partner;
$tmpl = $input->getString('tmpl','');
$key = $input->getString('key','');
$db = JFactory::getDBO();
$keybase = $db->setQuery('select key from #__table where url = '.$db->quote($d_server))->loadResult();
$this->displaymode = ($tmpl == 'component' && $key == $keybase)? 1 : 2;
}
parent::display($tpl);
шаблон вьюхи:
$ukpb = ($this->displaymode == 0)? ' uk-panel uk-panel-box' : ' rqformpart';
if ($this->displaymode == 2) {
JError::raiseError(500, 'Restrict access');
} else {
в контроллере, в таске, на который форма ссылается:
$uri = $_SERVER['HTTP_REFERER'];
$p_server = parse_url($this->input->getString('partner'));
$d_server = (string)$p_server['host'];
$l_server = parse_url(JUri::base());
$l_server = (string)$l_server['host'];
$server = '';
Это какому-либо рефакторингу поддается? Или совсем все плохо...