Pekka 是正确的,但我不愿意用另一个(长)解释来乱扔答案讨论。
区域根据名称是动态的。因此,“Property Details 1”不同于“Property Details 01”。
您可以执行以下操作:
for ($i = 1; $i <= 10; $i++) {
$a = new Area('Property Details ' + $i);
$a->display();
}
你会得到 10 个依次命名为“Property Details x”的区域,从 1 到 10。
假设您向它们添加内容块。只要它们保持完全相同的名称,这些块就会按预期工作。您甚至可以将第一行更改为:
for ($i = 10; $i >= 1; $i--) {
在这种情况下,您将获得按顺序向下命名的区域(10、9、8...),C5 会将内容块保留在其原始区域中——因此它们都将颠倒过来。
但是,假设您这样做:
for ($i = 11; $i <= 20; $i++) {
现在你得到 10 个区域(11、12、13...),而且都是空白的。内容块基本消失了。如果需要,您可以创建新的内容块。但是然后继续将原始循环放回 (1, 2, 3...)。您的原始内容块又回来了——就像以前一样。
这个非常长的解释只是表明 C5 基于名称创建了一个块,并且该名称成为关键。它可以是任何东西。您可以基于页面名称,或动态生成它,或其他任何方式。一旦创建它就无法更改它(如果您不想“丢失”块)。
但是......我会再次同意Pekka的观点......你可能不想这样做。不知道您的目标,您正在创建(或延长)一个非常脆弱且难以维护的解决方案。Pekka 建议为每个属性创建子页面,然后您可以使用页面列表块来“拉”适用的属性。或者,如果您不想创建单独的页面,请使用 Jordan 的 Designer 内容块 - http://www.concrete5.org/marketplace/addons/designer-content/。有一个区域(“属性详细信息”),并为每个属性添加一个块。更容易删除、重新排序等。
编辑以解决 Sphere 的前两个问题:
向区域添加块非常简单。只要这些区域没有重复的名称,您就可以像之前尝试的那样单击它,然后添加一个块。我不确定您的特定网站需要什么块类型——这是您网站特有的。它可能只是一个内容块,或者可能是具有特定模板的页面列表块,以前的开发人员将其设置为每个块实例、每个区域“列出”一个页面(这真的很奇怪,但你永远不知道.. .)。或者,也许它是从设计器内容创建的块类型我之前提到的块。在现有的块上四处寻找应该会给你一个想法。另外,我发现有时他们会在 HTML 中写出一些识别 ID。因此,来源类似于 .
至于您的代码示例:是的, $cont 是 page. Pekka 和我提供的代码 ($a->display()) 基本上是这样的:
- 初始化一个名为“Property Details”(或 1 或 2 或其他)的区域。正如所讨论的,这是关键。
- 显示它,默认为“为”当前页面显示它。这与“在”当前页面不同。它将始终显示在当前页面上......您作为参数传递给 ->display() 的内容更像是“应该从中拉出该区域的页面”。因此,如果您理论上可以通过 $thePageObjectForPropertyOnMainStreet,它将显示该页面的“属性详细信息”区域。使用 $cont 是不必要的。在创建它时(它已经存在)。但是……现在想来,这可能是他试图做的。$cont 可能是对单个属性页的引用。这些页面可能有一个名为“Property Details”的区域,他的循环用于从这些页面中“拉出该区域”。但是,$cont 看起来会有所不同。您可以通过执行 $cont = Page::getByID(x); 之类的操作对其进行硬编码,其中 x 是属性页的 cID,该页有一个称为“属性详细信息”的区域。编辑保存后,您可以在 URL 中获取 cID。