2013-03-05 81 views
0

我已经继承了一个具体的5项目,并且正在调试为什么页面上的某些“区域”没有显示“内联编辑”功能。混凝土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>

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

帮助赞赏。

回答

1

佩卡是正确的,但我很犹豫,垃圾与另一个答案的讨论(长)的解释。

区域根据名称是动态的。因此,“属性详情1”与“属性详情01”不同。

你可以这样做:

for ($i = 1; $i <= 10; $i++) { 
    $a = new Area('Property Details ' + $i); 
    $a->display(); 
} 

而且你会得到10依次命名为“房产详细信息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建议为每个属性创建子页面,然后您可以使用页面列表块来“拉”适用的属性。或者,如果您不想创建单独的页面,请使用Jordan的Designer内容区块 - http://www.concrete5.org/marketplace/addons/designer-content/。有一个区域(“房产详细信息”),并为每个房产添加一个区块。更容易删除,重新排序等。

编辑到地址Sphere的前两个问题: 将区块添加到区域非常简单。只要这些区域没有重复的名称,您可以按照之前的方法单击它,然后添加一个块。我不确定您的特定网站需要哪种类型的块 - 这是特定于您的网站的。这可能只是一个内容块,或与特定的模板,在之前的开发者将其设置为“列表”一个每块实例页,每区(这是很奇怪的,也许一个页次块,但你永远不知道......)。或者,也许它是从我之前提到的设计器内容块创建的块类型。在现有的街区上徘徊应该会给你一个想法。另外,我发现有时他们会在HTML中写出一些标识ID。所以,来源是类似的。

至于你的代码示例:是的,$续是页。 Pekka和我提供的代码($ a-> display())基本上是这样做的:

  1. 初始化一个名为'Property Details'(或1或2或其他)的区域。正如讨论过的那样,这是关键。
  2. 显示它,默认为显示其“为”当前页面。这与当前页面上的“打开”不同。它将始终显示在当前页面上......作为参数传递给 - > display()更像是“该区域应该从中拉出的页面”。所以如果你理论上可以通过$ thePageObjectForPropertyOnMainStreet,它会显示该页面的'Property Details'区域。使用$ cont是不必要的。创建它时(它已经存在)。 但是......现在我想起来了,那可能是他试图做的。 $ cont可能是对各个属性页面的引用。这些网页威力有一个名为“房产详细信息”一区,而这个他环路提供从这些网页“抠区”。但是,$ cont看起来会不一样。 你可以做这样的事情$续=页面:: getByID(X);,其中x是CID的属性页,其中有一个名为“房产详细信息”一区硬编码此。编辑并保存后,您可以在URL中获取cID。
+0

谢谢。看来我缺少的是'添加块到一个区域'位。从新的Area()代码中看不出这个链接是如何形成的。基本上我正在寻求支持由另一个开发人员构建的系统,并且客户不愿意将任何时间/成本花费在明显的错误上。一个快速/肮脏的解决方案将是使'区域'动态命名,但我不确定这些链接到块的位置 - 我看不到名为“属性详细信息”或类似的块。我承认我有点困惑,但感谢您的耐心。 – Sphere 2013-03-07 09:33:25

+0

$ cont = Page :: getByID($ page-> getCollectionID()); $ regexMatchThis = $ a-> display($ cont);你提到这个$ cont变量不是'页面'吗? – Sphere 2013-03-07 09:37:15

1

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

如果你希望不存在第二区域,正好弥补了第二个像这样:

<div class = "description"> 
    <?php 
    $a = new Area('Some more info'); 
    $a->display(); ` 
    ?> 
</div> 
+0

谢谢,但该区域需要成为php while循环的一部分,因此该区域的“属性详细信息”需要位于每个属性的页面上。因此,“区域”将出现在循环的每个过程中,并且具有相同的名称。然而,我假设因为它被定义(不止一次)为'Property Details',而不是'Property Details x' - 这就是为什么编辑功能只处理第一个'Property Details'区域的原因?我问的是,“区域”是否可以有一个动态的“名称”,并仍然参考适当的“区域”内容? – Sphere 2013-03-05 11:26:28

+0

@Sphere是的,你必须命名“属性细节1”,“2”等等。但是,这是为了一个可能无尽的属性列表?如果是这样的话,这种方法不会让你感到高兴:如果你需要删除属性号码。 5?在这种情况下,你可以使用子页面并从中获取数据...虽然 – 2013-03-05 11:32:38

+0

是更正确的,但更正确。它是由原始开发者设置的。我认为我的假设是正确的,为什么编辑功能不起作用是因为页面上有重复的区域?有没有办法动态引用一个区域,使其唯一可编辑? – Sphere 2013-03-05 11:37:49