Yii фреймворк: установка дефолтных параметров для виджетов

Владимир | | PHP, Web разработка, Yii.

yii widget parameters

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

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

Например, у нас есть файлы.
protected/components/MyWidget.php – класс виджета
и
protected/components/views/myWidget.php – представление.

Класс виджета может выглядеть примерно так.
Читать дальше

WordPress расширение возможностей встроенного XML-RPC сервера

Владимир | | PHP, Web разработка, WordPress.

wp-xmlrpc-extended

Приветствую всех!

Тема публикации работы с движком WordPress через XML-RPC протокол обсуждается довольно часто. Пожалуй, это самый удобный способ удаленной публикации постов. Но, если вы хоть раз использовали эту возможность, то, скорее всего, заметили, что встроенный XML-RPC сервер поддерживает далеко не все возможности движка.

К тому же в последних версиях появилась возможность создавать собственные типы данных, и было бы удобно иметь возможность нормально работать с ними через XML-RPC.

Сегодня я покажу небольшой пример создания собственного XML-RPC сервера для WP.

Примечание. Если вы раньше не работали с XML-RPC, то, думаю, вам будет интересно почитать статьи Публикация постов в WordPress с помощью XML-RPC и CodeIgniter и Отложенная публикация постов в WordPress с помощью XML-RPC.

Прежде всего, сформулируем задачу.
Читать дальше

Аутентификация с помощью социальных сервисов и OpenId (Loginza)

Владимир | | JavaScript, PHP, Web разработка.

loginza

Приветствую всех!

Сегодня я хотел бы рассказать об аутентификации пользователей с помощью различных социальных сервисов.

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

Но если вам нужно обеспечить поддержку максимально большого количества сервисов, то объем работы резко возрастает.

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

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

Загрузка файлов с помощью SWFUpload и PHP

Владимир | | HTML, JavaScript, PHP, Web разработка.

swfupload

О загрузке файлов на сервер рассказывается, наверное, в каждой книге о веб разработке. Обычно при этом приводится пример формы с тегом input type=file и объясняется, как работать с массивом $_FILES на стороне сервера. Это классический вариант. Он отлично работает, но имеет несколько ограничений.

1) Чтобы загрузить несколько файлов, нужно создать несколько тегов input. При этом пользователь должен будет выбирать каждый файл отдельно, что довольно неудобно при большом количестве файлов.

2) Невозможно показать процент загрузки файла.

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

4) Загрузка не будет асинхронной, т.е. произойдет перезагрузка страницы.

На сегодняшний день существует два основных варианта решения этих проблем. Использование iframe или flash (по-идее, silverlight тоже можно использовать для этих целей).
Читать дальше

Yii PHP framework: контроль доступа с использованием ролей (RBAC)

Владимир | | PHP, Web разработка, Yii.

yii rbac

Я думаю, все, кто хоть немного работал с фреймворком Yii знают, что он поддерживает возможность разграничения прав доступа на основе ролей.

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

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

if (!Yii::app()->user->checkAccess('createUser')) {
	throw new CHttpException(403, 'Forbidden');
}
//остальной код…

В теории всё просто. Но на практике, документации и примеров по этой теме практически нет (надеюсь, это скоро изменится).

Основные источники информации (на русском): Аутентификация и авторизация и RBAC и описание ролей в файле. На английском хороших и подробных примеров, к сожалению, я не нашел.

Примечание. Очень советую прочитать эти статьи, прежде чем переходить к моему примеру.

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

CGridView. Часть вторая. AJAX.

Владимир | | Ajax, PHP, Web разработка, Yii.

yii grid view

В этой части я хочу рассказать о некоторых особенностях реализации AJAX запросов в компоненте CGridView.

Предположим, у нас есть таблица, и мы создали для неё модель и скрипты для выполнения CRUD операций (с помощью встроенного генератора Yii).

Пусть таблица называется countries, содержит список стран с двумя полями (id, name).

В этом случае, страница управления записями будет доступна адресу
Читать дальше

Неожиданное обновление CircleTasks

Владимир | | CodeIgniter, PHP, Web разработка, Разное.

Постоянные читатели этого блога, наверное, помнят, что некоторое время назад (прошло почти 10 месяцев 🙂 ) я опубликовал несколько постов о разработке TODO скрипта под названием CircleTasks. Там же были выложены исходники и ссылка на демо версию.

Тогда пришло очень много пожеланий и советов по развитию системы. Какие-то я реализовал, какие-то – нет. Ключевой идеей была максимальная простота интерфейса, поэтому вводил новые функции я очень аккуратно.

Но, вынужден признаться, что со временем интерес к этому проекту у меня ослабел. Текущий функционал лично меня устраивал, и мотивации что-то менять не было.

И, совсем недавно, я узнал, что оказывается не я один пользуюсь этой системой 🙂
Читать дальше

Yii PHP фреймворк: оформление административных страниц

Владимир | | HTML, PHP, Web разработка, Yii.

yii grid view

Одной из наиболее мощных возможностей фреймворка Yii является генерация кода. Она позволяет сразу после создания таблицы в базе данных получить файлы модели, контроллера и представлений. Т.е. весь необходимый код для выполнения CRUD операций.

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

Взгляните на обычную страницу управления записями, сформированную с помощью компонента CGridView.
Читать дальше

Yii PHP framework: создание запросов с условием IN

Владимир | | MySQL, PHP, Web разработка, Yii.

yii in condition

Последнее время мне довольно часто приходится работать с фреймворком Yii. И иногда возникают вопросы, ответы на которые не очевидны (во всяком случае для меня).

Попробую объяснить. Сам фреймворк, на мой взгляд, достаточно удобный и документация подробная. Но классов много, и формат передачи данных их методам часто сильно влияет на результат.

Рассмотрим небольшой пример – использование оператора IN.

Т.е. нужно сформировать примерно такой запрос.

SELECT * FROM tbl_users WHERE id IN (1, 2, 3)

Читать дальше

WordPress плагин для внутренней перелинковки страниц сайта. Версия 3.

Владимир | | PHP, Web разработка, WordPress.

wp terms descriptions 3 logo

Знаете, всегда очень приятно, когда кто-то проявляет внимание к твоей работе и помогает полезными советами. Сразу появляется желание что-нибудь сделать 😉

Так примерно месяц назад я написал и выложил первую версию плагина Terms Descriptions. Практически сразу же появилось множество отзывов и пожеланий, были найдены баги.

Примечание. Этот плагин предназначен для автоматической внутренней перелинковки сайта. Вы создаёте перечень ключевых слов и указываете ссылки для них. Плагин ищет ключевые слова в записях блога и преобразует их в ссылки.

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

В общем-то, я думал, что плагин решает свою узкую задачу в полном объеме… Но один из читателей этого блога (по имени Турист) объяснил мне, что это не так 🙂
Читать дальше