0

我继承了一个具体的 5 项目,并且正在调试为什么页面上的某些“区域”没有显示“内联编辑”功能。

版本为 5.5.1。

本质上,有一个页面列出了一些项目,每个项目都有一些 div 来包含每个项目的一些信息,例如名称、描述:

<div class = "description"></div>

问题是只有一个描述元素是可编辑的——我发现这可能是因为“区域”是静态名称,因此:

<div class = "description"> $a = new Area('Property Details'); $cont = Page::getByID($page->getCollectionID()); $regexMatchThis = $a->display($cont); </div>

因此,只有一个名为“属性详细信息”的区域允许编辑。我是否正确,如何命名该区域以便它读取正确的数据但可以唯一命名以便可以编辑?

帮助表示赞赏。

4

2 回答 2

1

是的,该代码似乎只定义了一个区域(并在两者之间做了一些不相关的事情)。

如果您想要的第二个区域尚不存在,只需像这样组成第二个区域:

 <div class = "description">
   <?php
    $a = new Area('Some more info'); 
    $a->display(); `
    ?>
 </div>
于 2013-03-05T11:04:35.477 回答
1

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()) 基本上是这样的:

  1. 初始化一个名为“Property Details”(或 1 或 2 或其他)的区域。正如所讨论的,这是关键。
  2. 显示它,默认为“为”当前页面显示它。这与“在”当前页面不同。它将始终显示在当前页面上......您作为参数传递给 ->display() 的内容更像是“应该从中拉出该区域的页面”。因此,如果您理论上可以通过 $thePageObjectForPropertyOnMainStreet,它将显示该页面的“属性详细信息”区域。使用 $cont 是不必要的。在创建它时(它已经存在)。但是……现在想来,这可能是他试图做的。$cont 可能是对单个属性页的引用。这些页面可能有一个名为“Property Details”的区域,他的循环用于从这些页面中“拉出该区域”。但是,$cont 看起来会有所不同。您可以通过执行 $cont = Page::getByID(x); 之类的操作对其进行硬编码,其中 x 是属性页的 cID,该页有一个称为“属性详细信息”的区域。编辑保存后,您可以在 URL 中获取 cID。
于 2013-03-07T03:50:13.930 回答