Я пытаюсь создать сайт с использованием cakephp (2.5) с некоторыми функциями CMS.
Итак, я хочу дать привилегированному веб-администратору изменить некоторые блоки на веб-страницах (не блоки тортов). Я застрял в создании этой функции в днях. Я объясню на примере ниже.
Пример — если несколько страниц имеют одно и то же изображение, и администратор хочет изменить его время от времени. так что мои файлы представления метода имеют такой сегмент кода.
<div id='image'>{{block_same_image}}</div>
Затем, перед рендерингом каждой страницы, я получаю html-содержимое страницы и ищу «ключ блокировки» ({{}} Block_same_image) используя регулярное выражение ({{block- [a-zA-Z0-9] *}})
Если найдено совпадение, посмотрите в таблицу «блок» базы данных и получите соответствующий контент для ключа блока и замените «ключ блока», как показано ниже.
<div id='image'><img src='.....'></div>
После этого я хочу сделать HTML-контент для браузера.
Я также разработал модуль создания статических страниц для этого веб-сайта, чтобы администратор мог создавать HTML-страницы и сохранять их в базе данных. Если администратор захочет использовать вышеуказанное изображение на одной из этих страниц, то просто добавив {{block_same_image}} к содержимому страницы, вы получите тег изображения для этой страницы.
У меня есть 2 вопроса, связанных с этим сенарио.
Видеть это Пьянящая нация сообщение. Вам нужно установить $this->autoRender
в false
и создать экземпляр View
объект.
<?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');
Вы можете написать произвольную функцию в вашем контроллере приложения, которая использует скоросшиватель & файл API с preg_replace.
<?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);
}
}
Я бы порекомендовал использовать генерация кода с испечь для такого рода задач. Ты бы:
1) Скопируйте lib/Cake/Console/Templates/default
папка для App/Console/Templates/[theme name]
(Название темы может быть как угодно)
2) Измените или создайте свой шаблон представления с необходимыми изменениями.
3) Беги cake bake view all
из командной строки, относительно вашего App
каталог.
* Это решение может быть шагом назад, что позволит сделать два шага вперед.
Других решений пока нет …