Tips And Tricks

IE7 не показывает скрытый html после удаления CSS класса который его скрывал с помощью jQuery

Posted in Development, Javascript, Tips And Tricks on December 24th, 2009 by Yaroslav Vorozhko – 1 Comment

Проблема

У IE7 и IE6 есть такая особенность, что когда вы удалете класс, который скрывал (display:none) содержимое строки таблицы (тег tr) с помощью jQuery метода removeClass(), то сожержимое строки таблицы (тег tr) все равно не будет отображаться.

Пример

Есть у нас форма в таблице, у которой первые две строки видны, а остальные спрятаны и должны отображаються по нажатию на ссылку.

CODE:
  1. <table>
  2. <tr>
  3.     <td>Your name: </td>
  4.     <td><input type="text" name='name'></td>
  5. </tr>
  6. <tr>
  7.     <td>Your email: </td>
  8.     <td><input type="text" name='email'></td>
  9. </tr>
  10. <tr>
  11.     <td colspan='2'><a href="javascript:void(0);" onClick="showAdvFields();" id="showAdvFields">+ Show advanced options</a></td>
  12. </tr>
  13. <tr class='hide'>
  14.     <td>Your twitter: </td>
  15.     <td><input type="text" name='twitter'></td>
  16. </tr>
  17. <tr>
  18.     <td></td>
  19.     <td><input type="submit" value='Submit'></td>
  20. </tr>
  21. </table>
  22.  
  23. <scripty type="text/javascript">
  24. //$j - это ссылка на jQuery.
  25. function showAdvFields()
  26. {
  27.     if ($j("tr").hasClass('hide')){
  28.         $j("tr.hide").addClass('showAdv');
  29.         $j("tr.hide").removeClass('hide');
  30.         $j("#showAdvFields").html(" - Hide advanced options");
  31.        
  32.     } else {
  33.         $j("tr.showAdv").addClass('hide');
  34.         $j("tr.showAdv").removeClass('showAdv');
  35.         $j("#showAdvFields").html(" + Show advanced options");
  36.     }
  37. }
  38. </script>

Решение

Во первых перестаньте использовать барузер Internet Explorere и переходите на FireFox и Google Chrome :). А если у вас нет выбора, то решение использовать функцию jQuery show, которая решает проблему совместимости с IE.
Вот так я изменил метод показа и скрытия строки таблицы.

CODE:
  1. function showAdvFields()
  2. {
  3.     if ($j("tr").hasClass('hide')){
  4.         $j("tr.hide").addClass('showAdv');
  5.         $j("tr.hide").show();
  6.         $j("tr.hide").removeClass('hide');
  7.         $j("#showAdvFields").html(" - Hide advanced options");
  8.        
  9.     } else {
  10.         $j("tr.showAdv").addClass('hide');
  11.         $j("tr.showAdv").hide();
  12.         $j("tr.showAdv").removeClass('showAdv');
  13.         $j("#showAdvFields").html(" + Show advanced options");
  14.     }
  15. }

Вывод

Не используйте доморощенные решения, читайте документацию и используйте стандартные методы. Я добавил вызов $j("tr.hide").show(), что помогло решить проблему показа и вызвов $j("tr.showAdv").hide() что решило проблему скрытия строки.

Можно конечно обойтись и без класса hide, но такое решения было очень практично.

Простой загрузчик файлов для Zend Framework

Posted in Development, Tips And Tricks, ZendFramework on December 17th, 2009 by Yaroslav Vorozhko – Be the first to comment

Сегодня увидел хороший code snippet простого лоадера файлов в проект на Zend Framework.

CODE:
  1. class App_Application_Resource_Fileloader extends Zend_Application_Resource_ResourceAbstract {
  2.   /**
  3.    * @return null
  4.    */
  5.  
  6. public function init() {
  7.         $options = $this->getOptions ();
  8.         foreach ($options as $filePath)
  9.             include $filePath;
  10. return null;
  11.        
  12.     }
  13.    
  14. }
  15.  
  16.  
  17. resources.fileLoader[] = LIBRARY_PATH "/App/Regex_Functions.php"
  18. resources.fileLoader[] = LIBRARY_PATH "/App/Api_Functions.php"

