заглушки, динамическая домашняя страница в cakePHP - PullRequest
0 голосов
/ 20 октября 2010

Я работаю над сайтом для клиента, который хочет иметь возможность обновлять, изменяя свой контент.Задачей было разрешить им редактировать страницы, но не создавать и не удалять их.Для сайта я решил поработать с cakePHP, так как слышал хорошие новости.

Сначала короткое объяснение моей настройки.У меня есть одна таблица, которая называется «содержимое», в которой я храню содержимое каждой страницы.В таблице есть pid, varchar 'title', varchar 'slug' и длинное текстовое 'body'.Все они довольно понятны, каждая страница будет иметь свою собственную строку, а тело будет простым HTML-дампом.

У меня есть две ситуации, с которыми у меня возникают проблемы.Во-первых, это настройка домашней страницы.По умолчанию Cake является page на основе home.ctp, но это статично.В настоящее время страница, на которой я был в качестве домашней страницы, находится на localhost / alc / contents / view / 2.Я понимаю, что это как-то связано с маршрутизацией, но большинство примеров там дают половину решения, когда мне нужны все детали: P

Вторая проблема - слизняк страниц.Каждая страница в настоящее время находится в / contents / view / id , и я бы хотел, чтобы вместо этого в базе данных был слаг.Каждый раз, когда я пытаюсь изменить это (то есть изменить ссылку просмотра в моем индексе), я получаю сообщение об ошибке, а не содержание страницы.

Любая помощь по этому вопросу будет принята, поскольку есть две вещи, которые я не могукажется, правильно понять.Спасибо!

Кстати, вы можете посмотреть сайт на http://www.roberttilt.name/web-dev/ALC_proto/

1 Ответ

0 голосов
/ 20 октября 2010

Для первого вопроса вам нужно открыть /app/config/routes.php и изменить строку для домашней страницы. i.e.:

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

нужно стать

Router::connect('/*', array('controller' => 'contents', 'action' => 'view'));

В файле вашего контроллера /app/controllers/contents_controller.php перейдите в представление действий и измените его так, чтобы он принимал пустой идентификатор, т.е.

function view($id = null){
   if($id == null){ //Load the default home page
      $this->find('first', array('conditions'=>array('default'=>1)));
   } else {
      //load the 
      $this->find('first', array('conditions'=>array('OR'=>array('slug'=>$id, 'id'=>$id))));
   }
   .....
}

Таким образом, если идентификатор или слаг не указаны, вы загружаете домашнюю страницу. Если один из них загружен, просто используйте его для загрузки содержимого нужной веб-страницы.

Ваши ссылки будут выглядеть так:

$this->Html->link('About', array('controller'=>'contents', 'action'=>'view', $slug_var));

Ссылка будет преобразована в

<a href="/your-nice-slug">About</a>

Возможно, вам стоит взглянуть на Кулинарную книгу .

...