We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 30247
    • 74 Posts
    Есть сниппет который дергает базу данных.
    $modx->getDocumentChildrenTVarOutput($startid)

    $startid передается в вызове сниппета:
    [[mysnip?&startid=`[*id*]`]]

    И нифига не работает....
    Для проверки наковырял в снипете (сниппет взыается из документа 65):
    $output="<!--Start out startid=$startid-->";
    ($startid=='65')?( $output.="<!--startid=65-->"):( $output.="<!--startid!=65-->");
    ($startid==='65')?( $output.="<!--startid==65-->"):( $output.="<!--startid!==65-->");


    На выходе получил:
    <!--Start out startid=65-->
    <!--startid!=65-->
    <!--startid!==65-->


    Я еще могу понять, что 65!==65 при разных типах, но почему 65!=65 я понять не могу....
    Причем на другом сайте этот код работает исправно (с условием что там вызов сниппета из шаблона, а сейчас из документа)...

    А ведь в учёбнике по пхп написано:
    PHP довольно терпимо относится к тому, что строки неявно преобразуются в числа, и наоборот.
    $a=10;
    $b="10";
    if($a==$b) echo "a и b равны"; // Выводит "a и b равны"

    Никому нельзя доверять... sad

    *Раньше тут было написано что проблема решилась сменой типа $startid - ошибочка вышла*

    Работает только при вызове:
    [[mysnip?&startid=`65`]]

    Почему?
      • 29487
      • 385 Posts
      попробуйте так: [!mysnip?&startid=`[*id*]`!]
        • 30247
        • 74 Posts
        Так работает... Абалдеть...
        Причем var_dump при кэшируемом вызове говорит:
        string(6) "65"
        Операции сравнения не прокатывают.

        А при некэшируемом:
        string(2) "65"
        Сравнения работают, $modx->getDocumentChildrenTVarOutput($startid) работает...

        Что означает цифра скобках? не нашел в доке... Но проблема вероятнее всего в ней.
        Опять же непонятно почему при разных вызовах передаются разные значения одного и того же плэйсхолдера? (версия 0.9.6.3)

        ADD:
        Вроде как цифра в скобках отвечает за кол-во символов в строке. Что за лишние 4 симовла (которые никуда не выводятся)? Это фича или баг modx? (судя по тому что из шаблона снипет вызывается нормально это баг.)

        ADD:
        Разобрался почему, но не понял как избавится.
        Прошелся по startid ord’ом
        И выяснил что в сниппет передалось [*id*] и когда я для отладки вывоил содержимое переменной плэйсходер заменялся на "65" и сводил меня с ума.

        Вопрос: Почему плэйсхолдер обрабатывается при некэшируемом вызове и необраатывается при кэшируемом?
          • 32725
          • 107 Posts
          А зачем передавать [*id*] в сниппет, если можно в сниппете написать $id = $modx->documentIdentifier; ?
            My portfolio
            Самурай без меча подобен самураю с мечом, только без меча.
          • Quote from: Wuron at Oct 18, 2009, 06:38 PM

            А зачем передавать [*id*] в сниппет, если можно в сниппете написать $id = $modx->documentIdentifier; ?
            Ну не любит у нас народ простых решений smiley
            А на самом деле думаю это из-за того, что не привыкли пользоваться API MODx и документацией.
              Разработка сайтов и программных модулей на MODX.
              Опыт работы на MODx с 2005 года. Высокое качество.
              Компания Baltic Design Colors: http://www.bdcolors.ru.
              • 30247
              • 74 Posts
              Привыкли-привыкли....
              Просто изначально сниппет делался с расчетом на передачу stardid при вызове. И не во всех случаях он должен получать именно текущий id.
              Можно и руками вписать туда
              [[mysnip?&startid=`65`]]
              (так пока и оставил, заказчик вроде понял, что к чему, и не возражает)


              Вопрос в том почему одна и та же конструкция ведет себя по-разному?
              А если б не использовал API, я бы не спрашивал про свой сниппет, а спрашивал про Ditto