We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 18791
    • 5 Posts
    итак:
    есть чанк с кодом
    [[bookmark? &id=`[*id*]`]]

    который вызывает сниппет bookmark и в параметре id передает номер документа.
    Но параметр передается в невероятном виде, который никакими силами php не удается сконвертировать в целочисленный тип

    Если же в чанк вместо [*id*] подставить целое число, например
    [[bookmark? &id=`101`]]

    то все работает так, как и должно быть

    экспериментировал с кавычками, пробовал разные способы преобразования из string в integer - ничего не помогает
      • 785
      • 2,113 Posts
      А зачем вообще в сниппет передавать номер документа, если его там легко можно узнать с помощью $modx->documentIdentifier.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 1611
        • 591 Posts
        А что именно попадает в сниппет? Можете просто распечатать это значение?
          • 18791
          • 5 Posts
          действительно, чтобы получить просто номер документа, достаточно $modx->documentIdentifier
          так и сделаю

          но вопрос не решен.
          итак, в документе 101 есть чанк с кодом
          [[bookmark? &id=`[*id*]`]]

          результаты выполнения сниппета:
          echo($id); //101
          echo(gettype($id)); //string
          $id=5+$id;
          echo($id);//5
            • 785
            • 2,113 Posts
            Если вызвать сниппет некэшированным или перенести вызов в шаблон, все будет нормально.
            А так все связано с особенностями парсера MODx. При первом проходе он находит все [* *] в шаблоне, подставляет, а потом выполняет сниппеты. То есть он находит в шаблоне [*content*], подставляет контент, а потом выполняет сниппет [[bookmark? &id=`[*id*]`]], в результате переменной $id передается не 5, а строка [*id*], которая и выводится в сниппете. При следующем проходе [*id*] меняется на 5, и на странице мы видим 5. Если же вызывать некэшированный сниппет, он будет выполнен после всех проходов парсера, и в параметры будет передано значение 5. Точно так же, если вызов сниппета стоит непосредственно в шаблоне, все будет обработано при первом проходе.
              Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
              Статьи о MODx, регулярно новые публикации
              • 18791
              • 5 Posts
              спасибо, очень все грамотно и понятно описали