Программирование - это просто
Advertisement
Главная arrow Web-программирование arrow Углубленное изучение PHP. Пишем Easy CMS (пл. р.) arrow Урок 16. Некоторые новшества библиотеки EASY CMS: постраничный вывод и ссылочный тип данных.
23.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Урок 16. Некоторые новшества библиотеки EASY CMS: постраничный вывод и ссылочный тип данных. Печать E-mail
Автор megabax   
22.08.2011 г.
Структура программы на примере простейшей программы

Урок 16. Некоторые новшества библиотеки EASY CMS: постраничный вывод и ссылочный тип данных.

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

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


Исходники к уроку можно скачать в платном разделе.

На прошлом уроке мы написали заготовку админки сайта тесты. Она у нас позволяет редактировать список тестов и пользователей. Кроме того, мы научились писать расшифровку строки таблицы, благодаря которой мы можем щелкнуть на тест, программа нам покажет вопросы теста. Правда, в самой колонке "тест" у нас показывает не название теста, а его номер:

Урок 16. Некоторые новшества библиотеки EASY CMS: постраничный вывод и ссылочный тип данных.

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

Урок 16. Некоторые новшества библиотеки EASY CMS: постраничный вывод и ссылочный тип данных.

Такая возможность появилась в новой версии библиотеки ECMS ...

...

... И так, новый класс ECMS_Reference, объявлен в модуле EASYCMSDB.php:

class ECMS_Reference {

    public $_table_name;

    public $_id_table_name;

    public $_view_field_name;

   

    function __construct($table_name,$id_table_name,$view_field_name) {

        $this->_table_name=$table_name;

        $this->_id_table_name=$id_table_name;

        $this->_view_field_name=$view_field_name;

    }

Это класс описания ссылки. Если поле должно ссылаться на другую базу данных, то то для его описания нужно использовать этот класс. В данном класе содержиться следующая информация:

  • $_table_name - имя таблицу, на которую ссылается данное поле.

  • $_id_table_name - имя поля, которое является уникальным ИД в таблице, на которую ссылается поле. Чаще всего это Id.

  • $_view_field_name - имя поля представления, которое будет отображаться из таблицу, на которую ссылается данное поле.

Если говорить простым языком, то $_table_name для поля в таблице результатов теста, где мы хотим, что бы вместо теста отобразилось его название, мы поместим имя таблицы тестов, $_id_table_name - туда мы поместим "id" - уникальный идентификатор записей у нас одинаков во всех таблицах, в том числе и в таблице тестов, $_view_field_name - тут будет "name" - так как мы хотим, что бы вместо номера теста отображалось его наименование....

...

... У класса ECMS_Table_viewer внесены мелкие изменения в show_row, что бы вместо можно было отобразить наименование (представление) элемента таблицы по ссылке, например, вместо ИД теста его название.

Ну и на последок, традиционно исходный код файла admin.php:

<?php

    session_start();

?>

<html>

 

<head>

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

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

</head>

 

 

 

<?php

    include_once("EASYCMSBase.php");

    include_once("EASYCMSDB.php");

    include_once("EASYCMSVisual.php");

    include_once("tests_lib.php");

    init_ECMS();

   

 

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

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

    $db->set_prefix("T");

    $db->connect();

   

    //создадим "движок" сайта

    $engine=new ECMS_Web_Engine();

    $engine->set_name("engine");

 

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

    $rc=new ECMS_References_controller();

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

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

    $rc->set_name("refcont");

 

    //создадим таблицу вопросов

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

    $tb->set_name("questions");

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

    $fl=new ECMS_Field("text","Текст вопроса","text",false);

    $fl->_width=70;

    $tb->fields[]=$fl;

    $tb->fields[]=new ECMS_Field("test","Тест",new ECMS_Reference("tests","id","name"),false);

    $qv=add_table($engine,$tb,$db,"questions_view",$rc,null);

 

    //создадим таблицу тестов

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

    $tb->set_name("tests");

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

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

    $fl=new ECMS_Field("description","Описание","text",false);

    $fl->_width=70;

    $tb->fields[]=$fl;

    add_table($engine,$tb,$db,"tests_view",$rc,$qv);

   

 

    //создадим таблицу пользователей

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

    $tb->set_name("users");

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

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

    $tb->fields[]=new ECMS_Field("password","Пароль","text",false);

    $tb->fields[]=new ECMS_Field("email","email","text",false);

    $tb->fields[]=new ECMS_Field("permissionLevel","Уровень доступа","int",false);

    add_table($engine,$tb,$db,"users_view",$rc,null);

   

    //создадим таблицу оценок

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

    $tb->set_name("scores");

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

    $tb->fields[]=new ECMS_Field("minscore","Мин оценка","int",false);

    $tb->fields[]=new ECMS_Field("maxscore","Макс оценка","int",false);

    $fl=new ECMS_Field("description","Описание","text",false);

    $fl->_width=70;

    $tb->fields[]=$fl;

    $tb->fields[]=new ECMS_Field("test","Тест",new ECMS_Reference("tests","id","name"),false);

    add_table($engine,$tb,$db,"scores_view",$rc,null);

 

    //создадим таблицу результатов

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

    $tb->set_name("results");

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

    $tb->fields[]=new ECMS_Field("score","Оценка","int",false);

    $tb->fields[]=new ECMS_Field("res","Результат",new ECMS_Reference("testscores","id","description"),false);

    $tb->fields[]=new ECMS_Field("user","Пользователь",new ECMS_Reference("users","id","name"),false);

    $tb->fields[]=new ECMS_Field("test","Тест",new ECMS_Reference("tests","id","name"),false);

    add_table($engine,$tb,$db,"results_view",$rc,null);

 

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

    $is_handled=false;

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

        $msg=$engine->create_message();

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

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

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

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

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

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

        if($_GET["objname"]==$engine->get_name()) {

            !$is_handled=true;

            $ltb=$engine->get_table();

            if($ltb!=null) $_SESSION['view_name']=$ltb->get_name()."_view";

        }

    }

    if(!$is_handled) {

        //если нет сообщений то устанавливаем текущей таблицу тестов

        $msg=$engine->create_message();

        $msg["destination_name"]=$engine->get_name();

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

        if($_SESSION['view_name']!=null) $msg["form_name"]=$_SESSION['view_name']; else $msg["form_name"]="tests_view";

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

    }

?>

 

<body>

    <table>

        <tr>

            <td>

                <?php

                    echo '<a href="'.$rc->create_reference_by_name('edittable',$engine).'&form_name=tests_view">';

                    echo 'Тесты';

                    echo '</a> &nbsp';

                    echo '<a href="'.$rc->create_reference_by_name('edittable',$engine).'&form_name=users_view">';

                    echo 'Пользователи';

                    echo '</a> &nbsp';

                    echo '<a href="'.$rc->create_reference_by_name('edittable',$engine).'&form_name=scores_view">';

                    echo 'Оценки тестов';

                    echo '</a> &nbsp';

                    echo '<a href="'.$rc->create_reference_by_name('edittable',$engine).'&form_name=results_view">';

                    echo 'Результаты';

                    echo '</a> &nbsp';

                ?>

            </td>

        </tr>

        <tr>

            <td>

                <?php

                    if($engine->get_table()!=null) echo $engine->get_table()->get_name()."<br>";

                    $engine->show();

                ?>

            </td>

        </tr>

    </table>

   

<?php

   

 

?>

 

</body>

 

</html>

Последнее обновление ( 22.08.2011 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги