We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 53967
    • 9 Posts
    Здравствуйте!
    Мне нужно добавлять пунктам меню css-класс разным страницам динамически (в зависимости от даты). Условий много, поэтому я решил сделать для этого свой сниппет «dismenu», что бы там в php все это дело просчитывать. Создал tv (числовое поле) `day-num` для страниц и пытаюсь получить значение в сниппете для переменной $daynum:
    [[pdoMenu? &parents=`219`
    &level=`1`
    &includeTVs=`day-num`
    &rowClass=`[[dismenu? &daynum=`[[+day-num]]`]]`
    ]]
    Проблема в том, что в сниппете переменная $daynum выводится как текст (т.е. я не могу ее ни сравнить с другим числом, ни сделать арифметические действия). Все мои попытки преобразовать ее в число в сниппете с помощью функций php тоже не дают результата (превращается тупо в 0).
    Подскажите, что я делаю не так? [ed. note: igorsrt last edited this post 5 years, 5 months ago.]
      • 44064
      • 185 Posts
      Quote from: igorsrt at Nov 07, 2018, 05:48 PM
      Здравствуйте!
      Мне нужно добавлять пунктам меню css-класс разным страницам динамически (в зависимости от даты). Условий много, поэтому я решил сделать для этого свой сниппет «dismenu», что бы там в php все это дело просчитывать. Создал tv (числовое поле) `day-num` для страниц и пытаюсь получить значение в сниппете для переменной $daynum:
      [[pdoMenu? &parents=`219`
      &level=`1`
      &includeTVs=`day-num`
      &rowClass=`[[dismenu? &daynum=`[[+day-num]]`]]`
      ]]
      Проблема в том, что в сниппете переменная $daynum выводится как текст (т.е. я не могу ее ни сравнить с другим числом, ни сделать арифметические действия). Все мои попытки преобразовать ее в число в сниппете с помощью функций php тоже не дают результата (превращается тупо в 0).
      Подскажите, что я делаю не так?

      Сниппет в студию, это прежде всего!
        Anton Tarasov
        MODX Developer

        Email: [email protected]
        Web: antontarasov.com
        • 53967
        • 9 Posts
        Сниппет в студию, это прежде всего!
        да сниппета-то, как такового пока и нет, только наметки..
        <?php
        $today = date("w");
        $day = $daynum;
        if ($today > $day)
        return "menu_disabled";

        Проблема в том, что значение переменной, переданной из pdomenu указанным мной способом ( [[dismenu? &daynum=`[[+day-num]]`]] ) PHP отказывается понимать как число (
          • 44064
          • 185 Posts
          Quote from: igorsrt at Nov 10, 2018, 11:11 AM
          Сниппет в студию, это прежде всего!
          да сниппета-то, как такового пока и нет, только наметки..
          <!--?php
          $today = date("w");
          $day = $daynum;
          if ($today --> $day)
          return "menu_disabled";

          Проблема в том, что значение переменной, переданной из pdomenu указанным мной способом ( [[dismenu? &daynum=`[[+day-num]]`]] ) PHP отказывается понимать как число (

          На всякий случай, в сниппете добавьте перед условием и скажите, что появится в логе:
          $modx->log(xPDO::LOG_LEVEL_ERROR, "Daynum value is = " . var_dump($daynum));

          И что, приведение типов не помогает?
          http://php.net/manual/ru/language.types.type-juggling.php
            Anton Tarasov
            MODX Developer

            Email: [email protected]
            Web: antontarasov.com
            • 53967
            • 9 Posts

            На всякий случай, в сниппете добавьте перед условием и скажите, что появится в логе:
            $modx->log(xPDO::LOG_LEVEL_ERROR, "Daynum value is = " . var_dump($daynum));

            И что, приведение типов не помогает?
            появилось string(12) " "
            ...вские там (int), intval() не помогают... у меня есть смутное предположение что переменная передаётся в виде строки с модоксовскими кавычками `` (но это только предположение)
              • 53967
              • 9 Posts
              нет, я понял - в php попадает сама строка [[+daynum]]... но легче от этого не становится )
                • 44064
                • 185 Posts
                Quote from: igorsrt at Nov 11, 2018, 07:38 AM
                нет, я понял - в php попадает сама строка [[+daynum]]... но легче от этого не становится )
                Теперь я не понял. Сама строчка - исходная? или обрамленная чем-то?) А приведения -в итоге-то что-нибудь дают, вот вы пишете -не помогают - каков результат?
                  Anton Tarasov
                  MODX Developer

                  Email: [email protected]
                  Web: antontarasov.com