Php 有效地为长串动态html设置主题
我制作了几个HTML弹出窗口,总是遵循一个定义的模板 因为有一个模板(标题、内容、示例表、更多按钮), 我认为通过将数据传递给包装器函数,可以节省大量重复出现的html,如下所示:Php 有效地为长串动态html设置主题,php,html,coding-style,Php,Html,Coding Style,我制作了几个HTML弹出窗口,总是遵循一个定义的模板 因为有一个模板(标题、内容、示例表、更多按钮), 我认为通过将数据传递给包装器函数,可以节省大量重复出现的html,如下所示: $device_popup_data = array( 'header' => 'Header text', 'content' => 'some text<span style ="bold"> Some more text</span>', 'examp
$device_popup_data = array(
'header' => 'Header text',
'content' => 'some text<span style ="bold"> Some more text</span>',
'example' => '<table><tbody><tr><td> A lot of text here, multi lined and messy',
'more' => '',
);
echo theme_uxt_expanded_popup($device_popup_data);
function theme_uxt_expanded_popup($data){
$head = isset($data['head'])?$data['head']:'';
$content = isset($data['content'])?$data['content']:'';
$example = isset($data['example'])?$data['example']:'';
$more_html = isset($data['more'])?$data['more']:'';
$output= '<div class = "expandedTooltip">';
$output.= '<h1>'.$head.'</h1>';
$output.= '<p>'.$content.'</p>';
if(!empty($more)){
$output.= '<a class = "popupShowMore"><p>'.$more.'</p></a>';
}
$output .= '</div>';
return $output;
}
您知道这样做的有效且可读的方法吗
你知道一种高效且可读的方法来做类似的事情吗
这个
唯一可读的、可维护的方法是遵守。这里的要点是1)将HTML与PHP分离2)实现容器,如name
=>HTML内容
为了充分利用DI
和SRP
(见下文)。因此,类本身看起来像:
class TemplateBlockManager
{
private $blocks = array();
public function define($name, $file, array $vars = array())
{
ob_start();
if (!empty($vars)) {
extract($vars);
}
require($file);
$content = ob_get_clean();
$this->blocks[$name] = $content;
}
public function getBlock($name)
{
return $this->blocks[$name];
}
}
文件:test.phtml
<p>
<b>Welcome to <?php echo $foo; ?></b>
</p>
欢迎来到
用法:
<?php
$blockManager = new TemplateBlockManager();
$blockManager->define('header', '/path/to/test.phtml', array('foo' => 'bar'));
// Should output "Welcome to bar"
echo $blockManager->getBlock('header');
你知道一种高效且可读的方法来做类似的事情吗
这个
唯一可读的、可维护的方法是遵守。这里的要点是1)将HTML与PHP分离2)实现容器,如name
=>HTML内容
为了充分利用DI
和SRP
(见下文)。因此,类本身看起来像:
class TemplateBlockManager
{
private $blocks = array();
public function define($name, $file, array $vars = array())
{
ob_start();
if (!empty($vars)) {
extract($vars);
}
require($file);
$content = ob_get_clean();
$this->blocks[$name] = $content;
}
public function getBlock($name)
{
return $this->blocks[$name];
}
}
文件:test.phtml
<p>
<b>Welcome to <?php echo $foo; ?></b>
</p>
欢迎来到
用法:
<?php
$blockManager = new TemplateBlockManager();
$blockManager->define('header', '/path/to/test.phtml', array('foo' => 'bar'));
// Should output "Welcome to bar"
echo $blockManager->getBlock('header');
既然你不读那些字符串,你也不必在意它们是长还是小。通过变量名,它们的可读性始终相同。如果您关心最终的HTML输出,您可以通过一个美化器运行它,比如tidy。@hakre,编辑了我的问题,试图更清楚一些。我担心这些长字符串会使代码流变得不合理,这看起来确实有点麻烦。我现在最好看看你到底想问什么。那么长,甚至更长?你可以通过抽象模板逻辑和使用OB
技巧来做到这一点,比如包括一个模板并注入一些其他变量。请参阅此处了解更多匿名信息,并将其与输出缓冲相结合,例如此处概述的:。由于您不读取这些字符串,因此不必关心它们是长还是小。通过变量名,它们的可读性始终相同。如果您关心最终的HTML输出,您可以通过一个美化器运行它,比如tidy。@hakre,编辑了我的问题,试图更清楚一些。我担心这些长字符串会使代码流变得不合理,这看起来确实有点麻烦。我现在最好看看你到底想问什么。那么长,甚至更长?你可以通过抽象模板逻辑和使用OB
技巧来做到这一点,比如包括一个模板并注入一些其他变量。请参阅此处了解更多匿名信息,并将其与输出缓冲相结合,例如此处概述的:。我认为应该可以在定义中定义默认变量,并且当使用getBlock返回块时,您还应该能够指定变量。感谢您的出色回答,我肯定会使用这个而不是我的程序版本,但我仍然有相同的问题:在哪里编写数组('foo'=>'bar');我仍然需要输入一个巨大的html表而不是“bar”。不,不,你搞错了。第三个可选参数array('foo'=>bar')
仅用于模板变量。正如您所看到的,它有默认的空值,所以您可以忽略它。对于巨型表,这将是:$blockManager->define('maging_table','/path/to/maging/table.phtml');echo$blockManager->getBlock(‘巨大的_表’)代码>我认为应该可以在define中定义默认变量,并且当使用getBlock返回块时,您还应该能够指定变量。感谢您的出色回答,我肯定会使用它而不是我的过程版本,但仍然存在相同的问题:在何处编写数组('foo'=>'bar');我仍然需要输入一个巨大的html表而不是“bar”。不,不,你搞错了。第三个可选参数array('foo'=>bar')
仅用于模板变量。正如您所看到的,它有默认的空值,所以您可以忽略它。对于巨型表,这将是:$blockManager->define('maging_table','/path/to/maging/table.phtml');echo$blockManager->getBlock(‘巨大的_表’)代码>