проголосовало
2 пользователей

Для тех, кто работает с фреймворками и кому они интересны.

Фреймворки →  Yii — php-фреймворк

Вышла стабильная версия PHP фреймворка Yii 1.1.

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

Тестирование на основе PHPUnit.
Построитель форм.
— Возможность создания шкурок для виджетов.
— Улучшен API реляционных запросов ActiveRecord.
— В комплекте теперь поставляется набор расширений Zii, включающий виджеты для jQuery UI и другие полезные компоненты.

Полное руководство по версии 1.1 на русском языке на yiiframework.ru уже находится в актуальном состоянии.

Перевод обновлённого руководства по созданию блога будет завершён немного позже.
Скачать новые версии можно здесь: http://www.yiiframework.com/download/
2

Фреймворки →  Кеширование в Codeigniter при помощи Zend Cache

Codeigniter на столько мощный фреймворк, что приходится пользоваться недофреймфорком Zend Framework, слышал аргумент против Зенд Фреймворка: «это тупо набор классов», скажу, что это нихера не набор классов, а классы в ZF хороши. Поэтому будем пользовать Zend Cache для еширования в Codeigniter.

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

Использование компонента Zend Cache в CodeIgniter неудобно, поэтому решил написать свою библиотеку, которя будет использовать этот механизм кэширования и будет проста в применении с CodeIgniter. Теперь немного опишу своё творение, и расскажу как его применить.

Пример применения библиотеки


Для начала нужно сконфигурировать библиотеку, для этого нужно создать файл cache.php в /aplication/config/ примерно так:

//Путь до библиотеки Zend
$config['path_to_zend']  = '';

//Название фронтэнда
$config['frontend'] = 'Core';
//Название бэкэнда
$config['backend']  = 'File';

//Опции фронтэнда
$config['frontendOption']  = array(
       'lifetime'                  => null,
       'automatic_cleaning_factor' => 0,
       'automatic_serialization'    => true
);

//Опции бэкэнда
$config['backendOption']  = array(
    'cache_dir'              => APPPATH.'cache/',
    'read_control_type'      => 'strlen',
    'file_locking'           => false,
    'hashed_directory_level' => 0,
    'file_name_prefix'         => 'cache'
);


Здесь все ключи массива должны называться как и в документации Zend Cache. Все значения в примере данного конфига демонстрационные, вы сами должны подобрать необходимые для себя параметры.
Теперь библиотека настроена и можно перейти к её применению.
Для загрузки используем уже знакомый нами метод:

$this->load->library('Cache');

Пример 1:


if ( ! $end = $this->cache->load('name_ceche') ) {

    $blog = $this->db->get("blog");
    $category = $this->db->get("category");

    $end['content'] = $blog->result();
    $end['category'] = $category->result();

    $this->cache->save($end, 'name_ceche', array('page1', 'blog'));
}


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

Пример 2:


if ( ! $end = $this->cache->load('name_ceche') ) {

    $blog = $this->db->get("blog");

    $data['content'] = $blog->result();

    $end = $this->load->view('myfile', $data, true);
   
    $this->cache->save($end, 'name_ceche', array('page1', 'blog'));
}


Во втором примере мы видим что кэшируется уже не массив с данными а целая часть страницы. Такой метод позволяет кэшировать данные которые не требуют частого обновления (например список категорий на странице, облако тэгов и т.д.) либо генерация этих данных очень ресурсоёмка и имеет смысл сохранить их на небольшой промежуток времени. И в данном случае опцию 'automatic_serialization' не обязательно устанавливать в true.

Пример 3:


$this->cache->remove('name_ceche');
$this->cache->clean('page1');
$this->cache->clean('blog');


В примере №3 показаны способы удаления кэша который мы создали ранее, в примерах 1 и 2. Но заметьте сделать что это можно сделать разными способами.
С помощью первого метода можно удалить кэш по его уникальному имени, с помощью второго и третьего метода мы сделаем тоже самое но используя ни его имя, а тэги которые были присвоены кэшу. Это позволяет удобно управлять кэшем, например можно удалить кэш категорий только с определённой страницы, задав при сохранении определённые тэги.

Подробную информацию о том для чего определённые настройки и описание бэкендов и фронтэндов не приводил т.к. эта информация есть на русском языке в документации к Zend Cache.

Скачать:
CI-ZendCache.zip
1

Фреймворки →  Zend DB съедает память

Бывает, так, что валится ошибка и нужно быть телепатом, что бы продетектить эту ошибку. Так было и в этот раз.

При попытке забрать данные при помощи fetch, fetchAll, fetch*, find, findParentRow и т.д… выдает ошибку.

