Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Как написать гостевую книгу

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 04 Ноябрь 2009 - 15:15

Где-то прочитал, что каждый программист в своей жизни должен написать: гостевую книгу, биллинг и CMS.
Поэтому попробую написать гостевую книгу(ГК), сам процесс создания ГК сделаю от простого к сложному, т.е. начну с простого функциоанала, а потом постепенно начну усложнять.
Основные задачи, которые хочу решить в этом проекте:
1. Отделить код от дизайна, т.е. создание шабона и простого шаблонизатора.
2. Создание ядра ГК, которое будет отвечать за глобальные функции ГК.
3. Создание модульности, т.е. ГК будет реалищзована как отдельный модуль, который можно будет подключать к любому проекту.б

1 этап
Основные требование к ГК:
1. Вывод по 10 сообщений на странице, сначало идут более свежие, потом более старые сообщения.
2. Возможность добавлять сообщения всем желающим.
3. Сообщение состоит из 3 полей:
- имя автора сообщения
- название сообщения
- текст сообщения


Для начала достачно.

Покам будем создавать и отлаживать этот этам, можно предлагать, что еще можно добавит в ГК.
А так же просьба при критике кода конкретизировать свои высказывания и подкреплять кодом.

Создадим следующую структуру каталогов, соответственно в корень кинем файл index.php в котором и будет происходить основная работа:
include\ - здесь будут собираться все файлы ядра
js\ - здесь скрипты
media\ - здесь будут храниться картинки
module\ - здесь модули
templete\ - здесь шаблон
templete\ css\ - здесь будет храниться файл style.css, что в нем думаю не стоит объянять ;)
templete\ images\ - здесь будет хранится изображения используемые в дизайне

Создадим в папке include файл config.php, селедующего содержания:

config.php

<?php

if(!defined("INCLUDE")) exit('запрет на прямой доступ');

// Имя сервера базы данных
$dblocation = "localhost";

// Имя базы данных
$dbname = "guestbook";

// Имя пользователя
$dbuser = "root";

// Пароль
$dbpasswd = "";

// администратор
$dbadmin = "sc2r2bey";

// e-mail администратора
$dbemail = "admin@localhost";

// Соединяемся с сервером базы данных
$dbconnect = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbconnect)
{
echo( "<P>Сервер базы данных не доступен, зайдите позже!</P>" );
exit();
}

// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbconnect) )
{
echo( "<P>База данных не доступна, зайдите позже!</P>" );
exit();
}

// код ошибки
$error = "ошибка 404. Упс! Такой страницы не сущеструет.;)";

// количество выводимых сообщений на страницу
$number = 10;
?>


в эту же папку добавил файл function.php

в папку module добавим guestbook.php

а в папку templete файл guestbook.tpl

в базе данных, она у нас называеться создадим таблицу по названием message, ее структура описана выше:

 CREATE TABLE `guestbook`.`message` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`data_publisher` DATE NOT NULL ,
`name` VARCHAR( 50 ) NOT NULL ,
`title` VARCHAR( 50 ) NOT NULL ,
`message` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM


сам код с комментариями в следующем посте, а пока жду критику и пожелания :)

 

 

  • 0

#2 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 04 Ноябрь 2009 - 18:08

тема очень интересная

1. Отделить код от дизайна, т.е. создание шабона и простого шаблонизатора.
2. Создание ядра ГК, которое будет отвечать за глобальные функции ГК.
3. Создание модульности, т.е. ГК будет реалищзована как отдельный модуль, который можно будет подключать к любому проекту.б

а нужено ли это для такого простого скрипта? замашки как на CMS)) возможно я просто халявщик и проще подхожу к таким работам...

1. Вывод по 10 сообщений на странице, сначало идут более свежие, потом более старые сообщения.

лучше сделай чтоб через админку можно было настраивать количество выводимых сообщений и направление от старых к новым или от новых к старым.

2. Возможность добавлять сообщения всем желающим.

я думаю тут капча нужна будет, сам будешь делать или готовую возьмешь?

3. Сообщение состоит из 4 полей:
- дата публикации сообщения

мне кажется это лишнее, пользователю не надо менять эту дату, лучше будет если он не будет видеть этого поля...

Покам будем создавать и отлаживать этот этам, можно предлагать, что еще можно добавит в ГК.

а как же бб-коды?:) смайлики)

css.css не серьезно как то.. может лучше style.css?

css\ - здесь будет храниться файл css.css, что в нем думаю не стоит объянять

мне кажется папка с css нужна только тогда когда в ней будет храниться несколько файлов css, а для одного файла не стоит папку создавать. Да и вообще я бы файл с css кинул в папку template

configuration.php как то очень не привычно) config.php и все всем понятно)

// количество выводимых сообщений на страницу
$number = 10;

я выше писал про админку, но можно и так...
  • 0

#3 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 04 Ноябрь 2009 - 23:27

тема очень интересная

спасибо за такой разврнутый и ценный ответ!!!

