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

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

  • Полезный класс для конвертации 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