Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具体5如何断开块与块的连接';以编程方式设置页面上的主块默认值_Php_Block_Concrete5 - Fatal编程技术网

Php 具体5如何断开块与块的连接';以编程方式设置页面上的主块默认值

Php 具体5如何断开块与块的连接';以编程方式设置页面上的主块默认值,php,block,concrete5,Php,Block,Concrete5,我正在使用自己的控制器构建一个新的单页生成器,以便为某些特定用户编辑一些专门的页面。这些页面已经通过页面类型默认设置了一些默认块 我只想通过新的单页编辑表单编辑内容块的内容。该内容块已在页面类型默认值中预定义。它被放置在主区域的第一个街区 为此,我在我的控制器上做了这样一个函数 /* $p = the page object that I want to edit */ private function saveData($p){ // get all blocks fromt

我正在使用自己的控制器构建一个新的单页生成器,以便为某些特定用户编辑一些专门的页面。这些页面已经通过页面类型默认设置了一些默认块

我只想通过新的单页编辑表单编辑内容块的内容。该内容块已在页面类型默认值中预定义。它被放置在主区域的第一个街区

为此,我在我的控制器上做了这样一个函数

/* $p = the page object that I want to edit */
private function saveData($p){
        // get all blocks fromt the Main area
    $blocks = $p->getBlocks('Main');

        // setup $data with a POST variable 'contentBody'
    $data = array('content' => $this->post('contentBody'));

        // instantiate block with Content Block type
    $bt = BlockType::getByHandle('content');

        // try to iterate all the blocks obtained and update only the first block  
        foreach( $blocks as $b){
        $b->update($data);
                break;
    }
}
我认为简单的函数应该足以让它像我想要的那样工作。但显然不是。
$b->update($data)
函数似乎正在更新其页面类型默认值上的主块,而不仅仅是我正在编辑的特定页面上的特定块。所以它会更新我所有包含默认内容块的页面


那么,我如何才能真正断开它的主默认块。这样我就可以只为这个特定的页面编辑它。内置的concrete5块编辑功能能够断开块的连接。但我在任何地方都找不到任何关于如何断开该块连接的线索或文档。我也不知道要挖掘哪些核心文件来找出如何断开连接。

你说得对。在编辑块之前(使用c5编辑界面——而不是API),块实际上是对页面类型的默认块的引用。此代码应适用于您:

$blocks = $page->getBlocks('Main');
foreach ($blocks as $block) {
    if ($block->getBlockTypeHandle() == 'content') {
        $newblock = $block->duplicate($page);
        $block->delete();

        $newblock->update($data);
        break;
    }
}

这个答案救了我一命。万一有人遇到同样的问题:我正在以编程方式创建页面,无法更新我创建的页面的内容块,因为我一直在简单地修改块引用。因此,我的所有页面的内容都与我在循环中使用的最后一个值相同。在页面创建/更新过程中,我检查块->是否是原始的,如果是,则复制块。