Autoload своих библотек в Zend Framework 1.8+

Posted in Development, PHP, Tips And Tricks, ZendFramework on December 11th, 2009 by Yaroslav Vorozhko – Be the first to comment

Чтоб загружать в Zend Framework свои библиотеки, нам надо сделать следующее:
Первое - это добавить физический путь к библиотеке в include_path.
Второе - это указать префикс классов библиотеки, если такой вообще используется.

Добавить путь в include_path можно двумя способами:
1. Жетско прописать путь в public/index.php файле:

CODE:
  1. set_include_path(implode(PATH_SEPARATOR, array(
  2.     realpath(APPLICATION_PATH . '/../library'),
  3.     realpath(APPLICATION_PATH . '/../mylib'),
  4.     get_include_path(),
  5. )));

2. Прописать путь в конфигруационном файле application/configs/application.ini

CODE:
  1. includePaths.mylib = APPLICATION_PATH "/../mylib"

В обоих случаях мы добавляем путь к mylib в include_path. Второй способ более предпочтительный, так как на основе выбранной конфигурации (production, develeopment, test) можно устанавливать путь к различным версиям mylib.
Кстати используя этот же прием, можно устанавливать путь и к каталогу library/Zend и на основе конфигураций подгружать различный версии Zend Framework.

И так, второе что нам необходимо сделать - это подключить автозагрузчик и установить префикс используемый классами библиотеки.
Я прописал автозагрузчик в файле public/index.php

CODE:
  1. require_once 'Zend/Loader/Autoloader.php';
  2. $loader = Zend_Loader_Autoloader::getInstance();
  3. $loader->registerNamespace('My_');

В данном случае префикс классов в моей библиотеки "My_".

Также, этот же код можно прописать и в классе Bootstrap.php

CODE:
  1. protected function _initAutoload()
  2.     {
  3.         require_once 'Zend/Loader/Autoloader.php';
  4.         $loader = Zend_Loader_Autoloader::getInstance();
  5.         $loader->registerNamespace('My');
  6.     }

Все, теперь ZF знает как загружать классы из вашей бибилиотеки.

Zend Studio: Workspace in use choose different workspace

Posted in Clients Configuration, Tips And Tricks, Zend Studio on December 7th, 2009 by Yaroslav Vorozhko – Be the first to comment

Вот такую ошибку я увидел недавно, после того как экстренно завершила работу Zend студия.
Причем заставить выбрать рабочее простраство по умолчанию не представляется возможным.
Вот как решается это под Linux (Ubuntu):
rm -rf /tmp/eclipse
С данной проблемой под Windows не сталкивался, поэтому точного решения не подскажу.
Но, как ориентир, я порекомендовал бы почистить "tmp" каталог в Application Data.

HG Mercurial email уведомления

Posted in Mercurial HG, Server Configuration, Tips And Tricks on November 24th, 2009 by Yaroslav Vorozhko – Be the first to comment

В каждом серьезном проекте используется контроль версий и разработку зачастую ведет не один программист. Как минимум, кроме программиста есть еще и главный программист, который следит за качеством разработки.
С помощью hg mercural мы можем предоставить главному программисту мониторинг изменений в репозитории, особенно когда это касается обновления главной ветки.
В mercurial для этого есть замечательный встроенный плагин notify, который поможет нам настроить уведомления по email.

Схема репозиториев будет следующая:

  1. Главный /www/mybigsite.com/
  2. Транзитный /home/repos/mybigsite
  3. Репозиторий разработчика находится в его домашнем каталоге.

Когда разработчику надо отправить новую порцию изменений в главный репозиторий, он:

  1. Отправляет данные в транзитный репозиторий (команда hg pus)
  2. А потом главный разработчик проверяет изменения и обновляет главный репозиторий (команда hg pus && hg up)

