PhamlP отображает PHP как комментарии, код не выполняется - PullRequest
2 голосов
/ 16 декабря 2010

Итак:

Мне очень нравится использовать Haml в проектах ruby, и я тестировал его на PHP. Я пытался PhamlP , потому что, похоже, он не умер, тогда как phpHaml и pHaml не обновлялись почти 4 года.

Теперь проблема в том, что php-код, который анализирует PhamlP, отображается в виде комментариев в HTML, а не выполняется. Вот тестовый файл, index.php:

include_once('haml/HamlParser.php');
$haml = new HamlParser(array('ugly'=>'false'));
$page = $haml->parse('test.haml');
echo $page;

Вот файл test.haml:

!!!
- $foo = 'bar'
%h1 Foo this
.test= $foo

и вот вывод, который я получаю в браузере при просмотре источника:

<?php
require_once '/Users/Andrew/Sites/eighty-b/_app/haml/HamlHelpers.php';
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php $foo = 'bar'; ?><h1>Foo this</h1><div class="bar">This better fooacross multiple lines butstill in the bar div!</div><div class="test"><?php echo $foo; ?></div>

Так, например, строка - $foo = 'bar' не выполняется, она как-то передается браузеру в качестве комментария.

Как, черт возьми, ты это исправляешь?

Ответы [ 4 ]

3 голосов
/ 16 декабря 2010

Не знаю, но очевидный обходной путь - заменить echo $page на:

 eval("?".">".$page);    // oh nooooes, eval is evil!!!!!

Я бы предположил, что ->parse выполняет только преобразование, а выходные данные обычно сохраняются в новом файле .php output / template / cache.

1 голос
/ 11 июня 2012

Мне проще всего сделать так, чтобы PHamlP отобразил страницу в файл PHP, а затем включил файл. В этом примере предполагается, что у вас есть каталог «кеш», который синхронизирован с 755:

include_once('haml/HamlParser.php');
$haml = new HamlParser(array('ugly'=>'false'));
$page = $haml->parse('test.haml', 'cache');
require_once 'cache/test.php';

Таким образом, весь код PHP выполняется, и ваша страница отображается правильно. Файл test.php будет создаваться при каждой загрузке страницы, поэтому вы захотите удалить код для анализа файла Haml в производственной среде.

1 голос
/ 04 января 2011

Суть не в том, чтобы ее оценивать, а в том, чтобы подготовить код PHP, шаблоны и минимизировать разметку php / html, сохраняя при этом как можно более СУХОЙ (это мой выбор в любом случае).

0 голосов
/ 09 марта 2014

Длинный и едва связанный ответ, но это то, что я делаю. Это было вдохновлено ответом devers выше

Я использую гем ruby ​​guard и phamlp для автоматического преобразования моих файлов .haml в файлы .php

Мой сторожевой файл

require 'guard/plugin'
module ::Guard
  class Phamlp < ::Guard::Plugin
    def run_all
    end

    def run_on_changes(paths)
        paths.each do |path|
            puts path
            puts File.dirname path
            system "php hamlconverter.php #{path} #{File.dirname path}"
        end
    end
  end
end

guard :phamlp do
  watch(/^.+(\.haml)$/)
end

и haml converter.php

<?php require_once 'phamlp/haml/HamlParser.php'; 
$haml = new HamlParser(array('style'=>'nested', 'ugly'=>'compressed', 'debug'=>true));
$haml->parse($argv[1], $argv[2]); ?>

Если вы сейчас запустите guard, он отследит ваши .haml файлы и, если они изменятся, преобразует их в .php файлы

...