Создание, удаление, и изменение страниц с помощью форм в CodeIgniter

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

Сегодня мы займемся доработкой нашего сайта и добавим возможность создания, удаления и изменения страниц.

В первую очередь нам нужно добавить поддержку форм в наш контроллер. Для этого добавьте строку $this->load->helper('form'); в конструктор нашего контроллера (функция Page в контроллере). Таким образом мы инициализируем помощника по работе с формами в CodeIgniter.

Теперь добавим функции в наш контроллер page:

  • add - будет отображать представление page_add для добавления новых страниц.
  • post_insert - обработчик формы добавления новой страницы. Обработчик формы в представлении page_add.
  • remove - функция удаления страницы. Принимает параметром id страницы которую нужно удалить. То есть для удаления странцы нужно перейти по адресу http://localhost/ci/index.php/page/remove/<id_страницы>.
  • edit - отображает представление редактирования страницы. Вообще-то это тоже самое представление что и при добавлении. Просто оно изменяет свой обработчик в зависимости от переданных данных (об этом позже). Принимает один параметр - id страницы для изменения.
  • post_update - обработчик при редактировании  страницы. Сохраняет и перенаправляет на просмотр сохраненной страницы.

function add()
{

// отображаем представление для добавления страниц
$this->load->view('page_add');

}

function post_insert()
{

// вставляем строку в нашу таблицу
// данные из массива _POST (то что предавалось в форме)
// форматируются автоматически.
// для этого названия полей в таблице и названия элементов формы
// должны совпадать
$this->db->insert('pages', $_POST);
// перенаправляем на главную страницу
redirect('page');

}

function remove($id)
{

// выполняем запрос на удаление
$this->db->query('delete from pages where id='.$id);
// перенаправляем на главную страницу
redirect('page');

}

function edit($id)
{

// выполняем запрос
$query = $this->db->query('select * from pages where id='.$id);
// проверяем число строк в результате
// если их больше нуля, то нужно показать страницу
// а нем случае либо 0, либо 1 результат
if($query->num_rows() > 0)
{

// сохранили результат для передачи
$data['result'] = $query->result();
// загрузили представление страницы передав туда данные для отображения
$this->load->view('page_add',$data);

}
else
{

// если нам передали неправильный id то загружаем пустое представление
$this->load->view('empty_view');

}

}

function post_update()
{

$this->db->query('update pages set header=?, content=? where id=?', array($_POST['header'], $_POST['content'], $_POST['id']));
redirect('page/view/'.$_POST['id']);

}

Теперь создадим представление page_add, отображающее форму добавления и редактирования страниц. Создайте в папке с представлениями файл page_add.php и скопируйте в него строки:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Добавление страницы</title>
<link type="text/css" rel="stylesheet" media="all" href="/ci/system/application/views/style.css"/>
</head>
<body>
<a href="/ci">Главная</a>
<?php
// это повторяющееся условие отличает добавление страницы от редактирования.
// если данные передаются - редактируем, иначе - нет.
// здесь выбирается обработчик формы.
if(isset($result))
echo form_open('page/post_update');
else echo form_open('page/post_insert');
?>
<p><input <?php if(isset($result)) echo 'value="'.$result[0]->header.'"';?>" type="text" name="header"/></p>
<p><textarea name="content" rows="20" cols="80" ><?php if(isset($result)) echo $result[0]->content; ?></textarea></p>
<?php
if(isset($result)) echo form_hidden('id', $result[0]->id);
?>
<p><input type="submit" value="<?php if(isset($result)) echo 'Сохранить'; else echo 'Добавить';?>"/></p>
</form>
</body>
</html>

Если передавались данные то они отображаются. Также меняется текст кнопки отправки данных: "Добавить" или "Сохранить" в зависимости от передачи данных.

Теперь осталось разместить ссылки редактирования удаление и добавления страниц на существующих представлениях. В main_view.php добавьте:
<?php
echo '<p>'.anchor('page/add', 'Добавить страницу').'</p>';
?>

Это код ссылки для отображения формы добавления страницы (вызов функции add).

В представлении page_view.php добавьте строки для отображения ссылок редактирования и удаления страниц:
<?php
echo '<p>'.anchor('page/edit/'.$result[0]->id, "Изменить").' '.anchor('page/remove/'.$result[0]->id, 'Удалить').'</p>';
?>

Место выбирайте сами, как считаете нужным, с учетом правил написания html и php кода.

Удачи!!

вернуться назад

Комментарии

ИСПРАВЛЕНИЕ!

Везде, где есть ссылка на главную страницу, то есть во всех представлениях код ссылки нужно изменить на: <a href="<?php echo base_url(); ?>">Главная</a>

Такой код лучше на случай переноса сайта в другую папку. Она использует адрес указанный в файле config.php строка 14.