Concrete5:可以在特定布局中重复多个块吗?

时间:2014-05-21 16:31:18

标签: block concrete5

我正在使用Concrete5为页面创建自定义模板。我有三个块,包含在div类中,我想在一页中重复。例如:

<div class="block-wrapper">
   <div class="title"><?php $a = new Area('Title'); $a->display($c);?></div>
   <div class="description"><?php $a = new Area('Description'); $a->display($c);?></div>
   <div class="autonav"><?php $a = new Area('Autonav'); $a->display($c);?></div>
</div>

CSS就是这样的:

.block-wrapper {
        padding: 20px 5px 20px 5px;
        border: 1px solid #e8e8e8;
        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
    }

.title {
        float: left;
}

.description {
        float: right;
}

我想要的是能够用里面3个可编辑的块重复块包装器。例如,生成的页面如下所示:

    <div class="block-wrapper">
      <div class="title">Steve</div>
      <div class="description">Engineer</div>
      <div class="autonav">Link A | Link B | Link C</div>
</div>

    <div class="block-wrapper">
       <div class="title">Betty</div>
       <div class="description">Designer</div>
       <div class="autonav">Link D | Link E | Link F</div>
</div>

......等等。我希望我足够清楚。这可能吗?我有什么选择?理想情况下,我可以尽可能自由地设置块和块包装器的样式。

3 个答案:

答案 0 :(得分:2)

根据您的具体情况,有一些不同的解决方案。内置的Concrete5方法是在Area对象上使用setBlockWrapper方法。例如:

<?php
$a = new Area('Main');
$a->setBlockWrapperStart('<div class="block-wrapper">');
$a->setBlockWrapperEnd('</div>');
$a->display($c);
?>

请注意,在编辑模式下不会显示块包装器。

另一种方法(如@BGundlach所提到的)是使用免费的Designer Content插件并创建一个自定义块类型,每个数据块都有单独的字段,并在每个字段周围提供相应的包装器HTML。但是,看看你的例子,我发现你有一个字段是各种各样的“autonav”......所以我不确定这个字体是如何填充的。

第三种方法是非免费Designer Content Pro插件,它允许您使用重复项创建自定义的封闭类型(这可能对您的导航字段有用...因此用户可以选择任意数量的导航链接想要...但这更像是一个“手动导航”而不是“自动导航”。)

免责声明:我是Designer Content和Designer Content Pro插件的作者(但是他们的创建是为了解决这个问题,所以我觉得这很适合)。

答案 1 :(得分:1)

如果我理解正确,可能的选择是以编程方式创建三个区域。例如,您可以使用句柄number_of_bio_blocks创建一个新的Page属性,然后再创建类似

的东西
<?php
    $num = intval(Page::getCurrentPage()->getAttribute('number_of_bio_blocks'));
    if ($num) {
        while ($num--) {
?>
            <div class="block-wrapper">
                <div class="title"><?php $a = new Area('Title ' . $num); $a->display($c);?></div>
                <div class="description"><?php $a = new Area('Description ' . $num); $a->display($c);?></div>
                <div class="autonav"><?php $a = new Area('Autonav ' . $num); $a->display($c);?></div>
            </div>
<?php
        }
    }
?>

或者可能只设置10个任意数量的区域,因为那些未归档的区域将不会显示。据我所知,没有一种通过界面添加区域的方法。此外,创建这样的区域将使用其他未使用的区域填充数据库。我不确定你是否担心这一点。

建议使用Designer Content,现在有Designer Content Pro允许您在块中添加多个重复字段。这不允许任意块,但如果您需要富文本和图像等内容,那么这可能是一个不错的选择。

答案 2 :(得分:0)

为什么不使用一个区域和一个重复块类型?较少的区域可以更好地确保性能。

我不确定Jordanlev的设计师内容块中是否有autonav选项,但我确信它会为您完成所有这些操作。 http://www.concrete5.org/marketplace/addons/designer-content/我已将此作为我自己的许多块的基础。它使您可以控制所有标记。

说明中指出:

  

Designer Content是一个非常宝贵的工具,允许设计人员轻松创建自定义块类型。这样做的目的是使用户能够直接进行内容编辑,并确保维护样式 - 而不必依赖复杂且容易出错的TinyMCE样式。例如,假设您网站上的某些页面将包含有关公司员工的信息,每个员工都有一个名称,一个生物图像和一个简要说明 - 您可以创建一个带有文本框字段的自定义块用于名称,生物图像的图像选择器,以及用于描述的所见即所得编辑器。您还可以在html片段(例如,带有类的div)中包围每个元素,以确保内容将被正确设置样式,而无需用户处理挑剔的TinyMCE工具栏。