- Использование тэга <br/> для вертикальных отступов
Для отступов есть padding и margin в CSS, а <br/> нужен только для разрывов строк.
- Использование inline CSS
Инлайн стили надо использовать только в крайних случаях. Тогда при редизайне не прийдётся выискивать стили в HTML-шаблонах. Да и страничка будет загружаться быстрее, т.к. CSS-файлы, как правило, кешируются.
- Использование инлайн JavaScript
Аналогично предыдущему пункту. Старайтесь избегать кода вида <a onclick="...". Не стоит загромождать HTML код логикой. Лучше создать отдельный js-файл и навесить обработчик события из него.
- Использование таблиц для отображения нетабличных данных
Про это и так предостаточно сказано, поэтому комментирвать не буду.
- Невалидный HTML
Ваш HTML-код должен 100% проходить валидацию. Провериться можно на W3C Markup Validation Service,
так же рекомендую расширение для FireFox - Html Validator.
суббота, 10 октября 2009 г.
5 признаков плохого HTML кода
Недавно, в связи с редизайном одного проекта, пришлось перелопатить довольно большой объём HTML-кода. Ниже привожу 5 наиболее распространённых ошибок, про которые все знают, но почему-то не особо стараются их избегать.
Метки:
html
вторник, 6 октября 2009 г.
Readonly fields in symfony
Иногда бывает необходимо просто отобразить поле в форме без возможности его изменения. Обычно это актуально для автогенерируемых полей, таких как created_at и updated_at. Проблема в том, что поля типа datetime отображаются в виде набора селектов (sfWidgetFormSelect) и простое навешивание атрибута readonly не поможет:
Если по каким-либо причинам понадобилось вместо поля ввода (input) отображать просто текст, то можно создать виджет myWidgetFormPlain
$this->widgetSchema['created_at']->setAttribute('readonly', 'readonly');
Наиболее простым выходом из ситуации будет замена виджета sfWidgetFormDateTime на sfWidgetFormInput:public function configure()
{
// ...
$this->widgetSchema['created_at'] = new sfWidgetFormInput(array(), array('readonly'=>'readonly'));
// ...
}
Если по каким-либо причинам понадобилось вместо поля ввода (input) отображать просто текст, то можно создать виджет myWidgetFormPlain
class myWidgetFormPlain extends sfWidgetForm
{
protected function configure($options = array(), $attributes = array()) { }
public function render($name, $value = null, $attributes = array(), $errors = array())
{
return $value ? $value : '—';
}
}
При использовании этого виджета необходимо отключить валидатор:public function configure()
{
// ...
$this->widgetSchema['created_at'] = new myWidgetFormPlain();
unset($this->validatorSchema['created_at']);
// ...
}
Метки:
symfony
понедельник, 28 сентября 2009 г.
Routing cache в symfony
Уже довольно давно хотел написать об этом, но всё руки не доходили.
При довольно большом количестве ссылок иногда можно наблюдать ошибку такого плана
Кеш представляет собой огромный сериализованный массив в файле
app/cache/frontend/prod/config/routing/symfony.routing.data.cache
Существует несколько вариантов решения этой проблемы, но для себя самым оптимальным я нашел просто отключение кеша для роутера. В factories.yml
При довольно большом количестве ссылок иногда можно наблюдать ошибку такого плана
Allowed memory size of ******** bytes exhausted (tried to allocate ******* bytes) in app/cache/frontend/prod/config/config_core_compile.yml.php on line 3369Происходит это из-за того, что кеш роутинга становится слишком большим.
Кеш представляет собой огромный сериализованный массив в файле
app/cache/frontend/prod/config/routing/symfony.routing.data.cache
Существует несколько вариантов решения этой проблемы, но для себя самым оптимальным я нашел просто отключение кеша для роутера. В factories.yml
all:
routing:
class: sfPatternRouting
param:
cache: { class: sfNoCache }
Почему я только сейчас пишу об этом? Да потому что только что вышла symfony 1.2.9, в которой как раз по дефолту и отключен кеш роутинга :)
Метки:
symfony
суббота, 26 сентября 2009 г.
вторник, 22 сентября 2009 г.
Code Folding в NetBeans
Уже довольно давно ползуюсь NetBeans, но совснем недавно узнал, что в нём можно делать code folding (аналог #region в Visual Studio).
Итак, формат такой
Вот часть кода в раскрытом виде

А вот она же, но уже в свёрнутом виде

Естественно мало кто захочет набирать всё это каждый раз вручную. Поэтому открываем
Tools → Options → Editor → Code Templates
и создаём следующий шаблон
Выделяем часть кода, давим Alt-Enter и выбираем наш Surronud with...
Вообще бытует мнение, что если приходится использовать фолдинг, то ваш код не очень хорошо структурирован, и я с этим согласен. Но если, например, нужно разобраться в длиннющем скрипте, то здесь фолдинг может очень помочь.
Итак, формат такой
// <editor-fold defaultstate="collapsed" desc="describe what is in here"> your code here // </editor-fold>Параметры defaultstate и desc не обязательны.
Вот часть кода в раскрытом виде

А вот она же, но уже в свёрнутом виде

Естественно мало кто захочет набирать всё это каждый раз вручную. Поэтому открываем
Tools → Options → Editor → Code Templates
и создаём следующий шаблон
// <editor-fold defaultstate="collapsed" desc="${comment}">
${selection}${cursor}
// </editor-fold>
Сохраняем.Выделяем часть кода, давим Alt-Enter и выбираем наш Surronud with...
Вообще бытует мнение, что если приходится использовать фолдинг, то ваш код не очень хорошо структурирован, и я с этим согласен. Но если, например, нужно разобраться в длиннющем скрипте, то здесь фолдинг может очень помочь.
Метки:
netbeans
понедельник, 21 сентября 2009 г.
Бесплатный SVN хостинг для личных проектов
Сначала я использовал assembla, но после того, как она стала полностью платной, перешел на XP-Dev.com. До сих пор пользуюсь их сервисом. Но сегодня, пока их сервер обновлялся и был недоступен, решил на всякий случай подыскать альтернативу.
Итак, небольшое сравнение бесплатных аккаунтов некоторых SVN-хостингов.
Кроме цифр есть такой немаловажный фактор, как удобство пользования. А оно у XP-Dev.com в последнее время оставляет желать лучшего. Вообщем лидер есть, надо будет попробовать...
Итак, небольшое сравнение бесплатных аккаунтов некоторых SVN-хостингов.
| Хостер | XP-Dev.com | Beanstalk | unfuddle | ProjectLocker |
|---|---|---|---|---|
| Пространство | 200M | 100M | 200M | 500M |
| Репозиториев | ? | 1 | unlim | unlim |
| Пользователей | unlim | 3 | 2 | 5 |
| Проектов | 2 | ? | 1 | unlim |
Метки:
svn
Подписаться на:
Сообщения (Atom)