Создание встроенного модуля CMS. Часть 3 — различия между версиями

Материал из Школьный портал: справочника
Перейти к: навигация, поиск
(Самый простой вариант)
Строка 24: Строка 24:
  
 
Обратите внимание, для сайта всё ещё действует правило, обязывающее возвращать данные (return). А в админке следует использовать print. Разумеется, это никак не мешает накапливать данные в переменных и под конец выдать их в нужном порядке.
 
Обратите внимание, для сайта всё ещё действует правило, обязывающее возвращать данные (return). А в админке следует использовать print. Разумеется, это никак не мешает накапливать данные в переменных и под конец выдать их в нужном порядке.
 +
 +
== Собственная таблица для произвольных данных ==
 +
 +
Сделаем таблицу:
 +
 +
<source lang="sql">
 +
CREATE TABLE GUESTBOOK (
 +
    ID        INTEGER NOT NULL,
 +
    NAME      VARCHAR(128),
 +
    TEXT      BLOB SUB_TYPE 1 SEGMENT SIZE 80,
 +
    POST_DATE  TIMESTAMP,
 +
    published  SMALLINT DEFAULT 0,
 +
    OWNER      INTEGER NOT NULL
 +
);
 +
</source>
 +
 +
Пройдёмся по полям:
 +
* '''ID''' — идентификатор объекта, Это общая рекомендация проектирования баз данных, рекомендуем всегда создавать его для любых, это намного упростит вам дальнейшую разработку.
 +
* '''NAME, TEXT, POST_DATE''' — это уже произвольные поля, которые могут быть какими угодно для потребностей вашего нового модуля. Для простейшего примера гостевой книги их будет достаточно.
 +
* '''published''' — признак опубликованности. Для модуля новостей это может быть признаком черновика; для навигации это может быть галочкой, включающей пункт в меню; для гостевой книги это будет признак одобрения модератором. 0 будет означать "сообщение на рассмотрении", 1 — "одобрено к показу на сайте".
 +
* '''OWNER''' — владелец сайта. '''6''' у нас всегда школльный сайт, остальное — блоги. Об этом важно помнить при разработке всех модулей, которые будут писать и читать из базы. Вам не нужно каждый раз выяснять владельца, [[CMS]] уже заботится об этом. Когда выполняется модуль, переменная <code>$owner</code> уже содержит какое-то число, равное идентификатору авторизованного пользователя в админке либо автора сайта. Вам остаётся только использовать его для вставки в базу данных для этого владельца или выбирать из базы данные только для такого владельца. Таки образом реализуется хранение данных для сайта и блогов в одной таблице. Ниже будет приведён пример использования владельца.

Версия 13:15, 17 сентября 2012

Статья подразумевает, что вы уже прочитали первую часть.

Рассматривается вопрос разделения модуля на часть для посетителей и часть для администратора сайта.

Статья пишется по горячим следам разработки модуля гостевой книги. Поэтому сразу сделаем допущение, что внутреннее имя у него guestbook.

Самый простой вариант

Вывод разных строк в зависимости от того, сайт это или админка.

sub guestbook()
{
	if ( defined param('edt') )
	{
		print "Hello, admin interface!";
	}
	else
	{
		return "Hello, site!";
	}
}

Обратите внимание, для сайта всё ещё действует правило, обязывающее возвращать данные (return). А в админке следует использовать print. Разумеется, это никак не мешает накапливать данные в переменных и под конец выдать их в нужном порядке.

Собственная таблица для произвольных данных

Сделаем таблицу:

CREATE TABLE GUESTBOOK (
    ID         INTEGER NOT NULL,
    NAME       VARCHAR(128),
    TEXT       BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    POST_DATE  TIMESTAMP,
    published  SMALLINT DEFAULT 0,
    OWNER      INTEGER NOT NULL
);

Пройдёмся по полям:

  • ID — идентификатор объекта, Это общая рекомендация проектирования баз данных, рекомендуем всегда создавать его для любых, это намного упростит вам дальнейшую разработку.
  • NAME, TEXT, POST_DATE — это уже произвольные поля, которые могут быть какими угодно для потребностей вашего нового модуля. Для простейшего примера гостевой книги их будет достаточно.
  • published — признак опубликованности. Для модуля новостей это может быть признаком черновика; для навигации это может быть галочкой, включающей пункт в меню; для гостевой книги это будет признак одобрения модератором. 0 будет означать "сообщение на рассмотрении", 1 — "одобрено к показу на сайте".
  • OWNER — владелец сайта. 6 у нас всегда школльный сайт, остальное — блоги. Об этом важно помнить при разработке всех модулей, которые будут писать и читать из базы. Вам не нужно каждый раз выяснять владельца, CMS уже заботится об этом. Когда выполняется модуль, переменная $owner уже содержит какое-то число, равное идентификатору авторизованного пользователя в админке либо автора сайта. Вам остаётся только использовать его для вставки в базу данных для этого владельца или выбирать из базы данные только для такого владельца. Таки образом реализуется хранение данных для сайта и блогов в одной таблице. Ниже будет приведён пример использования владельца.