а нужено ли это для такого простого скрипта? замашки как на CMS)) возможно я просто халявщик и проще подхожу к таким работам...

ну так я же писал, что пойдем путем от простого к сложному, целую CMS возможно не напишем, но частично реализуем, включая админку и авторизацию, чуть позже :)

лучше сделай чтоб через админку можно было настраивать количество выводимых сообщений и направление от старых к новым или от новых к старым.

смотри выше, а пока в конфиге будет ;)

я думаю тут капча нужна будет, сам будешь делать или готовую возьмешь?

добавим позже на 2 этапе, пока возьмем готовую, какую посоветуете?

мне кажется это лишнее, пользователю не надо менять эту дату, лучше будет если он не будет видеть этого поля...

разумно не публикуем, но в БД вносим

а как же бб-коды?:D смайлики)

добавим на 2 этапе, возмем парсер готовый

css.css не серьезно как то.. может лучше style.css?

дело вкуса, принимаю!

мне кажется папка с css нужна только тогда когда в ней будет храниться несколько файлов css, а для одного файла не стоит папку создавать. Да и вообще я бы файл с css кинул в папку template

идея классная, берем!

configuration.php как то очень не привычно) config.php и все всем понятно)

принимаю!

я выше писал про админку, но можно и так...

см выше...

ок, подредактировал первый пост
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 05 Ноябрь 2009 - 18:16

sc2r2bey,
структуру бы сделал такой:
includes\ - файлы включения
js\ - здесь скрипты
modules\ - модули
kernel\ - ядро какой-то системы
kernel\classes\ - классы
templetes\ - здесь шаблоны
templetes\[папка_шаблона]\images\ - здесь будет хранится изображения используемые в шаблоне

1. Отделить код от дизайна, т.е. создание шаблона и простого шаблонизатора.

Если ты файлы шаблонов ГК будешь хранить в общей папке templates, то вообще гостевая книга зависит от системы под которую ты её собираешься ставить. Может там не будет папки templates. Тут стоит подумать... Вот например Joomla-модули придерживается принципа MVC(Model-View-Controller, Модель-представление-поведение):

  • Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя свое состояние.
  • Представление (View). Отвечает за отображение информации (пользовательский интерфейс).
  • Поведение (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Важно отметить, что как представление, так и поведение зависят от модели. Однако модель не зависит ни от представления, ни от поведения. Это одно из ключевых достоинств подобного разделения. Оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели.


Создадим в папке include файл config.php, селедующего содержания:

Переместил бы файл config.php в папку ядра kernel
  • 0

#5 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 07 Ноябрь 2009 - 22:30

ядумаю на данном этапе в качестве шаблонизатор задействовать smarty
  • 0

#6 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 17 Ноябрь 2009 - 10:46

Я конечно понимаю, что замашка в дальнейшем на CMS, но если оговорено, что пишем Гостевую, то и надо писать гостевую. А если пишете CMS, то, мне кажется, не стоит начинать ее создание с Гостевой книги. Если пишем модуль гостевой, то шаблонизатор должен быть не в модуле а в самой CMS. И если все таки это просто гостевая книга, то, мне кажется, слишком много чести для нее и труда. Простенький скрипт раскидывается по кучам папок. Нерационально. Любое программирование стремится к сокращению кода и оптимизации. А тут на лицо его невостребованное увеличение.
Но за идею статьи "+". =)
  • 0

#7 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 17 Ноябрь 2009 - 17:56

gaaarfild, мне кажется этот скрипт пишется в целях самообучения на реальном примере. Если начать сразу писать cms то сталкнешься с еще кучей разных проблем. Проще научиться на простых примерах, как гостевая книга
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 17 Ноябрь 2009 - 19:05

Евгений, ты не понял. gaaarfild говорит, что если ты пишешь скрипт гостевой книги, то не надо описывать подобное как:

2. Создание ядра ГК, которое будет отвечать за глобальные функции ГК.
3. Создание модульности, т.е. ГК будет реалищзована как отдельный модуль, который можно будет подключать к любому проекту.

Создание ядра ГК - это другое понятие нежеле выше, у модуля нет ядра.
Создание модульности - так же другое понятие, надо было сказать возможность подключения модуля в систему. Кстати каждый модуль пишется под свою систему, или же пишется модуль и к нему дописывается мост для включения в систему. Модуля под все системы разом не написать, иначе система не будет нормальной.

Так как гостевая сама по себе модуль, какое-там ядро, какая там модульность? Это уже замах на CMS систему которой здесь даже не будет пахнуть.
Модуль должен выполнять только те задачи, которые на него возложены. И расширять модули, которые сами являются расширениями это тавтология. Стоит только взглянуть что же мы можем написать в виде модуля для гостевой книги? Случаем не CMS ли? Вот в этом и пироги.
  • 0

#9 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 18 Ноябрь 2009 - 16:03

Короче начинаем писать CMS с модуля. А под него напишем ядро системы. =) Ну как я расшифровал?! =)
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru