We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 21610
    • 360 Posts
    В php не силен. Можно его оптимизировать?
    <?php
    $page = $modx->documentObject['pagetitle'];
    $long = $modx->documentObject['longtitle'];
    
    if ( strlen($long) > 0) {
         $output = $long;
    } else {
         $output = $page;
    }
    return $output;
    ?>
      Разработка сайтов на MODx
      • 19164
      • 1,215 Posts
      Да вы, батенька, педант.

      <?php
      return strlen($modx->documentObject['longtitle']) > 0 ?   $modx->documentObject['longtitle'] : $modx->documentObject['pagetitle'];
      ?>
      


      В шаблоне можно реализовать через PHx

      [*longtitle:isnot=``:then=`[*longtitle*]`:else=`[*pagetitle*]`*]
        DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

        Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

        [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
        • 34162
        • 1 Posts
        ну я бы рекомендовал все-таки вариант с доступом по "указателям" к переменным $modx->documentObject[...] так еще быстрее. но "экономия на спичках получается" smiley
          • 21610
          • 360 Posts
          @Opossum Posya объясни пожалуйста то что ты написал smiley А то я нуб в php. Просто интересно.
            Разработка сайтов на MODx
            • 34162
            • 1 Posts
            оптимальнo будет если ваш код объединить
            $page = &$modx->documentObject['pagetitle'];
            $long = &$modx->documentObject['longtitle'];
            
            return strlen($long) > ? $long : $page; 
            
            
              • 21610
              • 360 Posts
              Quote from: Opossum at Dec 15, 2008, 03:43 PM

              оптимальнo будет если ваш код объединить
              $page = &$modx->documentObject['pagetitle'];
              $long = &$modx->documentObject['longtitle'];
              
              return strlen($long) > ? $long : $page; 
              
              

              Не заработало smiley
                Разработка сайтов на MODx
                • 785
                • 2,113 Posts
                Quote from: a.tuzhilkin at Dec 15, 2008, 04:21 PM

                Не заработало smiley
                Не работает, так как пропущен 0:
                return strlen($long) > 0 ? $long : $page;
                но этот вариант ничуть не лучше предыдущего, а даже немного хуже (не буду вдаваться в рассуждения почему – так показывает тест).

                Для сравнения эффективности можно поместить код в сниппет с названием Test и создать еще один сниппет (используется PHP5), вызывающий его в цикле много раз:
                <?php
                $time_start = microtime(true);
                for ($i=0; $i < 10000; $i++) {
                     $result=$modx->runSnippet("Test");
                }
                $time_end = microtime(true);
                $time = $time_end - $time_start;
                
                return "-> ".$time." sec <-\n";
                ?>

                Число показывает, сколько секунд потрачено на 10000 выполнений сниппета. Лучше несколько раз перезагрузить страницу, так как результат сильно зависит от текущей загрузки сервера. Как можно заметить, цифра настолько небольшая, что оптимизировать тестируемый сниппет не надо.
                А если все же хочется получить более быстрый вариант, то следует написать примерно так:
                <?php
                return $modx->documentObject['longtitle'] ? $modx->documentObject['longtitle'] : $modx->documentObject['pagetitle'];
                ?>

                Хотя лично мне больше нравится так:
                <?php
                if ( $modx->documentObject['longtitle'] ) return $modx->documentObject['longtitle'];
                else return $modx->documentObject['pagetitle'];
                ?>
                Скорость практически такая же, зато более наглядно.
                  Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                  Статьи о MODx, регулярно новые публикации