Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 530

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/cache.php on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/theme.php on line 623
Программируем на CakePHP


Дек 10 2008

Мягкое удаление с помощью Soft Delete Behavior

Раздел: МоделиМета @ 23:29

С помощью этого компонента вы можете использовать в своих проектах «мягкое удаление» - т.е. установку флага для пометки удаленных записей, вместо реального их удаления. Зачем это нужно? Например, для хранения предыдущих версий отредактированных записей на блоге, для сохранения архива старых товаров в магазине — применений масса. Я стараюсь во всех своих проектах использовать «мягкое удаление» даже просто для того чтобы исключить ошибку случайного удаления. Заказчики часто обращаются: «ой, а мы удалили, а потом передумали, а можно восстановить?».

Внимание! Я еще не тестировал этот компонент с CakePHP 1.2 RC3. Судя по отзывам в комментариях к компоненту, есть проблемы с совместимостью. Эта запись — перевод документации, в следующей я опишу возможные проблемы и пути их решения.

Читать дальше “Мягкое удаление с помощью Soft Delete Behavior”

Теги: , , ,


Дек 09 2008

Выносите максимум логики в модели

Раздел: МоделиМета @ 08:36

Просмотрите код ваших контроллеров. Если часто встречаются конструкции типа

$this->Product->recursive = -1;
$hits = $this->Product->find('all',array('conditions'=>'Product.image <> "no_image"','order'=>'Product.hit DESC, Product.added DESC','limit'=>9));

то задумайтесь — а место ли им в контроллере?

В чем идея модели? Предоставлять интерфейс к данным. Т.е. Модель должна вернуть уже готовые к отображению данные, в контроллере — только связь с внешним видом. Весь выше приведенный код стоило бы заменить методом в модели, например getHits($num). Тогда вызов в контроллере упростился бы до:

$hits = $this->Product->getHits(9);

Логично?

Этот принцип называется «толстые модели, худые контроллеры», он рекомендует переносить максимально возможную часть логики (естественно, логики поиска данных) приложения в модель.

Теги: , ,


Дек 08 2008

Отладка проектов на CakePHP с использованием DebugKit

Раздел: ПлагиныМета @ 23:24

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

DebugKit предоставляет доступ к отладочной информации вашего приложения. С помощью него можно просматривать содержимое сессии, запроса, sql-лог, а также информацию о времени выполнения и производительности. И все это — в любом вашем проекте. Плагин совместим только с CakePHP 1.2 начиная с RC3.

Читать дальше “Отладка проектов на CakePHP с использованием DebugKit”

Теги: , , ,


Дек 05 2008

Заменяем стандартные хелперы не трогая ядро CakePHP

Раздел: ХелперыМета @ 08:27

Я уже писал заметку о расширении функциональности стандартных хелперов, но сегодня наткнулся на интересный пост на блоге cakebaker’а и в его обсуждении Admad привел замечательный пример как добиться эффекта гораздо быстрее и проще.

Если у вас уже написан проект с применением стандартных хелперов, или допустим не хватает их возможностей, но не хочется создавать отдельный новый хелпер — чтобы не приходилось вызывать $html2-»image() вместо $html-»image() - то можно применить такой прием:

Читать дальше “Заменяем стандартные хелперы не трогая ядро CakePHP”

Теги: ,


Дек 04 2008

И снова про основы

Раздел: МоделиМета @ 12:32

Попробую для новичков более подробно описать особенности взаимодействия частей приложения на CakePHP.

Первая основополагающая идея заложена в понятии «Модель». Что такое модель? Это объектно-ориентированное представление данных внутри приложения, с интуитивно-понятным интерфейсом. Под интерфейсом тут надо понимать не внешний вид, а именно способ взаимодействия с другими объектами приложения.

Чтобы было проще понять, приведу пример.

Читать дальше “И снова про основы”

Теги: , ,


Дек 03 2008

Автоматическая загрузка внешних библиотек

Раздел: Веб-разработкаМета @ 09:33

