pdoSitemap кеширование

Приветствую!

Cитуация такая, создан ресурс sitemap.xml, некешируемый, в нем вызов pdoSitemap некешируемый, т.е. при каждом запросе должен строить xml файл
но есть проблема:
Есть домен site.com, поддомен poddomen.site.com

— при заходе site.com/sitemap.xml заходим все ок в ссылках

— заходим poddomen.site.com/sitemap.xml, там ссылки, а точнее домен в ссылках site.com, хотя должен быть poddomen.site.com

После очистка кеша зайдя на poddomen.site.com/sitemap.xml все ок, но при заходе на site.com/sitemap.xml домен в ссылках poddomen.site.com

Пока нашел решение при вызове pdoSitemap
'cacheTime' => 1

Подскажите пожалуйста почему такая ситуация, вроде все некешируемо, но он все равно кеширует?
Константин Ильин
02 августа 2022, 14:02
modx.pro
818
0

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

Роман
02 августа 2022, 15:08
0
Шаблон может кэшироваться, Можете посмотреть в папке core/cache/, там увидите, где у вас происходит кэш.
    Константин Ильин
    02 августа 2022, 18:47
    0
    disk.yandex.ru/i/wIiFfWqjK78AxA

    Есть кешовый файл
    disk.yandex.ru/i/cFgFjjmhf3BYFQ
    Он должен быть если я вызываю некешированным?

    С кеширование мало знаком так что мои догадки такие себе, но будто в сниппете не учтено некешироваться.

    Такая ситуация и на других сайтах.
    Так же пробовал в контенте Некешируемого Ресурса вызывать с Пустым шаблоном, все равно тянет из кеша
    Максим
    02 августа 2022, 21:57
    0
    Вообще у поисковых систем есть понятие «Основное зеркало». Я бы отталкивался от него. Соответственно, если поддомен — дубль сайта, то я бы сделал 302 редирект на основной домен. Если поддомен содержит уникальную информацию, то я бы реализовывал либо контекстами, либо самописным функционалом…
    А вообще, когда-то давно реализовывал самописным функционалом города. Вот код его плагина:
    <?php
    /** @var modX $modx */
    switch ($modx->event->name) {
        case 'OnHandleRequest':
            $host = $_SERVER['HTTP_HOST'];
    
            /** @var city $cityService */
            $cityService = $modx->getService('city', 'city', MODX_CORE_PATH . 'components/city/model/', array());
            if (!$cityService) {$modx->log(xPDO::LOG_LEVEL_ERROR, 'Could not load city class!');return;}
    
            $city = $cityService->getCity($host);
            if (empty($city)) {return;}
    
            $server_protocol = $modx->getOption('server_protocol', array(), 'http');
    
            if (!$city['active']) {$modx->sendErrorPage();return;}
    
            foreach ($city as $key => $value) {
                if (in_array($key, $cityService::EXCLUDE_FIELDS) || empty($value)) {continue;}
                else if ($key == 'key') {
                    $cityService->setSettings('http_host', $value);
                    $cityService->setSettings('site_url', $server_protocol . '://' . $value . '/');
                }
                else if ($key == 'name_site') {
                    $cityService->setSettings('site_name', $value);
                }
                else if ($key == 'name') {
                    $cityService->setSettings('city', $value);
                }
                else {
                    $cityService->setSettings($key, $value);
                }
            }
            break;
    }
    Отсюда вас могут интересовать строки:
    $cityService->setSettings('http_host', $value);
    $cityService->setSettings('site_url', $server_protocol . '://' . $value . '/');
    Попробуйте на этом же событии установить эти системные настройки в соответствии с доменами в запросе… У меня тогда такое сработало и работает до сих пор!
      Константин Ильин
      03 августа 2022, 10:01
      0
      Я не совсем про реализацию городов, города я делал по разному и контексты и ресурсы и migx.

      Тут проблема(или мое непонимание) кеширования при вызове pdoSitemap.
      даже если в шаблоне для теста указать напрямую {$.server.HTTP_HOST}, результат будет такой же
      {'!pdoSitemap' | snippet : [
          'parents' => '0'
          'tpl' => '@INLINE <url>
          <loc>{$.server.HTTP_HOST}[[+url]]</loc>
          <lastmod>[[+date]]</lastmod>
          <changefreq>[[+update]]</changefreq>
          <priority>[[+priority]]</priority>
          </url>'
      ]}
        Максим
        09 августа 2022, 10:27
        +1
        Ну причем тут города? Я привел для примера и объяснил, что бы у вас было понимание, что делает данный плагин… Что бы вы могли увидеть схожесть ситуаций и понять, что я так же мог столкнуться с такой проблемой… Но не столкнулся…
        Предположил, что ModX мог отдавать старый кеш шаблона\страницы так как в системных настройках видит соответствующий домен… Поэтому и предложил до начала обработки кеша изменить домен на корректный… Я давно не лазил в модуль кеширования и не помню что и как там реализовано…
        Просто еще раз напомню, что с такой реализацией у меня и контент в полях корректный и роботсы и сайтмапы…
          Константин Ильин
          09 августа 2022, 11:37
          0
          Понял Вас.
          При смене http_host и site_url, pdoSitemap должен среагировать и сформировать новый sitemap.
      Константин Ильин
      09 августа 2022, 09:22
      0
      @Сергей Шлоков, не проясните ситуацию?
        Сергей Шлоков
        09 августа 2022, 17:10
        +2
        В параметрах сниппета отключи кэш
        {'!pdoSitemap' | snippet : [
           ...
          'cache' => false
        ]}
          Константин Ильин
          09 августа 2022, 17:31
          0
          Спасибо Сергей! работает

          Вот только в документации нет такого параметра в разделе «Общие параметры» и у самого pdoSitemap, а вот заглянул сейчас в pdoMenu — там есть.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9