Fatal error: Out of memory (allocated 12058624) (tried to allocate 4294967294 bytes)


То, что это Zend_DB стало понятно немного позже. Zend_DB некорректно работает с типами LONGTEXT И LONGBLOB и эту проблему разработчики zend framework еще не решили. При формировании sql запроса Zend_DB смотрит на типы полей таблицы и пытается выделить память под будущей массив записей для каждой ячейки таблицы в соответствии с ее максимальным размером.

Для справки, размер LONGTEXT 4GB (2 в степени 32 – 1) символов т.е. даже, если размеры ваше таблицы не превышают 10kb, но в ней есть злостное поле LONGTEXT или LONGBLOB, то скорее будет хана.

Рецепт лечения простой — LONGTEXT меняем на MEDIUMTEXT (его размер 16Mb), а еще лучше на varchar(64000), но это совсем другая история:)

Для неверующих и читающих на английском http://framework.zend.com/issues/browse/ZF-1498
2

Фреймворки →  Zend Framework 1.8 Preview Release

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

Этот релиз предназначен исключительно для ознакомления и не готов к использованию в реальных проектах.

Если вы уже используете Zend Framework, скачайте дистрибутив и оцените все новшества:

1.8 Preview Release (zip)
1.8 Preview Rel.ase (tarball)

Zend_Tool предоставляет инструментарий для работы с Zend Framework. Например уже сейчас вы можете из командной строки выполнять целый ряд задач — таких, как создание структуры проекта, добавления новых ресурсов для проекта, действий и видов для контроллеров, и многое еще. Например, теперь вы можете сделать это:

% zf create project foo

и сгенерировать скелет для нового проекта в каталоге с именем «foo», со следующей структурой:

|-- application
|   |-- Bootstrap.php
|   |-- configs
|   |   `-- application.ini
|   |-- controllers
|   |   |-- ErrorController.php
|   |   `-- IndexController.php
|   |-- models
|   `-- views
|       |-- helpers
|       `-- scripts
|           |-- error
|           |   `-- error.phtml
|           `-- index
|               `-- index.phtml
|-- library
|-- public
|   |-- .htaccess
|   `-- index.php
`-- tests
    |-- application
    |   `-- bootstrap.php
    |-- library
    |   `-- bootstrap.php
    `-- phpunit.xml


В будущем команда ZF добавит еще больше функционала в этом направлении. Респект Ральфу Шиндлер за работу над этим компонентом.

Zend_Application обеспечивает загрузку приложения (бутстрапинг), а также конфигурирование платформы. При использовании Zend_Application, вы будете создавать класс загрузки приложения, который сможет использовать как функционал плагинов так и собственный; С введением Zend_Loader_Autoloader_Resource и Zend_Application_Module_Autoloader, вы сможете использовать автозагрузку для различных классов в ваших модулях — например, модели, формы, и плагины. Это значительно упрощает использование ресурсов из других модулей, а также с использование ресурсов в рамках одного модуля. Респект Ben Scholzen за инициацию Zend_Application и его значительный вклад в этот компонент.

Спасибо всем кто внес свой вклад в этот релиз. Тестируйте и сообщайте о моментах которые можно будет улучшить к моменту выхода финального релиза 1.8 в конце этого месяца! нам знать, что мы можем улучшить для окончательного релиза 1,8 позднее в этом месяце!

Создание каркаса приложения с помощью Zend_Tool (англ.)
Инициализация приложения с помощью Zend_Application (англ.)

Краткий обзор основных моментов релиза 1.8


Zend_Tool — Ralph Schindler
Zend_Application — Ben Scholzen, Matthew Weier O'Phinney
Zend_Navigation — Robin Skoglund
Zend_CodeGenerator — Ralph Schindler
Zend_Reflection — Ralph Schindler and Matthew Weier O'Phinney
Zend_Cache (Zend Server backend) — Alexander Veremyev
Zend_Service_Amazon_Ec2 — Jon Whitcraft
Zend_Service_Amazon_S3 — Justin Plock, Stas Malyshev
Zend_Filter_Encrypt — by Thomas Weidner
Zend_Filter_Decrypt — Thomas Weidner
Zend_File_Transfer, Support for file upload progress support — Thomas Weidner
Zend_Json, expression support — Benjamin Eberlei, Oscar Reales
Zend_Http_Client_Adapter_Curl — Benjamin Eberlei
Zend_Search_Lucene (Support for searching across multiple indexes) — Alexander Veremyev
Zend_Pdf (Support for page scaling, shifting and skewing) — Alexander Veremyev
Zend_Validate_Int and Zend_Validate_Float (Locale support) — Thomas Weidner
Zend_Locale (Phonecode support) — Thomas Weidner
Zend_Validate_Iban — Thomas Weidner
Zend_Validate_File_WordCount — Thomas Weidner
Support for keyword field search using query strings — Alexander Veremyev
Translation-aware routes — Ben Scholzen
SOAP input and output header support — Alexander Veremyev
0