Настроим два уведомления:

  1. По событию hg pus в транзитный репозиторий - будем отправлять diff изменений главному программисту. Таких обновлений (hg pus) разработчик или разработчики могут сделать несколько, до того как будет обновлен главный репозиторий.
  2. Главный программист получив уведомления об обновлении транзитного репозитория проверяет изменения и обновляет главный репозиторий. По этому событию мы отправляем главному разработчику новую порцию diff изменений, который содержит именно все порции обновлений, что попали на главный репозиторий.

Теперь перейдем к настройке уведомлений используя hghook notify.
Открываем файл команд hgrc транзитного репозитория, если файла нет, то создаем его /home/repos/mybigsite/.hg/hgrc и добавляем следующие строки

read more »

MySQL меняем storage engine в нескольких таблицах на InnoDB

Posted in Development, MySQL, Tips And Tricks on November 17th, 2009 by Yaroslav Vorozhko – 3 Comments

Задача изменить storage engine для всех таблиц mysql в одной базе данных.

Это решение работает для тех таблиц, которые имеют одинаковый префикс, например для таблиц wordpress и других CMS поддерживающих префиксы.

Коротко, задача решается получением списка всех таблиц в один файл, с помощью замены строк строятся правильные SQL команды и последнее - надо выполнить команды.

1)Получаем список таблиц в файл:

CODE:
  1. mysql -u username -ppassword -D dbname -e "show tables"> outputfile.txt

2)Открываем файл outputfile.txt например в vim и делаем следующие замены:

  • Префикс меняем на ALTER TABLE prefix_ - для vim: %s/prefix_/ALTER TABLE prefix_/g
  • Перенос строки меняем на ENGINE=InnoDB плюс перенос строки - для vim: %s/\n/ ENGINE=InnoDB;\r/g

3)Выполняем скрипт, но прежде делаем бэкап базы:

CODE:
  1. mysqldump -u username -ppassword -D dbname> dbname.sql
  2. mysql -u username -ppassword -D dbname <outputfile.txt

Может кто нибудь подскажет как сделать то же самое для таблиц без одинакового префикса?

Ответы на вопросы в интервью по веб разработке

Posted in Development, Self Development, Tips And Tricks on August 25th, 2009 by Yaroslav Vorozhko – 3 Comments

Антон Шевчук написал хороший список вопросов для интервью по приему на работу веб разработчиков. Я хочу предложить вам краткие комментарии и советы по каждому из вопросов, надеюсь это поможет вам лучше ориентироваться в мире веб разработки и поможет пройти интервью.

- С какими PHP библиотеками, фреймворками знакомы?
Соискатель должен знать о существовании таких фреймворков как Zend Framework, CakePHP, CodeIgniter или Symfony, и желательно иметь опыт работы с одним из них (список можно расширить – это не так принципиально).

За 4 с лишним лет работы PHP разработчиком я познакомился с тремя из перечисленных фреймворков, и активно использую Zend Framework.
Знание различных фреймворков дает вам понимание и идеи как писать код. Этим путем обязан пройти каждый разработчик. Изучайте и участвуйте в развитии Open Source проектов - это даст вам большой опыт, по сравнении с тем, который вы способны сами получить в аналитическом мышлении. Отвечая на этот вопрос будет уместно рассказать о своих способностях к проектированию и архитектурному мышлению.

- С какими API приходилось работать?
Интересуют Google API, AMF PHP, различные payment gateway, Facebook API, Twitter API и т.д.

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

- Есть ли опыт работы с различными CMS?
Опыт работы не как web-мастера, а как программиста…

Думаю компания использует некоторые CMS в своих проектах. Расскажите подробно про ту CMS с которой вы знакомы или пусть даже про свою само-писанную с которой довелось работать.