Перевод записи Auto-loading vendor files (or any other file) с блога Cakebaker’a.

Если вы используете внешние классы, не относящиеся к CakePHP (т.е. не являющиеся готовыми компонентами, хелперами, и т.д., например - PhpMailer или классы Pear), вам приходится импортировать эти классы вручную с помощью вызова App::import(’Vendor’, ‘ClassName’). Этот вызов работает если ваши классы находятся в папке ‘vendors’. То есть в каждом контроллере, или модели, или любом другом месте где вы хотите использовать внешний класс, вам приходится его сначала импортировать. Это не очень удобно.

Читать дальше “Автоматическая загрузка внешних библиотек”

Теги: , ,


Дек 02 2008

Добавление товаров в корзину на AJAX

Раздел: Веб-разработкаМета @ 23:18

Задача из области юзабилити — как добавить товар в корзину, и при этом оставить человека на той же странице, причем желательно даже без перезагрузки оной? Раньше было проблемой, последние пару лет — везде делается на ajax. За примерами реализации далеко ходить не надо — тот же Ozon.ru вовсю пользуется ajax’ом. Вот в своих проектах нам захотелось сделать современную корзину. Оказалось, на CakePHP это совсем не сложно.

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

Читать дальше “Добавление товаров в корзину на AJAX”

Теги: ,


Дек 01 2008

Проектирование веб-сайтов

Раздел: Веб-разработкаМета @ 08:43

Как показала практика, один из самых сложных вопросов это не как написать сайт, а какие именно возможности в него закладывать, как его спроектировать чтобы он получился успешный и окупаемый. Даже программисты постоянно ленятся и пытаются писать ровно то что им скажешь не включая мозги, работают «в режиме кодера». Так делать не следует — ни развития, ни качественного проекта таким способом не создать.

Например, приходит заказчик, говорит — хочу сделать сайт для своего магазина, чтобы ко мне больше народу приезжало, и даже через интернет могли письмо скинуть и оптом заказать. Торгует его магазин, ну скажем всякими красками, лаками и прочей химией. Заказчик вполне определенно высказал свои потребности (что кстати редко бывает).

Читать дальше “Проектирование веб-сайтов”

Теги: ,


Окт 16 2008

Настройка для использования консоли Bake в CakePHP 1.2

Раздел: НастройкиМета @ 23:10

Консоль bake — чрезвычайно удобное средство для быстрого создания скелета будущего приложения CakePHP. Bake позволяет простым выбором пунктов меню создать модели, контроллеры и шаблоны для всех ваших таблиц. Причем шаблоны и контроллеры могут быть как со scaffolding’ом, так и полные, без него. Вот эти самые «полные» скелеты очень удобно редактировать, приводя к нужному, задуманному виду.

Есть несколько методов запуска bake, я расскажу про используемый мной. Все инструкции — для Windows.

Читать дальше “Настройка для использования консоли Bake в CakePHP 1.2″

Теги: ,


Окт 09 2008

SimpleAcl — простой компонент для авторизации и проверки прав пользователей

Раздел: БезопасностьМета @ 23:42

В большинстве приложений необходимо не только отображать данные, но и взаимодействовать с пользователями. И даже не просто взаимодействовать, а по разному работать с разными группами. Даже в этом блоге — есть администраторы, есть зарегистрированные пользователи, а есть просто читатели. Чем админ отличается от обычного пользователя? Тем что у него есть доступ к определенным функциям. Как определить что пользователь — админ? Авторизовать его, узнать логин и пароль.

Эти задачи — авторизацию и определение прав доступа к различным функциям — приходится решать при разработке каждого сайта. В CakePHP есть встроенный компонент Acl для работы с правами, но он слишком навороченный для простых сайтов. Часто, если надо просто ограничить доступ к админке, мы в своей студии используем простой ValidationComponent, единственное что модифицированный под использование Http-Digest авторизации.

Читать дальше “SimpleAcl — простой компонент для авторизации и проверки прав пользователей”

Теги: , , , , ,


Следующая страница »