Лучший способ реализовать условную в системе шаблонов PHP? - PullRequest
0 голосов
/ 29 марта 2009

Я создаю очень простую систему шаблонов PHP для пользовательской системы CMS / news. Каждая статья имеет вступление и полное содержание (если применимо). Я хочу иметь условную форму:

{continue}click to continue{/continue}

Так что, если возможно продолжить, отобразится текст «нажмите, чтобы продолжить», в противном случае не отображайте всю эту строку. Пока что это работает так: если мы можем продолжить, удалите теги {continue}; в противном случае удалите все это.

В настоящее время я использую preg_match_all для сопоставления строки во втором случае. Какова лучшая функция для удаления сопоставленного текста? Простой str_replace или что-то еще?

Или есть лучший способ реализовать это в целом?

Ответы [ 3 ]

5 голосов
/ 29 марта 2009

Почему бы не использовать preg_replace_callback ?

В частности:

preg_replace_callback('!\{continue\}(.*)\{/continue\}!Us', 'replace_continue', $html);

function replace_continue($matches) {
  if (/* can continue */) {
    return $matches[1];
  } else {
    return '';
  }
}

Я считаю preg_replace_callback невероятно полезным.

2 голосов
/ 29 марта 2009

Извините, я знаю, что люди высмеивают такой ответ, но просто используйте Smarty Это просто, стабильно, умно, бесплатно, мало и дешево. Потратьте час, изучая, как им пользоваться, и вы никогда не оглядываетесь назад.

Перейти на www.smarty.net

1 голос
/ 29 марта 2009

Для систем шаблонов PHP правильный способ - проанализировать шаблон (используя конечный автомат или, по крайней мере, preg_split), сгенерировать из него код PHP, а затем использовать только этот код PHP. Тогда вы сможете использовать обычный if для условных выражений.

Регулярные выражения не очень хорошая идея для реализации шаблонов. Это будет PITA для обработки вложенности и обеспечения правильного синтаксиса за пределами базовых случаев. Производительность будет очень плохой (вы должны быть осторожны, чтобы не создавать выражения для обратного отслеживания, и даже в этом случае вам придется несколько раз сканировать и копировать КБ шаблонов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...