.
Урок 7. EASY_CMS. Организуем редактирование записей БД (PHP, CMS, POST)
Автор megabax   
27.02.2011 г.
Структура программы на примере простейшей программы

Урок 7. EASY_CMS. Организуем редактирование записей БД (PHP, CMS, POST)

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


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

...

... Этот класс мы поместим в модуль EASYCMSVisual.php. Что он у нас будет делать? Во первых, формировать форму для редактирования строки таблицы базы данных. Во вторых, перехватывать событие от кнопочки "Применить" и производить запись в таблицу измененных данных.

...

..... Эти столбцы мы можем получить прямо из класса таблицы базы данных (помните, когда мы описывали этот класс? см. урок "Работаем с базой банной" и "Расширяем функционал для работы с БД".). Как видно приведенного HTML, отредактированные данные строки таблицы мы будем посылать скрипту методом POST. Вы еще видите очень длинную ссылку со всякими параметрами. Откуда она возьмется? Ее сформирует другой объект и передаст в качестве параметра $ref. Но до него мы еще доберемся. А сейчас разберем следующий метод класса -  get_data_from_post. Он просто копирует из массива _POST, в котором система хранит параметры, переданные скрипту методом POST и копирует их в отдельный массив. И, наконец, event_handler - обработчик сообщений. С механизмом сообщений вы уже знакомы из урока "обмен сообщениями между классами и начало механизма управления контентом" . Этот метод будет вызван объектом, ответственным за доставку сообщений. Он проверит, ему ли адресовано это сообщение, и если да, то выполнит метод edit_record класса таблицы, которая связана с данным редактором записи. На прошлых уроках мы еще не разрабатывали этот метод, поэтому разработаем его сейчас и добавим к классу ECMS_Table....

...

... А теперь проверим все это на тестовом примере:

<html>

 

<head>

  <title>Тест EASY CMS</title>

  <LINK HREF="ECMS.css" REL="stylesheet" TYPE="text/css">

</head>

 

<body>

 

<?php

    include_once("EASYCMSBase.php");

    include_once("EASYCMSDB.php");

    include_once("EASYCMSVisual.php");

    init_ECMS();

 

    //создадим базу данных и законнектимся к ней

    $db=new ECMS_Database("test","localhost","root","123");

    $db->set_prefix("P");

    $db->connect();

 

    //создадим класс таблицы

    $tb=new ECMS_Table("wares", $db);

    $tb->fields[]=new ECMS_Field("id","код","int",true);

    $tb->fields[]=new ECMS_Field("name","наименование","text",false);

    $tb->fields[]=new ECMS_Field("price","цена","real",false);

 

    $tv=new ECMS_Table_viewer();

    $tv->table=$tb;

    $tv->copy_fields_to_columns();

   

    //создадим редактор строки таблицы

    $ro=new ECMS_Table_row_editor();

    $ro->columns=$tv->columns;

    $ro->set_name("roweditor");

    $ro->table=$tb;

 

    //Создадим контроллер ссылок

    $rc=new ECMS_References_controller();

    $rc->url="http://localhost";

    $rc->file_name="test.php";

    $rc->set_name("refcont");

    $rc->add($ro);

 

    //Превратим входные параметры в событие

    if(isSet($_GET["option"])) {

        $msg=$rc->create_message();

        $msg["destination_name"]=$_GET["objname"];

        $msg["row_id"]=$_GET["rowid"];

        $msg["option"]=$_GET["option"];

        $msg["data"]=$ro->get_data_from_post();

        $rc->send_message($msg,false,$rc);

    }

 

 

    $tb->select_rows();

 

    //выведем заголовок таблицы

    echo "<b>В таблице</b><br> ";

    echo "<table border=2><tr>";

    echo $tv->show_header(true);

    echo "</tr>";

 

    //выведем строки таблицы

    $cn=$tb->get_rows_count()-1;

    for($i=0; $i<=$cn; $i++) {

        echo "<tr>";

        echo $tv->show_row(true);

        echo "</tr>";

    }

 

    //закончим таблицу

    echo "</table><br>";

   

   

    $tb->select_rows();

    $row=$tb->get_row();

    echo $ro->show_edit_form($row,$rc->create_reference_table_row("editrow", $ro,$row["id"]));

   

?>

 

</body>

 

</html>

 

Этот тестовый пример предполагает, что у вас уже создана тестовая таблица. Если нет, воспользуйтесь тестовым примером с предыдущего урока, что бы создать таблицу. 

 

Результат работы данного скрипта - возможность редактировать одну (первую) строку таблицы:

Урок 7. EASY_CMS. Организуем редактирование записей БД (PHP, CMS, POST)

 

На этом пока остановимся, а в следующих уроках научимся выбирать строку для редактирования, а так же добавлять и удалять строки из таблицы.

Последнее обновление ( 27.02.2011 г. )