Quote from: a.tuzhilkin at Dec 15, 2008, 04:21 PM
Не заработало 
Не работает, так как пропущен 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'];
?>
Скорость практически такая же, зато более наглядно.