Создание, продвижение сайтов
40-33-54

Мои Best Practices

14 января 2017

Мои лучшие практики при разработке сайтов на друпале:

  1. Добавляю в машинные имена полей название бандла, например — field_news_image вместо field_image. Исключение для полей, которые используются одновременно в нескольких бандлах.

  2. Избегаю использование одного поля в разных бандлах. Т.е. вместо одного поля field_image на несколько бандлов, создаю в каждом бандле по полю field_bundle_image. Но конечно многое зависит от архитектуры, бывают и исключения.

  3. Машинные имена multi-value полей пишу в единственном числе, например field_image вместо field_images. Бывают случаи когда в ходе разработки приходится делать поле single-value, и "s" на конце начинает резать глаз. (На самом деле придумал это только сейчас, но будут соблюдать :))

  4. Машинные имена словарей в множественном числе — categories, colors.

  5. В каждом друпал сайте есть custom модуль с именем custom_helpers, в который складываются служебные функции, реализации хуков, альтер-функции и так далее.

  6. Если какой-то функционал требует 3-4 функции в модуле custom_helpers, то он выносится в отдельный custom модуль.

  7. Если custom модуль будет использоваться только на текущем сайте, то в имя модуля добавляется префикс custom_, чтобы не заморачиваться с выбором имени и возможными конфликтами. Пример таких модулей — custom_checkout или custom_profile.

  8. Custom модули создаются одной командой drush. Можете самостоятельно написать её или воспользоваться уже готовой.

  9. Как понятно из прошлого пункта — drush, drush и ещё раз drush. Основные кейсы — установка модулей, создание модулей, обновление друпала/модулей, drush make.

  10. Модули рассортированы по подпапкам contrib, custom и sandbox.

  11. Использую SASS вместо альтера/препроцесса/переопределения_шаблонов где это возможно. Пример — вместо альтера формы и добавления кнопке класса btn-warning, пишу в scss файле: .form .button { @include btn-warning; }. Не люблю лишней разметки/классов/атрибутов и стараюсь этого избегать.

  12. Переопределяю шаблоны только если не удаётся реализовать задуманное с помощью preprocess и alter-а.

  13. Не держу в template.php кода отвечающего за функционал и бизнес логику. Для это есть модуль custom_helper.

  14. Не стоит увлекаться дисплеями Views. Как правило любое сложное представление следует выносить в отдельный View, а не делать его дисплеем уже существующего. В дисплеях очень легко намудрить с переопределением. Конечно есть и исключения, когда сделать отдельный view технически невозможно.

  15. Стараюсь использовать формат вывода Fields в представлениях, вместо Rendered entity. Это быстрее работает и гибче темизируется из админки.

  16. Своя базовая тема. Её в любой момент можно изменить/допилить.

  17. Выношу часто используемые кейсы в базовую тему. Например можно добавить в базовую тему опцию "Скрывать заголовок на главной", которая позволит одним кликом убирать h1 с главной страницы.

  18. По возможности решаю задачи уже установленным набором модулей или своим кодом. Если задача не решается текущими модулями и требует больших временных затрат, то можно воспользоваться contrib-ом. Стараюсь не плодить сущностей (читай модулей).

  19. Структура директорий в sites/default/files:
    files — обычные файлы, в sites/default/files ничего заливаться не должно.
    images — картинки в подпапках.
    inline — файлы вставленные в текст, например с помощью OCUpload.
    private — приватная директория.
    temp — временная директория.

  20. В dev окружении отключён кэш страниц и блоков, а так же агрегация css и js. Отключается с помощью хардкода в settings.php.

  21. Приемлемое время загрузки страницы — меньше 500-700 ms. Если больше, то приходится разбираться почему и по возможности устранять причину или искать альтернативные решения задачи.

  22. Свой установочный профиль. Позволяет за пару минут развернуть настроенный и готовый к работе сайт.

  23. Нашёл решение задачи, на которое потратил больше 5 минут? Напиши решение в блог, потом сам себе спасибо скажешь :) А в комментах может и чего лучше посоветуют.

  24. Все ajax формы делаются по принципу Progressive enhancement, т.е. сначала форма делается рабочей даже с отключённым js, а дальше навешивается ajax функционал. AJAX Framework чертовски нелогичен и в нём легко запутаться если работать по принципу Graceful degradation.

  25. Активно использую CSS3. Все дизайн-решения которые можно сделать с помощью CSS должны делаться с помощью CSS, а не картинок. Закруглённые углы, тени, градиенты, множественные бэкграунды, анимация, трансформация — всё уже можно использовать, времена IE6/7/8, Opera 10, Firefox 3 давно закончились. caniuse.com расскажет о поддержке браузерами того или иного свойства.

  26. Если какой-то функционал требует больше 200-300 строчек CSS кода, то код выносится в отдельный файл.

  27. При написании селекторов начинаю с id блока. Если это контент, то с соответствующего класса вьюхи/формы/ноды. Стараюсь не использовать больше двух элементов в селекторе. Пример:

    #block-last-news {
      .news { ... }
      .news-title { ... }
      .news-body { ... }
    }

Bad Practices.

Статьи

Сделайте заказ с сайта и получите 10% скидку на услугу

Заказ услуги с сайта raybin.ru

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Заказать бесплатную SEO-консультацию

Запрос бесплатной SEO - консультации с сайта raybin.ru

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Письмо в компанию Райбин

Письмо в компанию RAYBIN

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.