createUrl() в Yii

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

/news — модуль (не забывайте ставить слеш вначале, так как из-за этого и появилась проблема)
/default/view — контроллер и экшен
[‘id’=>$data->news->id] — параметр который передается GET-от

Использования CDbCriteria в Yii

Пример использование CDbCriteria в Yii

 

Форматирование цены с пробелами PHP

По работе нужно было выводить цену из базы формата 12345.00 так что бы все что после точки отсутствовало, а само число приобретало красивый вид с пробелом — 12 345

Для того что бы отформатировать цену с проблема можно воспользоваться встроенной функцией number_format

Функция принимает один, два или четыре аргумента (не три):

Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой («,») между каждыми тремя цифрами.

Если переданы два аргумента, number будет отформатирован с decimals знаками после точки («.») и с запятой («,») между каждыми тремя цифрами.

Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделителем между между каждыми тремя цифрами, при этом в качестве десятичной точки будет использован dec_point, а в качестве разделителя групп — thousands_sep.

Код примера:

Результат — 12 455 778 P

Yii: scope фильтрация, фильтрация по умолчанию, отмена фильтрации по умолчанию

Имеется модель (класс, наследник CActiveRecord), соответствующая некоторой таблице реляционной базы данных.
Задача — сделать так, чтобы при поиске элементов в данной таблице они изначально отфильтровывались по какому-либо критерию.

Поясню на примере. В таблице user хранятся пользователи различных типов: студенты, преподаватели, абитуриенты (тип задается значением поля role таблицы: student, prepod, abiturient). Необходимо, чтобы все возможные запросы на выборку данных из этой таблицы через данный класс изначально работали только со студентами.

Для решения данной задачи в Yii предусмотрен удобный механизм Scope, который позволяет на уровне класса для запросов задавать подобные предварительные условия.

Вот некоторые примеры кода, демонстрирующие данную возможность.

1. Scope по умолчанию

В класс-модель добавляем метод defaultScope. В нем задаем те предварительные условия, которые требуются

Теперь при обращениях к объектам этого класса мы всегда будем работать только со студентами, например

вернет всех активных студентов (без активных преподавателей и абитуриентов).

Если требуется отменить фильтр по умолчанию (по какой-либо причине), необходимо воспользоваться в запросах методом resetScope(). Пример:

2. Именованные Scope

Кроме Scope по умолчанию, вы можете задать любое число специфичных фильтров. Они задаются через переопределение метода scopes.
Пример, который реализует три фильтра: students, prepods и abiturients

В класс-модель добавляем метод scopes:

Как используем? Добавляем фильтр в запрос (предполагается, что метод defaultScope из пункта 1 данного поста не задан, иначе запросы 2 и 3 вернут пустое значение не смотря на наличие записей в таблице):

И напоследок еще несколько интересных возможностей фильтрации.

— В одном запросе могут использоваться сразу несколько фильтров.

Например, если к добавленным в п. 2 фильтрам добавить фильтр only10, который будет ограничивать вывод только 10-ю первыми записями

можно будет выполнять следующие запросы

— существует альтернативный способ создания дополнительного фильтра, который позволяет использовать параметры при вызове фильтра
Для этого необходимо добавить в класс — модель метод с уникальным именем (именем фильтра) следующего содержания:

Вызов будет таким

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

Выгрузка в CSV

Очень полезная вещь, для реализации выгрузки
вам достаточно передать dataProvider и настроить поля которые будут импортироваться

 

Миграции в yii — примеры

Примеры миграций

Создание таблицы

[php] class m120302_172329_create_tbl_news extends CDbMigration
{
public function up()
{
$this->createTable(‘el_slider’, array(
‘id’ => ‘pk’,
‘title’ => ‘VARCHAR(200) NOT NULL’,
‘desc’ => ‘text NOT NULL’,
‘link’ => ‘VARCHAR(200) NOT NULL’,
‘img’ => ‘VARCHAR(200) NOT NULL’,
‘show’ => ‘tinyint(1) DEFAULT 1’,
‘order’ => ‘int(10) DEFAULT 0’,
) , ‘ENGINE=InnoDB CHARSET=utf8’);
}
public function down()
{
dropTable(‘el_slider’);
}[/php]

Добавление записи в таблицу с помощью миграции

[php]
$this->insert(‘tbl_news’, array(
‘title’ => ‘Title 1’,
‘content’ => ‘Content 1’,
));[/php]

Изменение записи в таблице с помощью миграции

[php]
$this->update(‘tbl_news’, array(
‘title’ => ‘Updated title’
),
‘id=1’
);[/php]

Добавление колонки в таблицу с помощью миграции

[php]$this->addColumn(‘el_item_with_partner’, ‘option_id’, ‘int(11) DEFAULT 0’);[/php]

Переименование колонки

[php]$this->renameColumn(‘{{user}}’, ‘user_birthday’, ‘user_old_birthday’);[/php]

Удаление колонки

[php]$this->dropColumn(‘tbl_news’, ‘created_at’);[/php]

Fatal error: Call to undefined function strptime()

Fatal error: Call to undefined function strptime()

Такая ошибка может быть вызвана при использовании функции strptime() в Windows, так как в этой ОС эта функция не поддерживается.

Но не все так плохо, можно переопределить эту функцию. Читать далее «Fatal error: Call to undefined function strptime()»

CDbCriteria Yii — Условие OR

CDbCriteria | Class Reference | Yii PHP Framework.

Пример по которому можно понять как использовать OR:

[php]$criteria->compare(‘username’, $term, TRUE, ‘OR’);
$criteria->compare(‘name’, $term, TRUE, ‘OR’);[/php]

1 — Поле по которому ищем

2 — Массив значений по которым мы ищем

3 — Использование похожего равенства — LIKE ‘%Значение%’, по дефолту FLASE

4 — Тип объединения условий, по дефолту AND