Тема: CakePHP

Генерация хлебных крошек

Использование функций addCrumb, getCrumbs и getCrumbList из хелпера Html для создания хлебных крошек. С помощью этих инструментов можно быстро создать логику для вывода хлебных крошек на сайт.

CakePHP. Запуск функций Shell.

Если Вам необходимо выполнять одинаковые действия в консоле - например по планировщику, а так же по какому то действию пользователя, то имеет смысл из контроллера или модели вызвать функцию описанную в вашем классе Shell.

Для того что бы запустить код написанный с Console/Command необходимо в начале импортировать интересующий Вас класс, а потом вызвать нужную функцию.

//Console/Command/FeedShell.php
App::uses('AppShell', 'Console/Command');
class FeedShell extends AppShell {
public function main() {
//...
}
public function load($feed_id) {
//...
}
}

Далее в том месте где хотите использовать эту функцию пишем так:

App::uses('FeedShell', 'Console/Command');
$Feed = new FeedShell();
$Feed->load($this->id);

Я например это использую в модели, после сохранения записи.

Одно ядро CakePHP - много проектов

Передо мной была поставлена поставлена задача - с помощью одного ядра CakePHP обрабатывать несколько приложений - папок app. Нечто подобное есть в официальной документации book.cakephp.org но как выяснилось это всего лишь разбрасывание файлов с библиотеками по файловой системе. Затем я начал копать в сторону .htaccess и у меня получилось нечто подобное:

<ifmodule mod_rewrite.c="">
RewriteEngine on
 
RewriteCond %{HTTP_HOST}  ^test\.name.*
RewriteRule    ^$ app-test/webroot/    [L]
RewriteCond %{HTTP_HOST}  ^test\.name.*
RewriteRule    (.*) app-test/webroot/$1 [L]
&amp;amp;amp;amp;nbsp;
RewriteRule    ^$ app/webroot/    [L]
RewriteRule    (.*) app/webroot/$1 [L]
</ifmodule>

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

Локализация в CakePHP. Перевести статический текст на казахский язык.

Создать сайт на нескольких языках в СakePHP достаточно легко, используя заранее определенные в библиотеках локали для интернационализации. Список локалей довольно обширен и соответствует стандарту ISO  639-3 (таблица кодов языков), но при этом не содержит определения казахского языка. Как же быть, когда необходимо чтобы сайт поддерживал, к примеру - русский(ru) и казахский (kk) языки. Ведь это один из самых распространенных вариантов сайтов в сети Казнэта.

Реализовать это достаточно просто, пусть и не совсем правильно. После прочтения прошу пирожками не закидывать ...  :)

Cекреты Admin Routing в CakePHP

В CakePHP администратор маршрутов (admin routing) довольно прост: вы можете включить его, вы можете отключить его, вы можете изменить преффикс для него.  Но это не все действия, которые вы можете провести с ним. Правильно?

Я собираюсь рассказать маленький секрет про этот кусок кода:

Configure::write('Routing.admin', 'admin');
CakePHP 1.3 - Как подружить плагин и тему

Тема для оформления страниц

Пользоваться темами(Themes) в CakePHP 1.3 я начала сравнительно недавно и сразу оценила их простоту и удобство. Не нужно пересматривать код по несколько раз для разных проектов, достаточно просто создать дополнительную тему, разместить в нее необходимые вьювы и все пойдет ка по маслу.

Очень понравилась статья на ruseller.com - "CakePHP с нуля: создаем тему. Часть 9 из 10". Хоть я и не пользовалась уроками с 1го по 9й, но вот сам 9й зацепил - просто и понятно. В продолжение темы, может быть как урок 9.1 хотела немного углубить познания, или осветить вопрос, как же подружить Тему и Плагин.

CakePHP/Shell или как заставить shell использовать компоненты

Shell используется в cakePHP для запуска отложенных задач вашего приложения. Если вы в первый раз слышите про shell, то вам следует ознакомиться с неплохим мануалом и примерами на официальном сайте cakePHP и уже наконец приобщаться к использованию технологий облегчающих разработку.

Хочу поделиться с Вами решением проблемы использования в shell компонентов, определенных cakePHP, например таких как Email, Controller (ваш или с основы фреймворка) и другие. Надеюсь что этот пост поможет свести к минимуму ваши изыскания на зарубежных форумах хоть какой-то толики информации в такой ситуации... как искала я в свое время...

Итак, хотите сделать рассылку писем по расписанию на кроне или же исполнить функцию, определенную в контроллере через выполнение задач Shell? .. тогда прошу

Бехавер транзакций для CakePHP 1.3

Одно из отличиев версий 1.2 и 1.3 в том что в 1.3 из ядра был убран бехавер с транзакциями. Теперь необходимо для использования транзакций сначала получить из модели источник данных (DataSource), а затем через него открывать транзакцию. Поскольку при переносе одного из проектов на версию 1.3 мне необходимо было бы отыскивать во всему прикладу эти вызовы (а они использовались часто), то я решил реализовать этот бехавер для 1.3.

Конфиги в CakePHP из базы данных

Рано или поздно придется столкнуться с тем что Вам могут понадобиться какие либо переменные в вашем сайте на CakePHP, которые необходимо относительно часто изменять и которые используются в нескольким местах. Самый лучший способ, по моему мнению, это использовать компонент Configure, в который можно добавлять любые переменные, а потом считывать их когда они необходимы.

Но проблема в том, что эти переменные обычно объявляются в самом програмном коде и что бы изменить какие то параметры, например маску ввода даты, количество выводимых комментариев на странице или, допустим язык пользователя по умолчанию, то вам все равно придется открывать файл, где объявлена переменная и изменять ее. В этой статье я покажу Вам как можно сохранять такие переменные в вашей БД и изменять их с помощью простого графического интерфейса.

setFlash сообщения в CakePHP используя эффекты jQuery

Всем привет, я хочу рассказать как можно изменить вид для сообщений setflash в CakePHP. Я не могу сказать что это сильно отличается от стандартных элементов, но я добавил CSS и jQuery эффекты. Теперь это смотрится иначе, не как обычное сообщение CakePHP. И так за дело.

Работа с файлами в CakePHP

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

И так, начнем...

CakePHP - Структура плагина или как создать свой первый плагин

В последнее время мне все больше и плотнее приходится работать с фреймворком cakePHP. И с каждым разом он не перестает удивлять своей замечательной подборкой модулей и возможностью расширений.

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

Использовать плагины можно в различных комбинациях. Плагин - это как мини-приложение в вашем проекте. Он связан с ним только конфигурационными файлами - соединение с БД database.ctp и настройка роутов routers.ctp, которые при желании можно же конечно переопределить в самом плагине .. ;) Вот примерно такая типовая структура будет у всех плагинов, за исключением ненужных модулей.

В состав пакета плагина также входить могут и контроллеры, и компоненты, хелперы, представления и другие элементы. Все выше перечисленные элементы будут храниться в этой папке, папке плагина, и обязательно иметь два дополнительных файла, расширяющих возможности использования общих строк кода для контроллеров и моделей, соответственно AppController и AppModel.

Вышел первый стабильный релиз CakePHP 1.3

После четырех версий релиз-кандидатов вышла стабильная версия CakePHP 1.3. По сравнению с версией 1.2 в новой 1.3 реализовано много новых функций еще более облегчающих разработку приложений.

Ниже я попытаюсь привести основные изменения в новой версии, перевод с официального сайта.

Компоненты

SecurityComponent

Различные методы requireXX, такие как requireGet и requirePost теперь принимают в качестве параметра строковый массив.

$this->Security->requirePost(array( 'edit' , 'update' ));