使用cakephp创建自定义HTML块

使用cakephp创建自定义HTML块,php,cakephp,cakephp-2.0,cakephp-model,Php,Cakephp,Cakephp 2.0,Cakephp Model,我正在尝试使用CakePHP2.5和一些CMS特性构建网站。 所以,我想给网站管理员一个特权来改变网页中的一些块,而不是蛋糕块。我在几天内就坚持构建这个功能。我将使用下面的一些示例进行解释 示例-如果有多个页面具有相同的图像,并且管理员希望不时对其进行更改。所以我的方法视图文件有这样的代码段 <div id='image'>{{block_same_image}}</div> 然后在呈现每个页面之前,我获取页面html内容,并使用正则表达式{{block-[a-zA-Z

我正在尝试使用CakePHP2.5和一些CMS特性构建网站。 所以,我想给网站管理员一个特权来改变网页中的一些块,而不是蛋糕块。我在几天内就坚持构建这个功能。我将使用下面的一些示例进行解释

示例-如果有多个页面具有相同的图像,并且管理员希望不时对其进行更改。所以我的方法视图文件有这样的代码段

<div id='image'>{{block_same_image}}</div>
然后在呈现每个页面之前,我获取页面html内容,并使用正则表达式{{block-[a-zA-Z0-9]*}搜索“block key”{{{block\u same\u image}}

如果发现匹配,请在数据库“块”表中进行下一次查找,并获取块键的匹配内容,然后替换“块键”,如下所示

 <div id='image'><img src='.....'></div>
完成此操作后,我想将html内容呈现给浏览器

我还为这个网站开发了静态页面创建模块,所以管理员可以创建html页面,并将其保存在数据库中。如果管理员想使用上面的图片中的一个页面,那么只需将{{block_same_image}}添加到页面内容中,就会为该页面提供图片标签

我有两个问题与这个塞纳里奥有关

如何在呈现html内容之前获取和读取html内容。请尝试查看->获取函数,但对我来说不起作用 是否可以使用appcontroller和appmodule执行搜索和替换功能。我尝试将此方法应用于每个视图,而不更改每个控制器和模型文件。因为现在我有60多个动作 我真的被困在这里面了。有人能帮忙吗?? 问题1 请看这篇文章。您需要将$this->autoRender设置为false并实例化一个视图对象

问题2-A 您可以在应用程序控制器中编写使用api的任意函数

问题2-B我的建议 我建议您在这类任务中使用。你会:

1将lib/Cake/Console/Templates/default文件夹复制到App/Console/Templates/[theme name]主题名称可以是您想要的任何名称

2通过必要的更改修改或创建视图样板

3从命令行相对于应用程序目录运行cake bake view all

*这个解决方案可能是一个倒退,允许向前两步

<?php
/* Make sure the controller doesn't auto render. */
$this->autoRender = false;

/* Set up new view that won't enter the ClassRegistry */ 
$view = new View($this, false);
$view->set('text', 'Hello World');
$view->viewPath = 'elements';

/* Grab output into variable without the view actually outputting! */
$view_output = $view->render('box');
<?php
App::uses('Controller', 'Controller');
App::uses('Folder', 'Utility');
App::uses('File', 'Utility');

class AppController extends Controller {

    //Your logic

    public function searchAndReplace(){

        $ViewFile = new File('../View/Tests/sample.ctp');
        $content = $ViewFile->read();
        $content = preg_replace('/something/', 'something else', $content);
        $ViewFile->write($content);

    }

}