Определение имени часового пояса по смещению от UTC

Промучался сегодня, а потому пишу)

Задача:
Получить имя часового пояса, например Europe/Helsinki, по значению смещения от UTC браузера.

Решение:
1. Получаем значение смещения от UTC браузера и отправляем в PHP.
var time_offset = - new Date().getTimezoneOffset()

2. Получаем имя временной зоны (часового пояса). $request['time_offset'] — значение, пришедшее из JS
$offset = timezone_name_from_abbr('', $request['time_offset']*60, 1); 

Также, пример и подробное описание функции timezone_name_from_abbr() имеется в официальной документации php.net/manual/ru/function.timezone-name-from-abbr.php

Use this ;)

Ошибка ключа "s" в регулярном выражении для браузеров Chrome и Firefox

Столкнулся с проблемой использования ключа «s» в регулярных выражениях JavaScript. А именно, с ошибками типа:
  • «SyntaxError: Invalid flags supplied to RegExp constructor 's'» в Google Chrome
  • «SyntaxError: invalid regular expression flag s» в FireFox
Ключ «s» в регулярных выражениях отвечает за разбор строки без учёта символов переноса строки, другими словами «в одну строку». Очень удобно, когда нужно парсить часть html кода.
Предлагаю своё, скорее всего не оптимальное, решение данной проблемы и буду рад, если кто то предложит что-то лучше)
Идея заключается в том, чтоб перед парсингом по нужному регулярному выражению, привести многстрочный текст к однострочному. Для html выражения это не «страшно», в смысле не приведет к разрушению вёрстки. Ниже представляю пример выражения.
var html = 'Текст (например html) с переносами строк';
html.replace(/\n+/g, '') // приведение к одной строке
    .replace(/выражение для поиска нужной части/, '');

Всем удачи! Use this ;)

Combobox в ExtJS. Установка автоматической ширины выпадающего списка

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

При работе на frontend`е с фреймворком ExtJS (v4.2.2) возникла необходимость разделить определение ширины самого комбобокса (которая может быть как фиксированной, так и зависеть от соседних элементов в рамках одного блока) от ширины выпадающего списка, который появляется при нажатии на combobox. Ширина должна всегда иметь максимальное значение по содержимому, т.е. зависеть от самого длинного значения в store combobox`а. Казалось бы ничего сложного в этой задаче нету: гугл + офф. документация (а лучше наоборот) должны решить этот вопрос. Но в случае с ExtJS не все так просто :)


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

Экспорт данных из таблицы ExtJS Grid в таблицу Excel

Как сделать экспорт данных из таблицы ExtJS Grid в таблицу Excel?

Данное решение экспериментальное и имеет место для небольших, одностраничных, таблиц типа xtype:'grid' с хранилищем типа xtype:'store'.

Для реализации функционала, нам понадобится:
  • Библиотека ExtJS — JavaScript фреймворк. Если вы слышите это впервые, статья не будет полезна.
  • PHP сервер весрии 5+
  • PHPExcel — библиотека для создание Excel документа. Ссылка на сайт производителя.


Grid таблица
Для примера берём простейшую таблицу с тремя колонками ID, Имя, Дата. В данном примера поля имеют тип string (текст).


Так как статья получилась длинная, читайте продолжение под катом...

OpenCart, Simple и поле для даты

Во время рабочего процесса неожиданно возникла задача добавить покупателям поле «Дата рождения», ввод данных нужно было реализовать не текстовым полем, а выпадающими списками для дня, месяца и года рождения. Возможно, в более поздних версиях Simple уже есть готовое решение, но в моем случае пришлось немножко повозиться. Итак, путь решения следующий, создаем нужное нам поле для пользователя в админке, я все-таки выбрал текстовое, но в принципе тип поля особой роли не играет, после чего начинаем кодить.

Шаг 1.
Лезем в system/library/simple/simple.php, находим функцию, которая выводит поля покупателя и вставляем после:

$html = '';

код приведенный ниже:


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

