Сегодня сделал то что давно обещал сделать biakaveron, правда было это давненько, но я обещания не забыл... Вот теперь на сайте будут удобные комменты от Disqus. Причем все комменты не потерялись, а были импортированы и аккуратно перенесены, ни какая ценная информация не потерялась. Wellcome to the test ))
Небольшая статья как установить phpunit на Windows. Зачем это нужно, спросит читатель? Кохана оказывается покрыта тестами и мы постараемся не отставать от новых модных тенденций в сфере кун-фу программирования и тоже будем покрывать свой код тестами. На самом деле очень нужная вещь, в противном случае как Вы узнаете, что ваш код идеален? Только когда он пройдет все тесты, даже самые извращенные, тогда можно вздохнуть и сказать себе, что хорошо поработал.
Установка PEAR
Если PEAR уже установлен, то можно пропустить этот шаг. В начале заходим в папку где установлен php и запускаем:
go-pear.bat
И тут внимание. На моем последнем php 5.3.3 это все благополучно упало и выдало что-то типа:
phar "C:\php5\PEAR\go-pear.phar" does not have a signature
Warning: require_once(phar://go-pear.phar/index.php): failed to open stream: pha
r error: invalid url or non-existent phar "phar://go-pear.phar/index.php" in C:\
php5\PEAR\go-pear.phar on line 1236
То вам не повезло как и мне с багнутым php. Это давно известный баг, который еще не профиксили. Чтобы его исправить напишите в файле go-pear.bat следующие строки:
@ECHO OFF
set PHP_BIN=php.exe
%PHP_BIN% -d output_buffering=0 -d phar.require_hash=0 PEAR\go-pear.phar
pause
И повторите попытку. На второй раз все должно пойти как по маслу.
Как давний читатель рассылки internals.php расскажу про маленький секрет - первый альфа релиз PHP 5.4 выйдет не за горами. Этот релиз содержит некоторые новые возможности языка, традиционные багофиксинг улучшающий производительность и работу с памятью. Одной из примечательной особенностью языка станут traits - новый механизм повторного использования кода.
Что такое traits?
При наследовании одного класса другим классом, дочерний класс становится видом родительского класса - у него есть общие свойства, методы и функциональность. Таким образом наследование предоставляет доступ к не закрытому коду (у дочернего класса есть доступ к не private методам и переменным прив. переводчика) родительского класса следую паттерну вертикального использование кода.
В то время как наследование отличный способ повторного использования кода, но не решает все проблемы. Бывает, что два объекта используют общую функциональность, но не должны наследоваться от общего класса. Например:
class A { ... }
class B extends ArrayObject {
// Uses SPL ArrayObject functionality
}
Давайте вообразим, что кому то понадобилось сделать оба класса синглтонами. С текущим набором возможностей в PHP 5.3 это проблемно. Наследование от общего класса Singleton невозможно для класса B, т.к. ООП модель в PHP поддерживает только один родительский класс. В языках на подобие C++ это возможно реализовать с
В последнее время я сильно опасался за мою любимую библиотеку Sprig. Мало того, что она не развивалась, так еще и shadowhand удалил свой дистрибутив с github'a. Но sprig не была забыта и забита, а вместо нее появилась новая библиотека(считай версия 2.0) под названием Hive. Вкратце изучив ее я понял, что у них одни и те же корни: много методов называются также, и мне по первому взгляду кажется, что для перехода придется переработать только модели, а код контроллеров и видов не должен поменяться. Но что самое главное, библиотека вобрала в себя в самое лучше:
Она стала более расширяемой
Появился метод срабатывающий при изменении поля
Стала более структуированной, это можно заметить по гораздо меньшему количество операторов instanceof
Ведется активная разработка кода, за месяц было это все и написано
Из минусов можно отметить:
Куда то пропала функция input, выводящая для каждого типа поля свой элемент. Чтобы это могло значить? Может это стал моветоном?
Нет загрузки связанных объектов (в ORM это команда with), может появится в дальнейшем, т.к. очень нужна
Предлагаю всем испробовать
Получайте всегда свежую информацию о курсах валют на украинсков банковском портале.
В прошлых постах я писал что Sprig великолепная библиотека, вот пришло время отвечать за слова... В этой статье я опишу создание поля типа Wysiwyg, для быстрого и легкого подключения визивиг редактора. Визивиг редактор я предлагаю взять Tinymce и файловый менеджер elFinder.
2. Скачиваем tinymce и помещаем в папку public/tinymce;
3. Elfinder скачиваем в папку плагинов tinymce в нашем случае это public\tinymce\jscripts\tiny_mce\plugins\elfinder;
4. Теперь нам нужны коннекторы на стороне сервера. Я предлагаю создать отдельный модуль tinymce, чтобы его можно было легко подключить к уже существующим проэктам. Копируем два файла из архива elfinder'a: connectors\php\connector.php и connectors\php\elFinder.class.php в папку modules/tinymce/vendor/elfinder;
Создание Wysiwyg поля для Sprig
Подключаем модуль tinymce для начала, а после создадим класс Sprig_Field_Wysiwyg в папке с модулем:
<?php defined('SYSPATH') or die('No direct script access.');
class Sprig_Field_Wysiwyg extends Sprig_Field_Char {
public function input($name, $value, array $attr = array())
{
// будет сигнализировать о том что
// главный файл с тинимсе уже подключен
static $has_added = FALSE;
// заполняем данные для вида
$data = array(
'field' => $this,
'name' => $name,
'value' => $value,
'attr' => $attr,
'has_added' => $has_added,
);
$result = View::factory('tinymce',
Sprig - это ORM библиотека, написанная под вдохновением моделей в django. Здесь вы не найдете подробной документации по библиотеке, на самом деле ее просто нет, есть только немногочисленные написанные статьи. Хотя и справки по ней действительно мало, но тем не менее, я считаю ее новой ступенью, которая избавляет от многообразной рутинной работы.
Sprig и ORM
Самое большое отличие от ORM - это то что каждое поле в sprig представлено СВОИМ классом, напобобие, как в базе данных. Например для текстового поля есть класс Sprig_Field_Char, который умеет сохранять текстовые поля, Sprig_Field_Integer - для числовых данных. Единственная проблема, это описывать эти поля и не забывать их синхронизировать при разработке(советую использовать модуль console). И еще не маловажное преимущество перед обычной ORM, каждый класс знает как себя отобразить. Например для текстового поля(Sprig_Field_Char) это будет обычный input, а для перечисления (Sprig_Field_Enum) - соответственно select. Это дает возможность создатьва свои типы полей со своими обработчиками.
Преимущества
После 4-х месяцев использования я могу сказать, что набил много шишек на Sprig, и понял, что используемый подход очень правильный. Дальше будут идти преимущества с небольшими кусками кода, для подтверждения.
1. Каждому полю свой класс. Благодаря ему можно автоматизировать формы, вывод данных в админке и очень многое
Вот и меня впечатлил фреймворк yii, но переходить на него я не хочу и не собираюсь, а как хороший разведчик, позаимствовал у него одну очень хорошую идею. А именно: генерация моделей, контроллеров и всего такого, что обычно считается рутиной. Был написан небольшой модуль kohana-console. Смысл этого модуля, что оно может выполнять небольшую работу по автоматическому генерацию кода. Итак скачиваем подключаем в файле boostrap как обычный модуль и пробуем.
Запуск
Запустить модуль можно только в cli режиме, через браузер вы туда не зайдете. Для windows есть специальный запускающий bat файл, в линуксе можно запустить приблизительно такой командой:
php ../../index.php --uri="console/index"
После запуска можно увидеть, обычную консольную программу:
Чтобы перейти на русскую справку, нужно в bootstrap.php прописать
i18n::$lang = 'ru';
Единственное, что может быть, так это у пользователей линукс может справка на русском коряво отображаться. Так и не получилось отображать текст в консоле виндовс в кодировке windows-1251. А utf8 виндовс принципиально не поддерживает. Чтобы все заработало перекодируйте файлы в папке console\views\help\ru-ru\, на ту кодировку которая поддерживает ваша система.
Прежде всего поздравляю всех, что ие6 все меньше и меньше поддерживается. С 13 марта youtube перестает поддерживать ie6. УРА!!! Эту заметку написал мой коллега по интернет цеху, если что ник jb в комментариях. Далее прямая речь:
Недавно под конец рабочего дня доверстывая проект наткнулся на довольно забавный (кх - кх) баг ИЕ6 и ИЕ7, оказываеться если элементу нумерованного списка (OL LI) или маркированного списка (UL LI) задать CSS св-во HEIGHT, то маркеры этих списков не будут увеличиваться 1, 2, 3... и тд., а будут постоянно равны 1, помогает только задача VALUE, причем его нужно задавать для каждого элемента списка.
Это видно на выделенных примерах 4 и 7 под ие6 и ие7, причем элементы без VALUE имеют маркер 1, хотя должны были бы иметь 8, так как предыдущий элемент имеет значение 7.
Откройте этот пример для сравнения в ие6/ие7 и нормальном браузере:) Firefox, Opera, Safari, Chrome.
Вернемся к истокам проблемы, использовать HEIGHT для элементов списков мне понадобилось чтобы задать им специфическое для ие свойство hasLayout а писать не валидное zoom:1; не очень то хотелось, но видимо вывод таков что стоит использовать zoom:1; с условными комментариями нежели казалось бы безобидный HEIGHT:1%; (кстати величина процента не влияет на баг):
Недавно закончился прошлый опрос, так как я придумал новую тему, что мне бы было интересно узнать у свои читателей :). В прошлом опросу поучаствовало 102 человека. 102 реальных человека, т.к. дубликаты удалялись без предупреждения. Результаты:
Если смотреть по опросу, то вторая ветка уже отходит от дел, и скоро станет совсем не актуальной. А также что, многих напрягает отсутствие документации, к сожалению, это самая слабая сторона фреймворка.
Новый опрос
И что у нас в меню? А в меню у нас всевозможные ORM на любой вкус, написанные на php. Первая группа это просто все ORM, которые не относятся к Kohana:
Лично я использую Sprig. Поэтому я могу сказать "за" и "против":
+ Небольшая автогенерация кода, за счет вывода полей
+ Описание полей позволяет немного более логично выстраивать код
+ Идея была сделать модели похожие на модели в django
-