Вводная: партнерка с формой, форму показываем только разрешенным сайтам, которым выдан ключ доступа (адреса и ключи в базе хранятся). Та же самая форма показывается на сайте-родителе, но в другом виде (отличается верстка).
Чтобы победить гемор с обработкой формы, пришлось изобрести следующий велосипед:
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 {
// тут вывод формы
// в форме присутствует поле: <input type="hidden" name="partner" value="<?php echo $_SERVER['HTTP_REFERER']; ?>" />
}
в контроллере, в таске, на который форма ссылается:
$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 = ''; // это нужно - в запросе участвует
if ($d_server != $l_server) {
$uri .= '&server='.$d_server;
$server = $d_server;
} else {
parse_str((string)$p_server['query'], $d_params);
$server = (string)$d_params['server'];
}
// тут обработка формы
$this->setRedirect(JRoute::_($uri));
Это какому-либо рефакторингу поддается? Или совсем все плохо...