.
Место для Вашей рекламы
20 Февраль 2017

Быстрая доработка сайта на yii2

Итак, волею судеб достался мне на сопровождение сайт дверной-эксперт.рф реализованный на php фреймворке yii2, с весьма аскетичным административным интерфейсом. Соответственно — в каких либо корректировках сайта шаг влево, шаг вправо считается побегом 🙂 и без каких то базовых знаний фреймворка любые допилы никак не реализуемы.
ТЗ от владельца сайта — встроить на сайт онлайн калькулятор по доставке товара с Новосибирска на Дальний Восток (ссылка с уже готовым решением).
Кому интересно, подробное решение ТЗ: Читать полностью »

рубрики: Yii, Программирование | Комментарии (0)

13 Декабрь 2013

Yii — управление пользователями yii-user-management

Итак, для работы веб-приложения жизненно необходимая вещь — работа с пользователями, которую в свежеустановленном yii webapp я не обнаружил.
Да — авторизация есть, но на этом всё.
Нагуглил понятие «extensions» для фреймворка — как следует из названия — расширения.
Одно из них судя по названию мне подходит yii-user-management.
Судя по описанию — довольно неплохой инструмент:
Группы, роли, профиль, аватарки, сообщения, поддержка русского языка …
Итак, начнём — качаю последний предложенный архив yii-user-management_0.8.tar.bz2
обнаруживаю там кучку папочек — что же дальше? Доки в корне нема! Ищем дальше — вау, нашли \user\docs\install_tutorial.txt (нетривиально, правда ведь?)
первые 2 пункта относятся к установке самого yii webapp с MySQL
3. разворачиваем содержимое архива в /protected/modules/ (если нет — создать)
4. подключаем модуль — в массив ‘modules’=>array( нужно добавить

'user' => array(
			'debug' => true,		
		),

5. добавляем компонент user (старый закомментируем) — в массиве ‘components’=>array( …

		 'user'=>array(
		      'class' => 'application.modules.user.components.YumWebUser',
		      'allowAutoLogin'=>true,
		      'loginUrl' => array('//user/user/login'),
		    ),

Так же модуль user ставим в автозагрузку фреймворка

 'import'=>array(  
  'application.modules.user.models.*',
	[...]

6. Подключаем стандартный компонент кэширования

		'cache' => array('class' => 'system.caching.CDummyCache'),

7. Запускаем веб инсталлятор /index.php/user/install — вуаля
8. Логинимся admin/admin (тут выдавало ошибку т.к. пункт 6й по включению кэша я сначала пропустил)
Вот тут-то меня ожидало разочарование — под указанными учётными данными я залогиниться не смог!
Попробовал в форум на офсайте по данному расширению стукнуть — тишина …

После долгих ковыряний обнаружил, что проект с расширением присутствует на GitHub — решил поставить заново оттуда, и вуаля — 8й пункт заработал — меня пустили на сайт под админом!
Причём дебаг сообщение «You are running the Yii User Management Module 0.9-git-wip in Debug Mode!» гласило о том, что версия приложения 0.9 (а не 0.8 как на офсайте Yii).

Русский язык включается для всего Yii и влияет на модуль
Соответственно, добавляем параметр ‘language’ => ‘ru’ в корень возвращаемого массива main.php — кое-что видим по русски.

Картинка такая

Где группы, профиль, аватары ???
Попробовал «Generate Demo Data» — на что получил ошибку Property «YumUser.roles» is read only.

Завёл юзера user в ручную — и ура! получилось!

Ну что-же — какая никая админка юзеров получилась — на троечку 🙁
Роем дальше.

рубрики: Yii | Комментарии (1)

12 Декабрь 2013

Yii — фильтрация в CGridView

Итак, после недолгих изучений Yii было принято решение уже что нибудь начать.
А начать я решил с базы квартир для Риэлтеров.
Имхо, если проект довести до ума, сделать удобным в использовании — за применением не заржавеет.
Вообще, какая разница с чем оперировать — основные принципы в работе в разных отраслях одинаковы.

Вот так взять и начать сразу не вышло 🙂 — всё же нужны какие то реальные данные, с ними интереснее.
Соответственно, первое что было сделано — парсер объявлений о аренде квартир с arenda.ngs.ru (можно чтоб присылали готовый файл за деньги — но я жадный).
Парсеры я привык писать на чистом PHP — единственное отличие от ранее написанных парсеров — этот я ваял в PHPStorm (уже начинаю привыкать — довольно удобная штука).

Со структурой БД сильно заморачиваться не стал — одна табличка с объявлениями — и штук 9 справочных, а-ля ID, NAME (город, район, улица, и т.д.)
С КЛАДР-ом тоже заморачиваться не стал, хотя на всякий случай качнул MySQL выгрузку.

Итак — Yii!!!
Качаю фреймворк 1.1.14 (last stable) с оф.сайта.
Ставлю в режиме WebApp — вуаля, уже какой-никакой работающий каркас сразу есть с работающей авторизацией! (и это мне очень понравилось)
Далее, подключаю к фреймворку MySQL и генератор кода gii и создаю модели для всех созданных ранее в PHPMyAdmin табличек, для основной так же делаю в gii CRUD контроллер.

Табличка CGridView в админской части мне так же понравилась, но пока в ней не отображаются реляционные связи — айдишники выводятся в виде цифр.
Далее «вяжем» реляционные связи — в контролер arenda добавляем

'city'=>array(self::BELONGS_TO, 'City', 'id_city') и т.д.

для фотографий другая связь

'fotos'=>array(self::HAS_MANY, 'Fotos', 'id_arenda')

Далее заходим во вьюшку с гридом и добавляем колонку в виде

        array(
            'name' => 'id_city',
            'filter' => CHtml::listData(city::model()->findAll(array('order'=>'name')), 'id', 'name'),
            'value'=>'$data->city->name'
        ),

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

С улицами мне такое решение не понравилось т.к. их очень много — решил сделать поиск по вхождению.
Тут мне помог andy_s с форума на оф.сайте — тема.

Инструкция:
1. во вьюшку добавляем колонку с именем search_street и отображаемыми релационными данными:

array(
  'name' => 'search_street',
  'value'=>'$data->street->name'
),

всё ок — поле для фильтрации добавилось, данные выводятся верно, но пока не фильтрует

2. Добавляем поле в модель

class Arenda extends CActiveRecord {

public $search_street;

3. Добавляем в rules() правило с полем search_street в safe для search

array('search_street, id, title, .....', 'safe', 'on'=>'search'),

4. В самом search() добавляем связанную таблицу и связь между search_street и именем

$criteria->with = array('street');
$criteria->compare('street.name',$this->search_street, true);

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

рубрики: Yii, Программирование | Комментарии (0)

Яндекс.Метрика