С помощью этого компонента вы можете использовать в своих проектах «мягкое удаление» - т.е. установку флага для пометки удаленных записей, вместо реального их удаления. Зачем это нужно? Например, для хранения предыдущих версий отредактированных записей на блоге, для сохранения архива старых товаров в магазине — применений масса. Я стараюсь во всех своих проектах использовать «мягкое удаление» даже просто для того чтобы исключить ошибку случайного удаления. Заказчики часто обращаются: «ой, а мы удалили, а потом передумали, а можно восстановить?».
Внимание! Я еще не тестировал этот компонент с CakePHP 1.2 RC3. Судя по отзывам в комментариях к компоненту, есть проблемы с совместимостью. Эта запись — перевод документации, в следующей я опишу возможные проблемы и пути их решения.
Читать дальше “Мягкое удаление с помощью Soft Delete Behavior”
Теги: cakephp, компонент, модель, пример
Просмотрите код ваших контроллеров. Если часто встречаются конструкции типа
$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);
Логично?
Этот принцип называется «толстые модели, худые контроллеры», он рекомендует переносить максимально возможную часть логики (естественно, логики поиска данных) приложения в модель.
Теги: cakephp, модель, совет
Сразу в двух публикациях нашел ссылки на замечательный плагин к CakePHP – DebugKit.
DebugKit предоставляет доступ к отладочной информации вашего приложения. С помощью него можно просматривать содержимое сессии, запроса, sql-лог, а также информацию о времени выполнения и производительности. И все это — в любом вашем проекте. Плагин совместим только с CakePHP 1.2 начиная с RC3.
Читать дальше “Отладка проектов на CakePHP с использованием DebugKit”
Теги: cakephp, отладка, плагин, шаблон
Я уже писал заметку о расширении функциональности стандартных хелперов, но сегодня наткнулся на интересный пост на блоге cakebaker’а и в его обсуждении Admad привел замечательный пример как добиться эффекта гораздо быстрее и проще.
Если у вас уже написан проект с применением стандартных хелперов, или допустим не хватает их возможностей, но не хочется создавать отдельный новый хелпер — чтобы не приходилось вызывать $html2-»image() вместо $html-»image() - то можно применить такой прием:
Читать дальше “Заменяем стандартные хелперы не трогая ядро CakePHP”
Теги: cakephp, хелпер
Попробую для новичков более подробно описать особенности взаимодействия частей приложения на CakePHP.
Первая основополагающая идея заложена в понятии «Модель». Что такое модель? Это объектно-ориентированное представление данных внутри приложения, с интуитивно-понятным интерфейсом. Под интерфейсом тут надо понимать не внешний вид, а именно способ взаимодействия с другими объектами приложения.
Чтобы было проще понять, приведу пример.
Читать дальше “И снова про основы”
Теги: cakephp, модель, планирование
Перевод записи Auto-loading vendor files (or any other file) с блога Cakebaker’a.
Если вы используете внешние классы, не относящиеся к CakePHP (т.е. не являющиеся готовыми компонентами, хелперами, и т.д., например - PhpMailer или классы Pear), вам приходится импортировать эти классы вручную с помощью вызова App::import(’Vendor’, ‘ClassName’). Этот вызов работает если ваши классы находятся в папке ‘vendors’. То есть в каждом контроллере, или модели, или любом другом месте где вы хотите использовать внешний класс, вам приходится его сначала импортировать. Это не очень удобно.
Читать дальше “Автоматическая загрузка внешних библиотек”
Теги: cakephp, php, совет
Задача из области юзабилити — как добавить товар в корзину, и при этом оставить человека на той же странице, причем желательно даже без перезагрузки оной? Раньше было проблемой, последние пару лет — везде делается на ajax. За примерами реализации далеко ходить не надо — тот же Ozon.ru вовсю пользуется ajax’ом. Вот в своих проектах нам захотелось сделать современную корзину. Оказалось, на CakePHP это совсем не сложно.
Наверное, стоит описать процесс подробно, чтобы в следующих постах просто ссылаться на этот за предварительными настройками.
Читать дальше “Добавление товаров в корзину на AJAX”
Теги: ajax, cakephp
Как показала практика, один из самых сложных вопросов это не как написать сайт, а какие именно возможности в него закладывать, как его спроектировать чтобы он получился успешный и окупаемый. Даже программисты постоянно ленятся и пытаются писать ровно то что им скажешь не включая мозги, работают «в режиме кодера». Так делать не следует — ни развития, ни качественного проекта таким способом не создать.
Например, приходит заказчик, говорит — хочу сделать сайт для своего магазина, чтобы ко мне больше народу приезжало, и даже через интернет могли письмо скинуть и оптом заказать. Торгует его магазин, ну скажем всякими красками, лаками и прочей химией. Заказчик вполне определенно высказал свои потребности (что кстати редко бывает).
Читать дальше “Проектирование веб-сайтов”
Теги: планирование, работа
Консоль bake — чрезвычайно удобное средство для быстрого создания скелета будущего приложения CakePHP. Bake позволяет простым выбором пунктов меню создать модели, контроллеры и шаблоны для всех ваших таблиц. Причем шаблоны и контроллеры могут быть как со scaffolding’ом, так и полные, без него. Вот эти самые «полные» скелеты очень удобно редактировать, приводя к нужному, задуманному виду.
Есть несколько методов запуска bake, я расскажу про используемый мной. Все инструкции — для Windows.
Читать дальше “Настройка для использования консоли Bake в CakePHP 1.2″
Теги: bake, cakephp
В большинстве приложений необходимо не только отображать данные, но и взаимодействовать с пользователями. И даже не просто взаимодействовать, а по разному работать с разными группами. Даже в этом блоге — есть администраторы, есть зарегистрированные пользователи, а есть просто читатели. Чем админ отличается от обычного пользователя? Тем что у него есть доступ к определенным функциям. Как определить что пользователь — админ? Авторизовать его, узнать логин и пароль.
Эти задачи — авторизацию и определение прав доступа к различным функциям — приходится решать при разработке каждого сайта. В CakePHP есть встроенный компонент Acl для работы с правами, но он слишком навороченный для простых сайтов. Часто, если надо просто ограничить доступ к админке, мы в своей студии используем простой ValidationComponent, единственное что модифицированный под использование Http-Digest авторизации.
Читать дальше “SimpleAcl — простой компонент для авторизации и проверки прав пользователей”
Теги: cakephp, авторизация, модель, пример, форма, шаблон