« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Функция AccessResource

Защита доступа к коду

FAQ по работе с сетью и интернетом

ГЛАВА 3. Пакеты и интерфейсы

Resource Governor - управление аппаратными ресурсами в MS SQL Server 2008. Николай Денищенко, Ян Либерман

Работа с библиотеками динамической компоновки (DLL)

Описание функций C (Си) / C++ - sbrk

Функция GetScrollPos

Что нас ждет в PHP 6

Функция GetDlgItemInt




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 91
Пользователей: 0

Статьи:: Интернет технологии :: PHP :: CakePHP: Добавляем «каменты» в блог.



отправить ссылку другу версия для печати  Обсудить на форуме

CakePHP: Добавляем «каменты» в блог.

Итак, мы решили начать программировать «по понятиям» и наконец разобраться с каким-нибудь фреймворком. Перед нами встаёт мучительный выбор, какой же фреймворк для этого использовать. Для этого можно найти кучу статей, обзоров, сравнительных анализов скорости, производительности, удобства использования и установки, а можно просто набрать в гугле «php framework» и кликнуть «Мне повезёт».



Ура, мы только что выбрали для разработки фрэймворк под названием CakePHP!
Конечно же читать про его достоинства и недостатки у нас нет времени, нам нужно как можно быстрее реализовать наш проект. Поэтому мы пишем в поиске tutorial и попадаем на статью о том, как за 5 минут наляпать маленький блог.

Статья эта начинается с описания того, как установить CakePHP в свой проект. Рассказывает о том, чего нужно хранить в каждой папочке и для чего они нужны.
Потом переходит сразу к делу, предлагает вам создать таблицу, настроить доступ к MySQL (почему-то именно в таком порядке, а не наоборот), проверить, правильно ли настроен mod_rewrite в апаче. И тут же предлагает приступить к созданию блога.
Блог этот представляет собой таблицу, в которой содержатся посты. Мы можем добавлять, редактировать и удалять посты. Надо заметить, что всё это действительно очень просто. Почти так же просто, как и на рельсах.

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

Но создав этот блог по этому туториалу, мы вдруг понимаем, что самого главного, ради чего ведутся все блоги, у нас нет. Это каменты (или «комментарии» для любителей чистоты языка). В панике мы начинаем гуглить, ища расширенный туториал, но убеждаемся, что кроме компонент заоблачной сложности нам ничего не найти. И тогда мы решаемся на отчаянный шаг: добавим функционал каментов сами.

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

CREATE TABLE `comments` (
`id` int(11) NOT NULL auto_increment,
`post` int(11) default NULL,
`comment` text NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `comments` VALUES (1, 1, 'This is a comment to the first post.', NOW( ), '0000-00-00 00:00:00');
INSERT INTO `comments` VALUES (2, 2, 'The comment to second post.', NOW( ), '0000-00-00 00:00:00');

Этот запрос создал нам таблицу `comments` и добавил в неё два камента. К первой и второй записи соответственно.

Теперь надо сделать так, чтобы эти каменты были видны. Мы слыхали про MVC, поэтому сразу идём в контроллер постов (posts_controller.php). И добавляем там следующую строчку:

var $uses = array('Post', 'Comment');

Переменная $uses контроллера отвечает за те модели, которые будет использовать контроллер. Если эта переменная не задана, то по умолчанию он будет использовать только ту модель, чьим контроллером он собственно и является. То есть PostsController будет использовать только Post.

Тут, как видно, мы указываем контроллеру, что тот будет использовать модели Post и Comment.

Теперь отредактируем функцию контроллера, которая отвечает за отображение собственно поста.

function view($id)
{
$this->Post->id = $id;
$this->set('post',$this->Post->read());
// добавляем следующую строчку:
$this->set('comments' , $this->Comment->findAllByPost($id));
}

Этой новой строчкой, мы добавляем во вью новую переменную comment и устанавливаем её значение результату $this->Comment->findAllByPost($id).

Тут надо сказать пару слов о замечательном методе findAllByPost.

Умный CakePHP предоставляет классам, унаследованным от AppModel использовать методы типа findAllBy ( ). Которые найдут все записи из таблицы, соответствующей модели, где = . Здорово, правда?

Поэтому $this->Comment->findAllByPost($id) вернёт все каменты, принадлежащие отображаемому посту.

Теперь в файле view.thtml, который находится в папке app/views/posts добавим отображение этих каментов. Для этого в самый конец этого файла добавим:

<?php
foreach($comments as $comment):
echo '<p>'.$comment['Comment']['comment'].'</p><br/>';
endforeach;
?>

Тут вью пробежит по всем каментам, что мы передали во вью в предыдущем кусочке кода и выведит их на экран. Круто? Круто!

Но в каментах самое главное, чтобы их могли оставлять. Поэтому нам нужна форма добавления каментов внизу страницы поста. В этом нам поможет помощник форм.
var $helpers = array('Html', 'Form');

Эта строчка в файле posts_controller.php указывает контроллеру, какие помощники он будет использовать в своей работе. Нашему контроллеру постов помогают соответственно Html и Form.

Во всё тот же файл view.thtml добавляем следующее:

<?php
echo $form->create('Comment');
echo $form->hidden('post', array('value' => $post['Post']['id'])); echo $form->input('comment', array('type'=>'textarea'));
echo $form->submit('Submit');

echo $form->end();
?>

Это наш маленький помощник создал форму добавления камента. В нём скрытым полем (hidden) указан айдишник поста, а в textarea предлагается ввести камент.

Теперь нам нужно что-то, что сможет контролировать добавление этого камента. Это будет контроллер комментариев:

<?php
class CommentsController extends AppController
{
var $name = 'Comments';
function add()
{
if (!empty($this->data))
{
if ($this->Comment->save($this->data))
{
$this->Session->setFlash('Redirecting');
$this->redirect('/posts/view/'.$this->data['Comment']['post']);
}
else
$this->Session->setFlash('You fail');
}
}
}

У контроллера каментов всего один обработчик одного события «add». Он идентичен такому же обработчику добавления контроллера постов, только редиректит в другое место.

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

Источник: http://q-styler.habrahabr.ru/




Рубрика: PHP




Вышел MySQL 5.1.30, первый стабильный рели....

MySQL

После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:


Подробнее... | Рубрика: MySQL | Добавлено: 28.11.2008

Тестирование параллельных программ.

Тестирование

Тестирование параллельного программного обеспечения представляет собой более сложную задачу по сравнению с тестированием последовательной программы. Программист должен знать о подводных камнях при тестировании параллельного кода, имеющихся методологиях и инструментарии.


Подробнее... | Рубрика: Тестирование | Добавлено: 28.11.2008

Архитектура AMD64 (EM64T).

Архитектура AMD

Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.


Подробнее... | Рубрика: Архитектура AMD | Добавлено: 27.11.2008

Остальные статьи:

Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия