Производство фотообоев в Новосибирске. Интернет магазин фотообоев. Изготовление - один день! Каталог 10 000 изображений!
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( нужно добавить

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

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

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

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 добавляем

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

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

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

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

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

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

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

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

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

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

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

9 Декабрь 2013

Взломали Твиттер

Ломанули таки сволочи мой твиттер 🙁
Почистить гадость помог сервис
http://delete.twitlan.com в связке с Web Deweloper — «check all checkbox» для отметки сразу сотни записей
т.к. насрать успели порядочно (порядка 900 левых твитов)

Спамили ссылками на чистые доры
например shopladyme.com или www.dinosrestaurantastoriany.com
Что ещё использовали кроме хакнутых твиттеров — не анализировал, как хакнули — тоже не знаю.
Куда льют такой говно-трафик тоже не стал изучать.

Такое впечатление, что доры генерировали тупо по Яндекс Эфиру т.к. ключевики вообще бредовые.
Домены взяты просроченные (дата регистрации — начало декабря) с историей — shopladyme.com с 2007 года в веб-архиве.

Что поразило — это 6 тыс. страниц в индексе Яши!
http://yandex.ru/yandsearch?serverurl=dinosrestaurantastoriany.com&lr=194
Понимаю, что это скорее всего до следующего АПА но всё таки!
(кстати, нужно этот момент будет проконтролировать)

рубрики: SEO | 2 комментария

5 Декабрь 2013

PHPStorm IDE и Yii фреймворк

Ну что могу сказать — после довольно затяжного периода различных доработок под Битрикс потянуло меня снова на «нормальное» программирование…

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

Прошлый раз, года наверное 3 назад я пробовал силы с CodeIgniter PHP Framework на PHPEd IDE.
На сей раз немного погуглив отзывы решил творить на Yii PHP фреймворке, в качестве IDE взляд остановился на PHPStorm.
Сегодняшнее первое знакомство с фреймворком оставило сугубо приятные впечатления — для наглядности в ознакомлении пошел в ютуб (люблю «живые» примеры) и просмотрел первые 4 урока Богдана Березанского с параллельной реализацией на хостинге — примеры очень простенькие и понятные — рекомендую. /

Что сильно сразу понравилось в отличие от CodeIgniter — это наличие готового шаблонного рабочего приложения с готовой авторизацией и наличием минимальной связки MVC (model view controller) для работающего приложения — всё наглядно можно изучить и «потрогать» и генератора кода — вообще «бомба»! — думаю фишка сильно упрощает разработку приложения, что и проверю в реальной разработке.

На счёт PHPStorm-a пока сказать ничего не могу — внешне обычная IDE, с особенностями ознакомлюсь в процессе — но сильно хвалят… (пока думал найти как он проект по ftp синхронизирует — но с лёту не нашел этих настроек). Будет время — ещё утуб помучаю на предмет работы в PHPStorm, да хоткеи нужно глянуть.

Ну что-ж … удачи мне, и сил не бросить и довести проект до логического финала.
Интересное из процесса с моими комментариями конечно же буду постить в блог.

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

20 Ноябрь 2013

Javascript — передача параметра в модальное окно fancybox

Вроде элементарное ТЗ — а промучался полдня.
При клике на «купить» — должно появляться модальное окно «Товар добавлен в корзину» «продолжить покупки» «оформить заказ»
В качестве модального окошка решено использовать скриптик JancyBox — и центрируется и затемняет, в общем всё устраивает!
кроме одного НО! — при нажатии на «купить» товар сначала должен «упасть» в корзину, т.е. нужно вызвать соответствующую функцию с передачей в качестве параметра ID товара

Так не пашет! — даёт «undefined»

Как вариант — повесить сначала click — в нём сделать нужный вызов, а потом открыть окно имитацией клика
$(«#id2»).trigger(‘click’);

Но почему-то в таком варианте модальное окно выводится сначала вверх потом только центрируется. Облом!

Гуглим далее — нашел свою обработку Тайтла с помощью собственной фукнции вешаемой параметром TitleFormat
Внутри которой дёрнуть rel можно следующим образом $(currentArray[currentIndex]).attr(‘rel’)

Т.е. вместо задания тайтла я получу ID и вызову нужную мне функцию.

На этом «мудрёном» варианте и остановлюсь — через задний проход конечно, но работает 🙂

P.S.
С вопросом по решению проблемы я создал 3 поста на форумах
phpclub.ru
javascript.ru/forum/
forum.searchengines.ru

На первом ноль реакции, на втором попытались помочь — но безуспешно
На javascript.ru/forum — 200 % попадание в цель!
На основе моего вопроса был создан готовый рабочий пример! В личке вебмастер ответил на мой вопрос — откуда именно инфа с указанием прямых ссылок на нужный мне пример в мануале!

Собственно, как обычно
Рони ответил в ПМ — за что ему ещё раз огромное спасибо!

Как обычно — всё гениальное просто — «Meditate on documentation!»

Дока тут http://fancyapps.com/fancybox/
Пример с передачей ID тут http://jsfiddle.net/Se8Yu/

рубрики: Javascript, Полезности, Программирование, Сайтостроение | Комментарии (0)

18 Ноябрь 2013

Как найти php скрипт — mail спамер?

Утро понедельника не задалось — при прочтении утренней почты обнаруживаю абузу с датацентра на один из моих серверов 🙁
При ознакомлении выясняется, что мне закинули какой то «сифак», который благополучно спамит добропорядочных граждан «via sendmail with smtp»

Предположив, что сиё действо выполняется с какого-то php скриптика сразу же встал вопрос о методе его поиска! Собственно — как?
Через мои защиты он уже каким то образом пролез, значит моими регулярками его не выцепить!
В идеале фукнцию отправки почты логировать — а там то я бы его по факту обнаружил!

Оказывается, начиная с PHP 5.3 такая возможность присутствует! и имея ей MAILHEAD

Пересобираем php с указанным выше патчем:

(инструкция для FreeBSD):
смотрим какая версия PHP
#php -v

у меня 5.3
#cd /usr/ports/lang/php53
#make config
отмечаем [X] MAILHEAD Enable mail header patch
#make
как все соберется без ошибок
#make deinstall
#make install clean

Далее в php.ini указываем куда писать лог
mail.log = /var/log/php-mail.log

рестартим веб сервер и делаем тестовую отправку

проверяем лог — если скрипт попал в лог — всё окей

Далее ловим гада.

Добавлю ещё выдержку со статьи:
Чтобы найти источник спам-рассылки на сайте, нужно в файле php.ini включить логирование рассылаемой почты директивами:

mail.add_x_header = On
mail.log = <путь до вашего пользовательского каталога>/php-mail.log

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

php_admin_value mail.add_x_header On
php_admin_value mail.log <путь до вашего пользовательского каталога>/php-mail.log

PS
Быстро удалить спам письма из очереди

find /var/spool/clientmqueue/ -type f -delete
find /var/spool/mqueue/ -type f -delete

там же наблюдаем за новыми отправками

рубрики: security, Администрирование, Полезности, Программирование | Комментарии (1)

18 Ноябрь 2013

В индексе Яндекса только главная страница

Уже не в первый раз сталкиваюсь с пока не ясной мне проблемой — Яндекс ставит в выдачу только главную страницу сайта.
Вот и сейчас — сайтик белый, нигде не был замечен с плохой стороны — никакой рекламы, ссылок, попапов и прочей гадости.
Нужно продвинуть по запросу Ремонт ТНВД — а в индексе только морда, значит Яше явно что-то не нравится в сайте!
Вопрос — что именно?
В Я.Вебмастер показывает, что загружено 27 страниц, в выдаче одна.
Почему — ХЗ 🙁

Будет информация — напишу сюда. А пока — вопрос актуален !

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

14 Ноябрь 2013

Битрикс — иерархическое многоуровневое меню «гармошка»

Итак, очередное ТЗ для Битрикс CMS — иерархическое многоуровневое меню «гармошка».
Реализацию сей задачи я конечно-же задумал с использованием какого-нить плагинчика с использованием jQuery (а куда без него в наше время ?), немного поиска и небольшой,
вполне устраивающий меня плагин найден — liHarmonica

Демка пашет, всё вроде бы просто, НО — как мне вытащить из Битрикса секции и иерархическом порядке?

Готового подходящего решения в API я не нашел, подходит только CIBlockSection::GetList() и рекурсивная функция по получению подсекций в конкретной секции.
Пихать непосредственно CIBlockSection::GetList() в рекурсивную фукнцию — убийство т.к. для каждой секции будет своё обращение в БД — слишком большая нагрузка для получения меню.

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

Сказано — сделано 🙂
Код в студию

component.php

template.php

P.S.
Блин, всего несколько строчек кода — а убил полдня на менюшку эту.
Кому интересно — качнуть готовый компонент можно тут, посмотреть реализацию тут.
(пути до js и css подкорректировать только нужно — у меня это в нескольких шаблонах используется, поэтому выносил в корень).

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

31 Октябрь 2013

Adwords — сайт заблокирован. Нарушение: различные виды спама.

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

Adwords — сайт заблокирован.
Нарушение: различные виды спама.

Томить перепиской с саппортом не буду — толком ничего не говорят, отсылают читать «простыню» по условиям, а там их ой как много.
В итоге — убрал сапу (всего одна ссылка висела), подал заново — заапрувили.

рубрики: Разное | Комментарии (0)

25 Октябрь 2013

Закрытие модального окна при нажатии ESC

Не буду томить — сразу решение

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