Archive for the ‘программерское’ Category

How to work comfortably with layout blocks in Zend Framework

Среда, Декабрь 2nd, 2009

During my research, I found a convenient way to work with html blocks on the site. Almost every site has a number of blocks that should be present on some pages and absent on others. So, you need a flexible tool for managing the blocks.

I will present my vision of how to manage the blocks under Zend Framework.
(далее…)

Обновление кода к статье “Блоки в Zend Framework”

Среда, Декабрь 2nd, 2009

Я обновил статью Блоки в Zend Framework. Финальная версия и добавил в код дополнение, позволяющие передавать параметры главного контроллера в блок.
Это означает, что когда вы находитесь на странице, к примеру, http://example.com/pages/view/777 (где controller - pages, action - view и id - 777), то идентификатор (777) передастся так же в контроллер блока, который вы загружаете на данной странице, где его можно получить стандартным способом: $this->_request->getParam(’id’).

Event bubbling в Javascript - что это такое?

Пятница, Ноябрь 27th, 2009

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

Я расскажу про такую широко известную в узких кругах фишку, как event bubbling. Что это вообще такое?

Когда мы кликаем по-какому либо элементу на странице, то событие поднимается по всем родительским узлам кликнутого элемента, пока не дойдет до узла document. Это и есть event bubbling.
Посмотрим наглядно как это работает, ведь лучше увидеть, чем сказать тысячу слов.

Есть HTML:

<div id="dialog">
    I'm a absolutely positioned dialog. So click me!
</div>

Есть CSS:

<style type="text/css">
#dialog {
    padding: 200px;
    position: absolute;
    top: 100px;
    left: 100px;
    border: 1px solid #000;
    background: #ddd;
}
</style>

И, самое главное, есть javascript (JQuery):

<script type="text/javascript">
$(document).ready(function() {
    $('#dialog').click(function(e) {
        alert('Clicked on dialog!');
    })

    $(document).click(function(e) {
        alert('Clicked on document!');
    })
});
</script>

Как видно по коду, у нас навешаны колбэки на клик по диалогу, а так же на клик по документу. Давайте теперь откроем рабочий пример и кликнем по диалогу. Что получилось? А получилось 2 алерта, алерт диалога и алерт документа. Почему так вышло, мы же кликнули только по диалогу? Причина этого именно в event bubbling’е.

Давайте теперь сделаем так, чтобы при клике по диалогу появлялся только алерт этого диалога. Все, что нужно сделать, это отменить event bubbling, чтобы он не поднимался вверх по DOM узлам. Сделать это можно просто добавив e.stopPropagation() в колбэк диалога. Все. Давайте посмотрим второй пример.

Вот так, вроде простая вещь - но знают о ней немногие. Ее знание сильно облегчает разработку на javascript. Как, например, без особых извращений сделать так, чтобы какой-либо элемент на странице скрывался при клике вне этого элемента? Только через event bubbling!

До скорого.

Developing pretty buttons with css best practices

Понедельник, Ноябрь 16th, 2009

In this article I’ll show you how to make beautiful buttons to use these on your web pages using best practices. These buttons are:

  • Use only one picture for all states
  • Has a 3 states: the state of rest, when you hover the mouse and when clicked.
  • Having less of css code.
  • Can be easily embeded into any place of your web pages.
  • The text on the button is just text, not image.
  • Buttons can be of any width.

As a result, we have got these buttons:

preview

(далее…)

Делаем красивые кнопки с использованием лучших практик

Понедельник, Ноябрь 16th, 2009

В этом примере я расскажу, как сделать красивые кнопки для использования их на ваших веб-страницах использованием лучших практик. Эти кнопки будут:

  • Использовать всего лишь одну картинку для всех состояний
  • Поддерживать 3 состояния: состояние покоя, при наведении мыши, при нажатии.
  • Иметь малое количество CSS-кода
  • Легко встраиваться в любые места ваших веб-страниц
  • Текст на кнопке это именно текст, а не картинка.
  • Кнопки могут иметь произвольную ширину.

В итоге, мы получим такие кнопки:

preview

(далее…)

Получение ответа в виде JSON от Form.Request в Mootools

Суббота, Ноябрь 14th, 2009

В Mootools есть отличное решение для отправки форм при помощи AJAX, это Form.Request. Он позволяет очень просто отправить форму без перезагрузки страницы.

