MODx и статичный файл принимают разные данные

Два практически идентичных запроса со страниц modx ресурс и статичной отправляют одинаковые данные, а получают разные. Запрос делаю при помощи file_get_contents(); Такое ощущение, что modx при отправке запроса игнорирует GET-параметры. Почему такое может быть?
modx-ресурс запрос-ответ

статичный файл запрос-ответ
Николай Филимонов
07 апреля 2014, 15:06
modx.pro
2 932
0

Комментарии: 19

Илья Уткин
07 апреля 2014, 19:47
+1
Очень мало данных непонятно ничего, но попробую включить экстрасенса и предположить.

Код, в котором вы вызываете file_get_contents находится в сниппете. Если это так, то попробуйье вызывать сниппет на странице некешируемым.

URL'ы в запросах разные.

На странице MODX есть дополнительные скрипты, которые затирают нужное вам значение.

Вы сами внутри file_get_contents не передаете $_GET-параметры.

В вызове формы указано method=«post» а получить вы пытаетесь $_GET.

Любое из этих предположений может оказатьмя верным, а может неверны все они. Если ничего не помогает, значит плохой из меня экстрасенс.
    Aртур Чикин
    07 апреля 2014, 20:29
    +1
      Николай Филимонов
      07 апреля 2014, 20:52
      0
      1) Пробовал оба способа вывода — кешируемый/некешируемый — результат одинаковый.
      2) URL понятное дело разный, get запрос то одинаковый
      3) Если они что-то и затирают, то не одно значение, а все. Я просто привел пример запроса, где только один параметр отличен от стандартных. Как мне заставить MODx не затирать их?
      4) Да, не передаю. Но ведь со статичным файлом та же история. Там тоже вызов формы идёт через file_get_contents, но ведь данные отправляются, и приходят верные, почему из сниппета не так? Кстати, передавать данные вручную пробовал — всё равно приходит то же самое (как будто get-запрос пустой). Похоже на мистику.
      5) На обоих скринах request method: GET
        Илья Уткин
        07 апреля 2014, 22:09
        0
        Я намекал на то, чтобы вы дали побольше подробностей. Покажите хотя бы строчку с file_get_contents.
          Николай Филимонов
          07 апреля 2014, 22:17
          0
          Прошу прощения, я совсем не умею объяснять.

          Оба файла для загрузки формы используют один и тот же класс Webclient, у которого есть функция получения формы:
          function getPage($type = "", $module = "find_tour") {
          	$base_url = "http://www.webclient.touradmin.ru/b/main/" . ALLSPO_ID . "/" . $module . "/";
          	error_reporting(0);
          	ini_set('default_socket_timeout', 29);
          	$url = $base_url.$type."?".$_SERVER['QUERY_STRING'];
          
          	$ctx = stream_context_create(array(
          			'http' => array(
          				'timeout' => 10
          				//здесь я пытался передавать GET параметры
          			)
          		)
          	);
          
          	$page = file_get_contents($url, false, $ctx);
          	if(!($page === false)  && strlen($page) > 0) {
          		$page = iconv("windows-1251", "utf-8", $page);
          		echo $page;
          	}
          	else {
          		echo "В настоящее время сервис недоступен";
          	}
          }
            Илья Уткин
            07 апреля 2014, 22:22
            0
            Попробуйте после этой строчки:
            $url = $base_url.$type."?".$_SERVER['QUERY_STRING'];
            вставить
            echo $url;
            какой получится url? Появилось подозрение, что как-то неверно обрабатывается $_SERVER['QUERY_STRING']
              Николай Филимонов
              07 апреля 2014, 22:48
              0
              К сожлаению, или к счастью, не знаю, но обрабатывает правильно. Сделал вывод.
                Илья Уткин
                07 апреля 2014, 23:11
                0
                Так url-то какой отобразился?
                  Николай Филимонов
                  07 апреля 2014, 23:19
                  0
                  MODx ресурс отображает
                  http://www.webclient.touradmin.ru/b/main/57454/find_tour/search?q=otzyivyi/&ct=1000&co=12&rs=20&df=11.04.14&dt=22.04.14&nf=7&nt=7&ti=no&re=2467
                  Статичный файл
                  http://www.webclient.touradmin.ru/b/main/57454/find_tour/search?ct=1000&co=12&rs=20&df=11.04.14&dt=22.04.14&nf=7&nt=7&ti=no&re=2467
                  Кстати, не заметил сразу, но MODx еще отображает параметр «q», но его удаление не дало результата.
      Alexei
      07 апреля 2014, 19:53
      0
      Похожая проблема

      это дупликат?
        Николай Филимонов
        07 апреля 2014, 20:52
        0
        Нет, я вроде поставил тому вопросу статус «решено», или нет?
        Это уже другая проблема.
          Alexei
          07 апреля 2014, 21:00
          0
          проясните тогда еще, почему первый линк ведет на отзывы isida.dssnc.ru/otzyivyi/ а второй на isida.dssnc.ru/travel_services/ «travel_search» так и должно быть?
            Николай Филимонов
            07 апреля 2014, 21:03
            0
            Какая разница, что куда ведет? У меня был пустой ресурс с отзывами, я для демонстрации решил вывод сниппета сделать в нем. travel_services/travel_search — ссылка получилась (сохранилась) из-за переноса модуля поиска со старого сайта на новый.

            Это было так важно?
              Alexei
              07 апреля 2014, 21:05
              0
              я там ошибся, забейте! вы уже выше ответили на мой вопрос
        Alexei
        07 апреля 2014, 23:32
        0
        api.jquery.com/jQuery.ajax/#jQuery-ajax-settings

        попробуйте еще сделать ajax запрос с отключеным cache
          Илья Уткин
          08 апреля 2014, 09:00
          0
          Что-то непонятное происходит. Попробуйте обратиться к хостеру — такое чувство, что они на своей стороне некоторые операции кешируют. Ну и сниппет ваш должен быть некешируемым (с восклицательным знаком)…
            Илья Уткин
            08 апреля 2014, 09:27
            0
            Хотя статичный-то файл работает… Попробуйте убрать все параметры кроме $url у file_get_contents.

            Если не поможет, я не знаю что делать… Тогда распишите все что есть — шаблон страницы, все чанки, весь код сниппета, весь код класса — выложите куда-нибудь на pastebin.com
              Николай Филимонов
              08 апреля 2014, 12:44
              0
              Вот и я не знаю что делать, не помогло(

              Проблема в том, что шаблон чистый — в нем только вызов сниппета:
              [[!tourFilter? &module=`search`]]
              Код сниппета:
              <?php
              include_once($_SERVER["DOCUMENT_ROOT"] . '/tours/wc_lib.php');
              $objWC = new Webclient;
              $objWC->getPage($module);
              Статичный файл:
              <? include($_SERVER["DOCUMENT_ROOT"]."/tours/search.php"); ?>
              Код файла search.php идентичен коду сниппета, исключая факт, что в сниппет я передаю параметр — какой модуль поиска подключать:
              <?php
              include_once($_SERVER["DOCUMENT_ROOT"] . '/tours/wc_lib.php');
              $objWC = new Webclient;
              $objWC->getPage('search');
              Думал проблема в различии кодировок файла MODx и статичного (мало ли & заменяется на & amp;) но что-то это тоже не дало результата.
            Николай Филимонов
            08 апреля 2014, 14:23
            0
            А ларчик-то просто открывался(
            В итоге да, проблема решилась заменой "& amp;" на "&". Видимо, MODx, сам их заменяет…
            $page = file_get_contents(preg_replace('#& amp;#si', '&', $url));
            Спасибо всем, кто пытался помочь!
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              19