我不想使用MVC框架。我不想使用模板引擎。我是几个男人开店所在地的所有帽子,没有图形艺术家。我们全力以赴(所有层次)。我不希望代码与演示文稿混合在一起,就像我使用Classic ASP一样。
但是,我不知道我的代码在服务器端和实际演示之间看起来是什么样子。
如果我没有在我的服务器端代码中发布HTML,那么它如何进入HTML页面以便我可以执行<span><?= $myvar ?></span>
之类的操作?并将循环放在html页面中?
感谢您的任何建议。
答案 0 :(得分:5)
对于使用循环和所有,我使用控制结构的替代语法。
一个例子:
<div id="messages"<?php if(!(isset($messages) && count($messages))): ?> class="hidden"<?php endif; ?>>
<?php if(isset($messages)): ?>
<?php foreach($messages as $message): ?>
<div class="message"><?php echo $message; ?></div>
<?php endforeach; ?>
<?php endif; ?>
</div>
有关详细信息,请参阅:http://php.net/manual/en/control-structures.alternative-syntax.php
哦,我也使用了一个半MVC结构,我有一个处理模板(视图)的类,基本上它只是一个我创建实例的类,传递一组变量,然后渲染模板实例被破坏了。我在该类中有一个变量数组,然后使用extract来传递include中的所有变量,如下所示:
extract($this->variables, EXTR_SKIP);
include($this->file);
编辑:这是Smarty中的相同例子:
<div id="messages"{if isset($messages) && !count($messages)} class="hidden"{/if}>
{if isset($messages)}
{foreach from=$messages item=message}
<div class="message">{$message}</div>
{/foreach}
{/if}
</div>
答案 1 :(得分:2)
简单的PHP项目通常会就地生成完整的HTML而不是填充模板,因此您只需在PHP代码中echo
。
这会变得混乱,因此您最终会为任何中等复杂的网站编写某种模板系统。
一种可能的替代方法是将您的页面作为完全静态的HTML / CSS提供,并使用AJAX动态获取实际内容(JSON将是一种很好的传输格式,它是JS的原生,可以很容易地从PHP生成)。这可以让你摆脱PHP代码中散布的所有HTML。这是否是可行的替代方案取决于具体情况。
答案 2 :(得分:1)
<span><?= $myvar ?></span>
有效。
循环看起来像:
<html>
<body>
<?php
for ($i=1; $i<=5; $i++)
{
echo "The number is " . $i . "<br />";
}
?>
</body>
</html>
取自here。
的示例答案 3 :(得分:0)
我真的建议您使用php Template Inheritance系统。 (不要让它吓到你,它只是一个文件。)这是一组简单的函数,可以帮助您构建可扩展的PHP视图,而不会出现手动包含的问题和限制。
它仍然是纯PHP,所以你不需要学习一些奇怪的模板语言。它可能看起来不多,但一旦你开始使用它就会非常强大。
答案 4 :(得分:0)
可以肯定的是,你可以自己完成所有这些 - 但你想要的仍然是MVC模式,或关注点的分离(“我不希望代码与演示文稿混合”)。或者至少MV,对于非常简单的应用程序(虽然它仍然很脏,让模型直接影响视图)。
实现此目的的最简单方法是首先收集并处理所有数据,然后再打印它们。直接暴露给网络的php文件中不允许使用复杂的代码。
<?php
require('model.inc');
process_capuchin_monkey_order_form();
?>
...
<h1>Thank you for your order of <?php echo $order->num_monkeys; ?> monkeys.</h1>
...
答案 5 :(得分:0)
通常您只想确保HTML中的PHP尽可能少。这意味着事先进行所有数据处理,并简单地以一种方式将一组变量传递给包含HTML的方法或函数。
任何与PHP混合的HTML都可以被视为模板。这是一个简化的例子:
// view class
class View {
public function render($html_template) {
include('view_path/' . $html_template . '.php');
}
}
// html template file 'view_path/main.php'
<html>
<body>
<h1><?= $this->title ?></h1>
</body>
</html>
// usage
$view = new View();
$view->title = 'Some Title';
$view->render('main');
答案 6 :(得分:0)
无论你做什么,都应该使用类似MVC的关注点分离。这意味着:
每个php模板语言的核心是在函数中使用extract()
和include
:
function render_template($___filename, $___data) {
extract($___data, EXTR_SKIP);
include $__filename;
}
你可以通过类接口(视图对象)或输出缓冲来实现这一点,但这是每个模板系统的核心。您的控制器负责简单地为给定视图汇编$__data
参数(通常是数据库中的数据)。