После того, как форма отправлена, вы можете получить ответ в виде html, чистого текста или XML, в зависимости от того, какой заголовок Content-type вы отдаете на стороне сервера. Но чаще всего, нужно получить запрос в виде JSON, а в Form.Request это не предусмотрено.

Давайте посмотрим, как все таки получить нужный нам ответ в JSON:

new Form.Request($('login-form'), $('login-form-errors'), {
    resetForm: false, // Не сбрасывать форму после отправки

    // В случае успешного запроса
    onSuccess : function(target, text, xml) {
        // Если сервер что-то возвратил
        if (text.length) {
            // Перекодируем ответ в объект JSON
            var json = JSON.decode(text[0].data);
            ...
        }
    }
}).send();

Смотрите так же документацию по Form.Request

Как получить размеры видимой части окна браузера (viewport size).

Вторник, Октябрь 27th, 2009

А вот так:


function getViewportSize() {
    var size = {};

    if (typeof window.innerWidth != 'undefined') {
        size.width  = window.innerWidth,
        size.height = window.innerHeight
    }
    else if (typeof document.documentElement != 'undefined'
        && typeof document.documentElement.clientWidth !=
        'undefined' && document.documentElement.clientWidth != 0) {
            size.width  = document.documentElement.clientWidth,
            size.height = document.documentElement.clientHeight
    } else {
        size.width  = document.getElementsByTagName('body')[0].clientWidth,
        size.height = document.getElementsByTagName('body')[0].clientHeight
    }

    return size;
}

В Mootools лучше делать так:


window.implement({
    getViewportSize: function() {
        var size = {};

        if (typeof window.innerWidth != 'undefined') {
            size.width  = window.innerWidth,
            size.height = window.innerHeight
        }
        else if (typeof document.documentElement != 'undefined'
            && typeof document.documentElement.clientWidth !=
            'undefined' && document.documentElement.clientWidth != 0) {
                size.width  = document.documentElement.clientWidth,
                size.height = document.documentElement.clientHeight
        } else {
            size.width  = document.getElementsByTagName('body')[0].clientWidth,
            size.height = document.getElementsByTagName('body')[0].clientHeight
        }

        return size;
    }
});

Время - деньги. Как сэкономить деньги при разработке ПО.

Четверг, Октябрь 22nd, 2009

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

Заказчику как правило все равно, как там оно работает внутри, лишь бы все работало. Такой подход к разработке складывается и у разработчиков проекта. Может показаться, что так это и правильно, главное ведь, чтобы проект работал? В этой статье я хочу рассказать, как можно сэкономить деньги при разработке программного продукта.

Часто временные рамки не позволяют “сделать красиво” в коде проекта, часто сделать это мешает квалификация разработчиков. Но очень важно, чтобы проект был красив не только снаружи, но и изнутри, в архитектуре и коде. Заказчикам часто все равно, а зря - они несут лишние потери денег, и вот почему: (далее…)

Работа с несколькими БД в Zend Framework и с иcпользованием Zend_Application

Среда, Сентябрь 9th, 2009

Как работать с несколькими БД в ZF? Давайте посмотрим, начнем с конфигурационного файла. Вы ведь используете компонент Zend_Application? Тогда поехали.

Будем придерживаться правильного подхода в разработке приложений. Давайте создадим такой ini файл с настройками для Zend_Application. В конфиге будет одна общая секция, и 3 секции для разных сред выполнения нашего приложения - development, test и production. В каждой из этих секций мы сможем работать с несколькими БД одновременно.
(далее…)

Использование Zend_Form без декораторов

Вторник, Сентябрь 8th, 2009

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

Кроме того, я почему-то уверен, что использование декораторов в Zend Form это не лучшее решение. В настоящей действительности все чаще приходится работать с готовой XHTML разметкой, которую предоставляет верстальщик. В таком случае, программисту приходится “переводить” уже сверстанную форму в php-код. Разве это удобно, разве это способствует продуктивности? Никак нет. Просто делается лишняя работа, вместо того, чтобы подставить в нужные места формы вывод ошибок и прочего.

Но как сделать так, чтобы наша форма сохраняла функциональность валидаторов, “зашитых” в ней, и при этом мы могли бы визуально видеть разметку формы? Как ни странно, но в этом нам поможет декоратор! (далее…)