• JavaScript аналог функций php base64_decode и base64_encode

    Этот JavaScript код используется для кодирования / декодирования данных с использованием base64 (кодировка эта разработана, чтобы можно было перегонять двоичные данные через текстовые транспортные слои, которые не являются 8-битными, к примеру, http). Сценарий полностью совместим с UTF-8 кодировкой. Вы можете использовать формат base64 как очень простой механизм шифрования. Разумеется, это не является шифрованием, но скрыть от любопытных глаз что-то, к примеру в cookie сойдет. Для php аналогичные функции base64_encode и base64_decode встроены в ядро, для js же пока приходится использовать самописные функции. Если вы планируете использовать кодировку UTF-8 в проекте, не забудьте установить кодировку страницы на UTF-8 .  

  • PHP класс для быстрой пакетной обработки изображений

    Представляю Вашему вниманию класс для пакетной обработки файлов jimage. Класс позволяет делать тумбики изображений, создавать коллаж из десятка картинок, и применять различные gd эффекты к изображениям. А также комбинировать все эти действия.

    Класс написан мной для конкретного проекта, и с тех пор успешно применяется во других. Исходный код на гитхабе.

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

    <?php 
    define('ROOT',dirname(__FILE__)); // для работы скрипта должна быть объявлена
    // эта константа содержащая корень сайта
    include "class.jimage.php";
    $ji = new jimage();
    $ji->thumb(ROOT.'/img/1.png',ROOT.'/img/mini_1.png',100);

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

    USE_HOWSET или '' - и ширина и высота должны быть заданы, размер итогового тумбика задается строго, изображение обычно искажается
    USE_WIDTH или 'w' - задается только ширина итогового тумбика, высота считается пропорционально по заданному изображению
    USE_HEIGHT или 'h' - тоже только по высоте
    USE_AUTO или 'a' - по умолчанию, задаем и высоту и ширину, если входящее изображение вертикальное то размеры тумбика расчитываются так, чтобы все изображение влезло в заданные пределы.

    Поясню все варианты на примерах, возьмем за основу изображение красавицы Хайден Панеттьери

  • PHP Универсальный RSS Генератор (поддерживает RSS 1.0, RSS 2.0 и ATOM)

    RSS канал на свой блог я прикрутил давно, взяв php скрипт  из Danneo CMS. Вот только радость моя была не долгой, скрипт не давал валидный rss, и любимая Opera кричала что-то невразумительное об ошибке XML. Тогда я решил написать rss генератор сам,  но так как не очень люблю строить велосипеды, сперва я решил поискать готовое решение.

    Попробовав кучу скриптов мой выбор пал на скрипт из phpclasses.org, также можете скачать на моем сайте

    Скрипт поддерживает генерацию:

    • RSS 1.0 
    • RSS 2.0
    • ATOM 1.0

     

  • strtotime в нужном формате

    В php есть замечательная функция работы со временем strtotime. Она преобразует строковое представление даты в UNIXTIME формат(количество секунд, прошедшее с 1-го января 1970-го года). Удобна она прежде всего тем, что в нее можно подавать данные, введенные пользователем в форме, к примеру, дату рождения. На выходе мы получим удобный unixtime, с помощью которого можно проводить различные валидные сортировки по дате.

    Приведу пример:

    echo strtotime('8-12-1986'); // вернет 534366000

    что эквивалентно

    echo mktime(0,0,0,12,8,1986);

    Но что если ваш пользователь пришлет на вход функции такой формат '8 12 1986'. В этом случае 

    echo strtotime('8 12 1986'); // вернет false

    Функции просто не понятно, что здесь день, что здесь месяц, а что год. Как решить данную проблему? Как показать php формат введенной даты? 

  • Автоматический переводчик текста на PHP через Google Translate

    Не так давно Google закрыл API для своего Google Translate, в результате множество скриптов для автоматического перевода текста просто перестали работать. Программисты вынуждены были написать скрипт, который парсит переведенный текст из самого переводчика. Этот класс может переводить тексты между двумя языками с помощью Google Translate. Он может послать HTTP  запрос  на  сайт и перевести текст между двумя заданными языками.
    Класс парсит возвращенную Google Translate страницу результата и возвращает переведенный текст извлеченный из страницы.

  • Добавление кнопок социальных сетей на сайт

    В мире WEB2.0 окончательную и бесповоротную победу в распространении информации одержали социальные сети и сервисы. В том же facebook информации сейчас столько, что google нервно подрагивает в надежде спарсить весь этот объем к себе в базу. Не так давно представители  facebook намекнули о покупке браузера Opera, со всеми вытекающими. С такими темпами развития социальные сети в частности такие гиганты, как фейсбук или вконтакте могут создать нечто вроде интернета в интернете. Уже сейчас для большинства людей интернет представляет из себя лишь браузер с контактом на домашней страничке, по умолчанию.  Присоединиться к этому успеху и поможет данная статья. 

  • Добавляем в jQuery $.browser

    jQuery Browser  В jQuery плагин $.browser устарел, и его удалили. Разработчикам советуют использовать для этих целей специальные инструменты типа Modernizr. Беда в том, что браузеров становится очень и очень много. Следить за всеми ними уже не так важно, новые версии jQuery не поддерживают ie6-7, что правильно. 

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

  • Как определить преобладающий цвет в изображении

    Сортировки фотографий по содержанию - задача совсем не тривиальная, и в большей мере играет роль качество распознавания содержания, с которым Вам нужно отсортировать изображение. Конечно о системе интеллектуального распознавания изображения речи не идет, но получить инструмент, с которым можно было бы сортировать более менее похожие фото, вполне реально. К примеру фотосет Джессики Альбы, который каким-то образом смешался с 1000 фото других актрис. Часто отличить такой фотосет от остальных можно по набору цветов, которые доминируют в фото, так как съемки обычно ведутся в одних и тех же декорациях, и лишь модель меняет позу. Этому занятию и посвящен данный пост.

    Вы наверное видели в Яндекс картинках поиск по цвету. Как было бы здорово если бы у Вас была возможность сортировать фото таким же образом на своем сайте.

  • Как перелить из article в news в Danneo CMS

    Модули article и news в Danneo CMS очень похожи. Практически, отличаются только таблицы pref_articele и pref_news и то, лишь одним полем. В одном проекте встала задача перелить данные со всеми категориями и статьями в другой, из article в news. Выкладываю небольшой скрипт созданный для этих целей.

    Пользоваться им достаточно просто.

    Заливаем в корень сайта с Danneo CMS скрипт migration.php, в нем находим эти строчки

    $k = 0;
    $items = array();
    $p = moveCat('news',0,&$items);
    echo 'Статей перенесено:'.$k.', категорий перенесено:'.$p;

    Если вы хотите перенести из Главной категории(catid=0) в ту же категорию, то ничего не меняем. Теперь, если вдруг нам захотелось перенести все в категорию с catid = 15, меняется одна строчка

    $p = moveCat('news',15,&$items);

    Если Ваш модуль сделан на основе news или article, то эту же строчку меняем, к примеру, на

    $p = moveCat('firms',15,&$items);

    Если в скрипте есть ошибки, буду рад вашим комментариям.

  • как проверить пересекаются ли два прямоугольника

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

    варианты пересечений двух прямоугольников

  • Определить позицию элемента на странице

    Пишу эту заметку скорее для себя, чтобы в другой раз не гуглить Координаты элемента на странице. Довольно сложная и часто встречающаяся задача - кроссбраузерно, точно определить в какой именно позиции находится DOM элемент. У элементов есть свойства, которые возвращают отступы, но те, кто хоть раз пытался написать код для нескольких браузеров, знает, что они совершенно не работают. Тонкости типа прокрученной страницы или отступов других элементов находящихся выше, у меня отбивают желание самому искать решение проблемы. Поэтому в результате небольших поисков был найден этот скрипт. О том, как он работает можете почитать тут на сайте автора. Нам же важен конечный результат

  • Пишем собственную систему шаблонизатора на php

    Модель Вид Контроллер, или попросту MVC - наверно самый популярный паттерн разработки web-сайтов. Грубо говоря Модель - содержит, Вид - показывает, а Контроллер -  все это дело координирует..

    В этой статье я расскажу про Вид. А точнее самалепный шаблонизатор. Почему я вновь пишу велосипед? - просите Вы. Я отвечу: PHP сам по себе является шаблонизатором, и прикручивать что-то стороннее к его работе, вот это уже ненормально. Мы же всего-лишь слегка облегчим работу верстальщику.

  • Полезный класс для конвертации Array в XML php

    Задача проста: конвертировать php массив любой вложенности в xmlдокумент. Готового решения в самом языке так и не обнаружил.  Есть функции которые конвертируют из массива в JSON и обратно, а вот в XML нет. Я конечно заядлый велосипедостроитель, но был не тот случай - время поджимало а проект надо было завершать. Ну что же немного поискав на просторах сети нашел нужное решение 

  • Продожение темы синонимайзера на php

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

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

    $str = 'мама мыла раму, а дочка балкон';
    echo str_replace(array('мама','дочка'),array('дочка','бабушка'),$str);
    //бабушка мыла раму, а бабушка балкон
    echo preg_replace(array('#мама#u','#дочка#u'),array('дочка','бабушка'),$str);
    //бабушка мыла раму, а бабушка балкон
    echo strtr($str,array('мама'=>'дочка','дочка'=>'бабушка'));
    //дочка мыла раму, а бабушка балкон

    Как можете видеть, верным является лишь третий вариант. Но возможности  strtr сильно ограничены, как научить  preg_replace работать также, как и  strtr

  • Простейший синонимайзер на php

    При написании одной доски объявлений, заказчик, как водиться, попросил написать парсер объявлений с известных досок. 

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

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

  • Работа с settimeout и cleartimeout для оптимизации JavaScript кода

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

    Для начала обычный код, который Вы, я уверен, видели ни раз.

    $('input').keyup(function(){
    	$.post('autocomplite.php',{str:this.value},function(data){
    		complite(data);
    	});
    })

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

    Что в этом коде не так, как Вы считаете?

  • Удобная надстройка над нативным mysql_query на php

    Удобная надстройка над нативным mysql_query   Итак, вы уже достаточно давно программируете на php, работаете с БД, добавляете, редактируете, удаляете. Когда делаете это, каждый раз прописываете одни и те же действия: подключение, выбор БД, запрос, выборки и т.д.

       Каждый раз Вы собираете запрос в отдельную переменную, экранируя все входные данные. непременно забывая это сделать с каким-нибудь числом, ведь кому придет в голову подать вместо ?id=123 что-нибудь вроде ?id=delete from...

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

       В цикле мы также можем выбирать данные различными способами: можем, как объект, тогда к каждому полю обращаемся так $row->id, есть функции которые возвращают ассоциативный массив, тогда обращаемся так $row['id'], а есть те которые просто возвращают массив данных.

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

       Пришло время протестировать скрипт на хостинге клиента. Страшно сказать, но он ярый противник linux и apache, купил за большие деньги windows хостинг, с IIS и MsSQL. Ну что же, переписываем пару строк, понимаем, что отличий в работе прилично, и пишем все заново...

       Веселая перспектива не правда ли? 

  • Упаковать папку на сервере при помощи php и ZipArchive

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

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

    Ранее на страницах этого блога уже упоминалась библиотека zipArchive. Однако, тогда речь шла о распаковке архива. 

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

  • Установка фокуса в поле ввода input/textarea на javascript

    По тем или иным причинам не всегда есть возможность подключить к странице jquery Тогда многие привычные вещи приходится делать руками. 

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

    Эта короткая заметка из той же серии: как установить фокус на поле ввода используя только javascript