所以:
我非常喜欢在ruby项目中使用Haml,并在PHP中测试它。我一直在尝试PhamlP,因为它看起来并没有死,而phpHaml和pHaml在近4年内还没有更新。
现在,我遇到的问题是PhamlP解析的php代码在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'
未被执行,它以某种方式作为注释传递给浏览器。
你怎么解决这个问题?
答案 0 :(得分:3)
不知道,但明显的解决方法是将echo $page
替换为:
eval("?".">".$page); // oh nooooes, eval is evil!!!!!
我认为->parse
只进行转换,输出通常应存储在新的.php输出/模板/缓存文件中。
答案 1 :(得分:1)
重点并不在于评估 - 因为它是准备PHP代码,模板和最小化php / html标记,同时保持为D.R.Y.尽可能(这是我的反正)。
答案 2 :(得分:1)
我发现让PHamlP将页面呈现为PHP文件,然后包含该文件最简单。这个例子假设你有一个目录&#39; cache&#39;那个被编织到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文件。
答案 3 :(得分:0)
很长而且几乎没有相关的答案,但这就是我所做的。这是受上面的devers回答的启发
我使用guard ruby gem和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
个文件