如何在php中创建复杂的容器

时间:2009-05-01 23:46:32

标签: php templates

我正在创建一个容器类型,它可以包含许多可能的变体:

  • 标题栏
  • 搜索栏
  • 表格栏
  • 标签栏
  • 自定义栏
  • 信息栏
  • 行动/状态栏
  • 内容区域

其中,只需要内容区域。有些子类型可以共享常用的条形图集,但它们也可以按任意组合进行混合和匹配。而且,每个条型可以在左侧或右侧具有内容。

我一直在创建一个具有以下属性的Panel类:

  • info_left
  • info_right
  • search_left
  • search_right

然后做这种逻辑:

// snip from __toString()
if ($this->info_left || $this->info_right) {
    $result .= $this->add_bar('info', $this->info_left, $this->info_right);
}
if ($this->search_left || $this->search_right) {
    $result .= $this->add_bar('search', $this->search_left, $this->search_right);
}
// end snip

private function add_bar($type, $left, $right) {
$result = <<< HERE
    <div class="$type">
        <div class="left">$left</div>
        <div class="right">$right</div>
    </div>
HERE;
}

并实例化一个Panel:

$p = new Panel("my panel");
$p->info_left = "my left content";
$p->search_right = "my right search content";
echo $p;

到目前为止,我还没有使用模板引擎,因为逻辑看起来很复杂,我几乎可以把它放在课堂上。 (该类具有很少的业务逻辑,但有很多表示逻辑。)也许有更好的方法....?

2 个答案:

答案 0 :(得分:0)

听起来你正在重新创建div。我认为如果你定义一个div格式然后创建不同的css样式来为每组div设置不同的样式会更好。

所以它会是这样的:

<div class="title">
    <div class="left">my left content</div>
    <div class="right search">my right search content</div>
</div>

我会保留css规则的复杂逻辑,然后为你拥有的每种类型制作一个单独的模板。

答案 1 :(得分:0)