Фреймворки →  Проблемы отображения Datepicker в Dialog (JQuery фреймворк)

Наверно, это баг:) Когда вызываешь диалоговое окно (в моем случае оно было модальным) и в нем пытаешься вызвать Datepicker(календарик для выбора даты), то календарик оказывается под диалоговым окном. Естественно, пользоваться таким календариком не очень удобно:)

Первое, что пришло в голову — z-index. Оно и естественно, как фиксить?

Из того, что нашел — все сводилось к допиливанию кода именно JQuery, я противник такого варварства, т.к. не известно, где это может всплыть (это же говно:)).

Сделал так:

$(function() {
        $("#date_publish").datepicker();//собственно вызов нашего календаря
        $("#ui-datepicker-div").css("z-index", 1000000); //задаем z-index
});
0

Фреймворки →  Роуты в Zend Framework и официальная документация

Когда разбирался с роутами в фреймворке, естественно читал документацию.

Столкнулся с такой проблемой, что пример кода из документации не хотел работать


// Создание маршрутизатора

$router = $ctrl->getRouter(); // по умолчанию возвращает rewrite router
$router->addRoute(
    'user',
    new Zend_Controller_Router_Route('user/:username',
                                     array('controller' => 'user',
                                           'action' => 'info'))
);
 


Начал рыть, не давала покоя переменная $ctrl. Я думал, что она где-то объявлена в фреймворке, потом выше кода в документации прочитал

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

В общем нужно инстанцировать:)

В начале кода добавляем:

$ctrl  = Zend_Controller_Front::getInstance();


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


set_include_path('../library' . PATH_SEPARATOR . get_include_path());

require_once 'Zend/Controller/Front.php';    
require_once 'Zend/Controller/Router/Route.php';    

$ctrl  = Zend_Controller_Front::getInstance();

// Создание маршрутизатора

$router = $ctrl->getRouter(); // по умолчанию возвращает rewrite router
$router->addRoute(
    'user',
    new Zend_Controller_Router_Route('user/:username',
                                     array('controller' => 'user',
                                           'action' => 'info'))
);
 


Удачи в изучении документации:)
0

Фреймворки →  плагин Star Rating для JQuery

Есть такой интересный плуг для организации оценок всего чего угодно в один клик под яваскриптовый фреймворк JQuery.

Здесь можно скачать и посмотреть на него.
http://plugins.jquery.com/project/MultipleFriendlyStarRating

http://www.fyneworks.com/jquery/star-rating/

Проблема с которой я столкнулся — невозможность задизейблить звезды после того, как пользователь проголосовал. Как минимум это приводит к заблуждению пользователя.

Решение:


$('.auto-submit-star').rating({
                callback: function(value, link){
                        // 'this' is the hidden form element holding the current value
                        // 'value' is the value selected
                        // 'element' points to the link element that received the click.
                        $("#form-rating").ajaxSubmit({
                                success:function(data) {
                                        //именно здесь начинаем дизейблить звезды
                                        $("div", "#form-rating")
                                        .removeClass("star_live")
                                        .addClass("star_readonly")
                                        .unbind("mouseover")
                                        .unbind("mouseout")
                                        .unbind("click");
                                        //здесь закончили
                                        $('#message').text("Your vote was counted");
                                },
                                error:function(data) {
                                        form.fadeOut("slow");
                                        $('#message').text("Error!");
                                }
                        });
                }
        });
 
0

Фреймворки →  Akismet библиотека для фреймворка CodeIgniter

Akismet это удаленный антиспам веб-сервис.

Если для построения своих приложений вы используете фреймворк CodeIgniter и у вас есть комментарии к статьям, то рассмотренная ниже библиотека защитит вас от спамеров при помощи сервиса Akismet.

Для пользования сервисом Akismet необходимо получить API ключик у них на сайте.

Скачайте библиотеку и положите у себя по адресу application/libraries/.

Как использовать в контроллере:


( Читать дальше )
0

Фреймворки →  Новый раздел Jquery плагины и решения

Jquery плагины и решения — открыт новый раздел. Здесь будут публиковаться интересные решения использования Java Script фреймворка JQuery и плагинов под него.
0