- Работал с PHP 4? Назови различия с 5-ой версией.
- Что нового в PHP 5.3?
- Типы данных в PHP?
Этот вопрос на добивание, он часто ставит в тупик, если человек отвечает что их восемь, а потом начинает их перечислять, значит он готовился к собеседованию :)

Все ответы есть в PHP мануале, просто RTFM.

- Что такое сериализация?
- Что самое сложное разрабатывали на PHP?
Этот вопрос может расставить все точки над “i”, но не стоит его задавать в самом начале – это пугает…

Второй вопрос очень хорош, и может быть даже решающим. Я бы рассказал здесь про проектирование, архитектуру и применение OOP в своем последнем проекте или в своем самом интересном проекте. Также, добавил бы про высокую оптимизацию приложения и работу с большими массивами данных. А, если вы работали с какими то «экзотическими», но мега-полезными библиотеками, такими как Sphinx Search, Lucene или может с чем то уникальным в вашей компании, то об этом также стоит рассказать.

- Какие шаблоны проектирования знаешь? Расскажи в чем соль каждого?
- Что есть MVC? Какую роль выполняет каждый из составляющих элементов?

Шаблоны проектирования или design patterns являються не чем иным, как распространенными методами решения типичных задач. Кто внимательно читал книгу «Банды четырех» или «Архитектура корпоративных программных приложений» Фаулера, тот ответит на этот вопрос даже с неким удовольствием.

- С какими web-серверами работал? Apache? Nginx? IIS?
- Можешь описать как можно подробнее, что происходит между тем, как пользователь ввёл в адресной строке http://google.com и тем, как браузер показал страницу?
– Системы контроля версий? SVN? CVS? Git? Что есть branch/trunk/tags?
– Багтрекинг системы?

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

Немного мучаю по БД:
- С какими БД работал? Что такое транзакции, хранимые процедуры, тригеры?
- Коль работал с MySQL то сможешь назвать различия между версиями 4.1, 5.0, 5.1?
- Каковы различия между MyISAM и InnoDB?

Все это есть в мануале MySQL, и как минимум теоретически знания по дополнительным возможностям MySQL у разработчика должны быть.
Типов storage engine не так уже и много и знать про характеристики основных двух надо обязательно.
Если вы имеете более 3 лет опыта работы в веб разработке на php, python, perl, то скорее всего вы начинали с mysql 3.23 и по мере эволюции MySQL представляете различия и возможности новых версий. Поэтому этот вопрос не должен вас сбить с ног.

И для полноты знаний web-разработчика естественно не хватает вопросов о HTML, CSS, Javascript:
- Ваша субъективная оценка своих знаний по CSS по пятибальной шкале?
- Приходилось ли верстать сайт?
- Почему CSS это каскадные таблицы стилей?
- Что здесь написано? Напишите HTML код к которому будет применен данный стиль.

PHP:
  1. #my p.sel:first-line, .main li li a:hover + span
  2. {
  3. color:#f00; /* Что это за цвет? */
  4. }

Уметь читать, понимать и писать CSS это разные вещи. Если вы обладаете первыми двумя навыками, этого достаточно, умеет верстать отлично.

- Ваша субъективная оценка своих знаний по Javascript’у?
- Что самое сложное разрабатывали с использованием Javascript’a?
- С какими Javascript фреймворками работали? Какие плагины использовали? Писали ли плагины, виджеты?
Интересуют jQuery/UI, Prototype/Aculo, MooTools/MochaUI, Dojo Toolkit, ExtJs.
- Каким образом можно реализовать наследование в Javascripte?
- Что такое AJAX и как он работает?
- Что такое JSON? С JSONP сталкивались?

Знания по Javascript важнее знаний CSS, но они взаимосвязаны и поэтому зная одно и не зная другого, вы не сможете делать полноценные скрипты. Javascript фреймворки просто облегчают вашу жизнь, попробуйте выучить основы хотя бы одного и вам будет уже намного проще с Javscript.

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

Список книг обязательных к прочтению, которые помогут вам в веб разработке: