Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 32 Ответов
  • 2931 Просмотров
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Есть сайт1, на нем есть компонент с фронт-вьюхой: сайт1.ру/index.php?option=com_mycomponent&view=myview
Есть сайт2, где в модуле выводится вьюха компонента с первого сайта с &tmpl=component
Как внутри myview можно определить URL сайт2?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
parent.document.URL
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Сори, не понял, чуточку подробнее можно?
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
а без js никак не получится?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Подозреваю что нет )
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Пичаль. Просто вьюха специально предназначена для вывода на другом сайте. Необходимо сначала получить URL сайт2, затем проверить реквест на наличие пары параметров, а уж потом решать, выводить контент вьюхи или нет. Как-либо реально?
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
С первого сайта делаем file_get_conten, и передаем url отдаем ссылку и через echo выводим фрейм
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Если честно, не понял.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
В общем-то, решил: в шаблоне вьюхи проверяю реквест на наличие параметров и если они существуют и tmpl == component, то выводим контент, иначе принудительный вызов 500.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
И все же про file_get_contens() хотелось бы подробнее, не понял из описания, как я могу применять это во вьюхе компонента
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
И все же про file_get_contens() хотелось бы подробнее, не понял из описания, как я могу применять это во вьюхе компонента
Можно передать разные параметры и считать их в вызываемой страничке, если в этом задача.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Про передать - это понятно, но мне не передать надо, а получить: я не знаю заранее адреса второго сайта, где во фрейм будет вызываться вьюха, а именно это и является конечной целью.
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Или я туплю или изначально ТЗ неправильно подал.
Как можно передать то, чего не знаешь?
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Блин, примерчик тогда что ли...
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
сайт2 - твой?
Если да, то что мешает модифицировать вызов странички с сайта1?
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Нет, сайт2 - не мой, и вообще не на J. Сайтов типа 2 может быть много. Показывать вьюху в их фреймах надо только разрешенным.
*

voland

  • Легенда
  • 11030
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Во, то, что надо! В форме прям в скрытое поле забабахал:
Код: php
<input type="hidden" name="part_url" value="<?php echo $_SERVER['HTTP_REFERER']; ?>">
Спс!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Споткнулся на следующем:
Во вьюхе форма, в view.html.php перед parent::display($tpl); есть код:
Код: php
      $d_server = parse_url($_SERVER['HTTP_REFERER']);
      $d_server = (string)$d_server['host'];
при первичном открытии страницы сайт2 с вьюхой во фрейме $d_server == 'сайт2'
при сабмите формы $d_server == 'сайт1', это как-либо побеждается?
« Последнее редактирование: 29.01.2015, 23:56:27 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Возможно, что это из-за того, что контроллер компонента, обрабатывая результат сабмита формы, возвращает JFactory::getURI();, полученный перед началом обработки?
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Вводная: партнерка с формой, форму показываем только разрешенным сайтам, которым выдан ключ доступа (адреса и ключи в базе хранятся). Та же самая форма показывается на сайте-родителе, но в другом виде (отличается верстка).

Чтобы победить гемор с обработкой формы, пришлось изобрести следующий велосипед:
view.html.php:
Код: 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);

шаблон вьюхи:
Код: php-brief
$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']; ?>" />
}

в контроллере, в таске, на который форма ссылается:
Код: php
    $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));

Это какому-либо рефакторингу поддается? Или совсем все плохо...
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
А как вообще правильно сделать защищенную форму-партнерку, чтобы можно было ее использовать только разрешенным?
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Вопрос решен. Решил обойтись вышеприведенным г-кодом.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
У меня единственное предложение. Называйте переменные наиболее понятным образом, если l_server - это локальный сервер, то лучше назвать его local_server. Сейчас много копаюсь с чужим ***кодом (к вашему не относится ни в коей мере), так тамглавная проблема осознать что переменная обозначает. Чем понятнее переменная названа,  тем легче с ней работать.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Как-то так
Код: php-brief
$d_server=parse_url($_SERVER['HTTP_REFERER'],PHP_URL_HOST);
$l_server=parse_url(JUri::base(),PHP_URL_HOST);
$input=JFactory::getApplication()->input;
$partner=$input->getString('server','');
if($d_server==$l_server && $partner==''){
$this->displaymode=0;
}elseif($partner!=''){
$db=JFactory::getDBO();
$keybase=$db->setQuery('select key from #__table where url='.$db->quote($partner))->loadResult();
$this->displaymode=($input->getString('tmpl','')=='component' && $input->getString('key','')==$keybase)? 1:2;
}

parent::display($tpl);
Код: php-brief
$uri=$_SERVER['HTTP_REFERER'];
$d_server=parse_url($this->input->getString('partner'),PHP_URL_HOST);
$l_server=parse_url(JUri::base(),PHP_URL_HOST);
$server='';  // это нужно - в запросе участвует
if ($d_server!=$l_server) {
$uri.='&server='.$d_server;
$server=$d_server;
} else {
parse_str((string)$p_server['query']);//если присуствует параметр server, он и так присвоится переменной $server
}
// тут обработка формы
$this->setRedirect(JRoute::_($uri));
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Код: php
$d_server=parse_url($_SERVER['HTTP_REFERER'],PHP_URL_HOST);
$l_server=parse_url(JUri::base(),PHP_URL_HOST);
С этим согласен.

Код: php
if($d_server==$l_server && $partner==''){
$this->displaymode=0;
}elseif($partner!=''){
$db=JFactory::getDBO();
$keybase=$db->setQuery('select key from #__table where url='.$db->quote($partner))->loadResult();
$this->displaymode=($input->getString('tmpl','')=='component' && $input->getString('key','')==$keybase)? 1:2;
}
С этим можно поспорить, т.к. 3 переменные по сути ничего не весят, их создание и чтение также времени не отнимают (0,0000000001 CP?) Зато понизилась читабельность кода.

Второй кусок:
Код: php
$uri=$_SERVER['HTTP_REFERER'];
$d_server=parse_url($this->input->getString('partner'),PHP_URL_HOST);
$l_server=parse_url(JUri::base(),PHP_URL_HOST);
$server='';  // это нужно - в запросе участвует
if ($d_server!=$l_server) {
$uri.='&server='.$d_server;
$server=$d_server;
} else {
parse_str((string)$p_server['query']); //если присуствует параметр server, он и так присвоится переменной $server
}
// тут обработка формы
$this->setRedirect(JRoute::_($uri));
$p_server откуда взялся? может, тогда уж сразу
Код: php
parse_str((string)parse_url($this->input->getString('partner'))['query']); ?

Поначалу parse_str((string)$p_server['query']); у меня возвращал null, тогда как через переменную работал нормально. Сейчас работает в любом случае, хз, что это было...
« Последнее редактирование: 03.02.2015, 00:04:44 от AlekVolsk »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
$p_server откуда взялся? может, тогда уж сразу
ну или так
Код: php-brief
parse_str(parse_url($this->input->getString('partner'),PHP_URL_QUERY));
Экономии мало, чисто эксперимент над кодом ^-^.
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Баг. В модуле выводится значение параметра из другого модуля

Автор fbr

Ответов: 10
Просмотров: 531
Последний ответ 18.04.2021, 21:34:10
от fbr
[Решено] Узнать какие плагины загружены

Автор lexx006

Ответов: 3
Просмотров: 1736
Последний ответ 20.07.2015, 09:55:54
от lexx006
Как узнать количество запросов к бд?

Автор indigo

Ответов: 1
Просмотров: 1468
Последний ответ 31.07.2013, 23:39:35
от smart
Как с помощью jquery или javascript узнать зашол ли некий обьект за скрол или нет?

Автор kontrast

Ответов: 0
Просмотров: 1279
Последний ответ 26.02.2013, 18:45:35
от kontrast