Отправка формы средствами JavaScript с прохождением встроенной валидации браузера HTML5

Получилось немного заумное название, но смысл от этого не меняется.

Итак, наша задача, чтоб при нажатии на кнопку отправки формы обработчику Submit, выполнилась встроенная в браузер проверка формы, например на обязательные поля, но после неё выполнилась не стандартная функция отправки формы, а наша, написанная на JavaScript.

В данном случаем будем использовать javascript framework jQuery. Так проще обращаться к дереву DOM.

Отправка формы средствами JavaScript с прохождением встроенной валидации браузера HTML5

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

<form id="test-form">
    <input type="text" required="" id="test" /><br />
    <input type="submit" value="Отправить форму" />
</form>
<script type="text/javascript">
$("#test-form").on('submit', function(e){ // создаём обработчик события
    e.preventDefault(); // перехватываем стандартное событие и не выполняем его
    alert($('#test').val()); // выполняем свой код
});
</script>

Пример рабочий, можете пробовать!

Как прижать футер к низу экрана (окна браузера)

Извечная проблема — Как прижать футер к низу экрана (окна браузера). Возникает она не часто, но как обычно не вовремя и решения в голове постоянно не находится. Вот по этому предлагаю простое и не громоздкое JavaScript решение решение.

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

function footer2bottom() {
    var $footer = $('.footer-container'); // class элемента футера. вместо него можно использовать ID
    $footer.css('margin-top', 'auto'); // сбрасываем настройку верхнего отступа для блока футер
    if ($('body').height() < $(window).height()) { // если высота body меньше, чем высота окна
        var fmargin = $(document).height() - $footer.offset().top - $footer.height(); // вычисляем верхний оступ
        $footer.css('margin-top', fmargin + 'px'); // применяем верхний отступ
    }//if    
}
// обработка события после загрузки дерева DOM
$().ready(function() {
    footer2bottom(); // вызываем функцию для футера
    $(window).on('resize',function(){ // если окно изменяет размер (можно дописать другие события)
        footer2bottom(); // вызываем функцию для футера
    });
});

Замена параметра в строке адреса JavaScript

Как заменить параметр в строке адреса средствами javascript?
Пару слов о примере, где это понадобилось.

Пример очень простой, есть ссылка в старом интернет магазине на Joomla + Virtuemart. На страничке с товаром сделан небольшой фильтр, результатом работы которого является переход к нужной категории.
Смысл в том, что сам фильтр установлен на страничку категории. SEF не задействованы и строка адреса выглядит вот так — ...&category_id=28.

Нам нужно обратиться по той же самой строке, но заменить в ней ID категории. (пример исключительно для ознакомления!)

Замену выполним при помощи регулярного выражения:
location.href = location.href.replace(/category_id=\d+/, 'category_id=' + last_cat);

Скрыть все элементы кроме указанных JQuery

Как правильно подобрать селектор для скрытия всех элементов кроме элементов с определённым ID?
Имеем блок на страничке с набором элементов у которых заданы, либо не заданы ID.
Например:

<div class="test">
    <div id="test1">test1</div>
    <div id="test2">test2</div>
    <div id="test3">test3</div>
    <div>test no ID</div>
</div>

Нам нужно скрыть все дочерние элементы блока с классом «test», кроме элементов с ID = [test2, test3]. Для выполнения этой задачи, будем использовать возможности удобного JavaScript фреймворка jQuery.


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

Удаление чисел из строки JavaScript

Как удалить числа из строки при помощи JavaScript?

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

Видимо, разработчик забыл убрать echo вывод и в результате, в конце строки добавлялась цифра 1.

Было принято решение убрать её при помощи JavaScript. И пусть я не люблю «костылей», но иногда, время дороже!

Итак, пример:

var stroka = "Состояние на складе1"; // исходная строка
stroka = stroka.replace(/\d/g, ''); // замена используя регулярное выражение (только числа), на пустой символ

В результате, в переменной stroka будет текст, очищенный от чисел и цифр.