Your Site Master

Главная | Actual Topics | Обратная связь | Guest Book | В избранное | Сделать домашней
Категории
 Новости разработчиков CMS
 Новости форумов
 Скрипты для сайтов
 Новости разработчиков сайтов
 Новости дизайнеров
 CMS Блоги
 Блоги о сайтостроении
Календарь

June, 2018
ПнВтСрЧтПтСбВс
123
45678910
11121314151617
18192021222324
252627282930
Опросы
Какую CMS Вы используете для Вашего сайта?

SLAED
Drupal
WordPress
DataLife Engine
1С-Битрикс
TYPO3
Ucoz
Joomla
Amiro CMS
HostCMS
CMS Made Simple
NetCat


Результаты
Другие опросы

Всего голосов: 245
Комментарии: 0
Ссылки

Архив Новостей
  June 2018 (7)
  May 2018 (15)
  April 2018 (17)
  March 2018 (12)
  February 2018 (16)
  January 2018 (15)
  December 2017 (15)
  November 2017 (13)
  October 2017 (14)
  September 2017 (20)
  August 2017 (15)
  July 2017 (1)
  June 2017 (1)
  April 2017 (3)
  February 2017 (13)
  January 2017 (15)
  December 2016 (23)
  November 2016 (19)
  October 2016 (19)
  September 2016 (19)
  August 2016 (19)
  July 2016 (17)
  June 2016 (23)
  May 2016 (11)
  April 2016 (18)
  March 2016 (20)
  February 2016 (19)
  January 2016 (16)
  December 2015 (22)
  November 2015 (19)
  October 2015 (21)
  September 2015 (14)
  August 2015 (16)
  July 2015 (22)
  June 2015 (22)
  May 2015 (9)
  April 2015 (6)
  March 2015 (6)
  February 2015 (9)
  January 2015 (8)
  December 2014 (8)
  November 2014 (7)
  October 2014 (7)
  September 2014 (8)
  August 2014 (8)
  July 2014 (8)
  June 2014 (7)
  May 2014 (7)
  April 2014 (11)
  March 2014 (8)
  February 2014 (9)
  January 2014 (7)
  December 2013 (17)
  November 2013 (20)
  October 2013 (25)
  September 2013 (20)
  August 2013 (20)
  July 2013 (27)
  June 2013 (25)
  May 2013 (28)
  April 2013 (32)
  March 2013 (24)
  February 2013 (25)
  January 2013 (28)
  December 2012 (33)
  November 2012 (36)
  October 2012 (29)
  September 2012 (36)
  August 2012 (38)
  July 2012 (31)
  June 2012 (35)
  May 2012 (30)
  April 2012 (41)
  March 2012 (57)
  February 2012 (38)
  January 2012 (43)
  December 2011 (63)
  November 2011 (41)
  October 2011 (39)
  September 2011 (63)
  August 2011 (62)
  July 2011 (52)
  June 2011 (48)
  May 2011 (66)
  April 2011 (54)
  March 2011 (51)
  February 2011 (63)
  January 2011 (45)
  December 2010 (73)
  November 2010 (62)
  October 2010 (59)
  September 2010 (69)
  August 2010 (63)
  July 2010 (48)
  June 2010 (50)
  May 2010 (58)
  April 2010 (84)
  March 2010 (95)
  February 2010 (83)
  January 2010 (55)
  December 2009 (99)
  November 2009 (104)
  October 2009 (98)
  September 2009 (100)
  August 2009 (73)
  July 2009 (97)
  June 2009 (106)
  May 2009 (79)
  April 2009 (36)
  March 2009 (30)
  February 2009 (15)
  January 2009 (20)
  December 2008 (21)
  November 2008 (23)
  October 2008 (15)
  September 2008 (11)
  August 2008 (6)
  July 2008 (12)
  June 2008 (9)
  May 2008 (6)
  April 2008 (18)
  March 2008 (28)
  February 2008 (4)
  December 2007 (4)
  November 2007 (1)
  September 2007 (2)
  August 2007 (2)
  July 2007 (6)
  June 2007 (3)
  May 2007 (7)
  April 2007 (2)
  March 2007 (1)
  February 2007 (2)
  December 2006 (1)
  November 2006 (2)
  October 2006 (3)
  September 2006 (2)
  July 2006 (2)
  June 2006 (3)
  May 2006 (1)
  April 2006 (1)
  March 2006 (1)
  February 2006 (2)
  January 2006 (2)

48 советов для программистов от Lullabot [перевод]

Новости разработчиков программного обеспечения (CMS) для построения сайтов

48 Essential Drupal Development Tips From Lullabot

Оригинал статьи
http://www.missingfeatures.com/2010/02/16/48-essential-drupal-developmen...

От переводчика:
Автор статьи принимал участие в 4-х дневном курсе обучения Drupal от Lullabot по таким направлениям как: темизация, API форм, API меню, разработка модулей, jQuery и лучшие практики.

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

UPD: для хабралюдей: http://habrahabr.ru/blogs/drupal/86073/

1. Выводите переменную $body_classes в атрибут "class" тега "body" в вашем файле page.tpl.php для того, что бы иметь возможность использовать различные классы страничек, например “front” - главная, “not_front” - не главная, “logged-in” - для залогиненных и пр.

2. Страничка "/admin/build/block" это единственная админская страница, на которой не используется администраторская тема оформления. Это сделано для того, что бы вы имели представление о местонахождении своих блоков на сайте.

3. Чаще всего в шаблон page.tpl.php забывают вставлять переменные $closure и $tabs.

4. Наиболее распространенным методом темизации является копирование файлов шаблонов из модулей или тем оформления и редактирования их под свои потребности.

5. Для решения проблем с различным порядком слов в различных языках используйте плейхолдеры. Например:$variables['submitted'] = t('On @date', array('@date'=>format_date($variables['created'],'custom','F jS')));

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

7. Если вы не хотите использовать переменную $content в шаблоне node.tpl.php, то не используйте. Вы можете выводить различные поля отдельно друг от друга.

8. [Производительность] Во вьюс предпочитайте использовать стиль ряда "Fields" (поля), а не "Nodes" (ноды). В режиме "Nodes" происходит вызов node_load() на каждой ноде в вашем виде, что может стоить вам более 50 запросов на каждую ноду. В режиме "Fields" происходит просто сбор необходимой информации в одном запросе.

9. Обратите внимание на функцию dsm() - это что то типа функции pr() в CakePHP (http://cakephp.org/). Эта функция может выводить на страницу сложные структуры данных в удобном для восприятия виде. Требуется модуль  devel (http://drupal.org/project/devel).

10. Группируйте кастомные модули в одной и той же "группе" (“package”) и тогда Вам не придётся рыскать по странице со списком модулей в поисках того или иного модуля.

11. Для отслеживания изменений в API между D6 и D7 используйте модуль  coder (http://drupal.org/project/coder)

12. [Лучшая практика] Переменная $user относится к пользователю, который залогинен на сайте в момент исполнения кода, переменная $account относится к любому пользователю вне зависимости от того, залогинен он на сайте или нет.

13. [Производительность] На каждой странице происходит загрузка всей таблицы переменных (variable), поэтому имеет смысл следить за этой таблицей и удалять ненужные значения.

14. [Производительность] Функция variable_get() не вызывает запросов к базе данных т.к. все переменные хранятся в памяти в момент исполнения кода.

15. Не вызывайте функцию t() для названий и описаний пунктов меню. Они сохраняются в кеше в момент билда меню. Это значит, что язык, установленный в момент создания кеша меню будет использоваться для всех пользователей.

16. Используйте MENU_LOCAL_TASK для пунктов меню, которые Вы хотите сделать табами. Например, таким образом можно добавить табы для таких страниц как "node/*" или "user/*"

17.
[Производительность] Используйте для Ваших коллбэк функций из меню отдельные файлы *.inc с помощью задания аттрибута "file" в массиве, определяющем элемент меню. Это приведет к более эффективному распределению памяти т.к. файл модуля *.module загружается на каждой странице, а заданные файлы *.inc загружаются только при вызове данного пункта меню.

18. При использовании %user или %node в определении пункта меню Drupal автоматически запускает функции node_load() или user_load() передавая этим функциям в качестве аргумента то, что стоит на их месте в url (обычно это ID) и возвращают объект - ноду или объект - пользователя

19. Вы можете определить свой собственный хендлер % в определении меню. Например, %example будет вызывать Вашу функцию example_load(). Эта функция должна находиться в главном файле модуля *.module а не в файлах *.inc

20. В своем модуле Вы можете использовать $GLOBALS['conf']['cache'] = false . В этом случае будет отключено кеширование данной страници. Обратите внимание на то, что если эта страница была закеширована ранее, то потребуется скинуть кеш.

21. Вы без труда определите, что данный сайт работает на Drupal если посмотрите в заголовках "page expire date" дату устаревания страницы. У Drupal это 11/19/1978 - дата рождения создателя Drupal. (http://drupal.org/user/1)

22. Использовать "маршрутизацию" (перенаправление) в Drupal можно с помощью функций custom_url_rewrite_inbound() и custom_url_rewrite_outbound()

23. К вопросу выбора правильного типа поля "дата" в CCK:
- Дата (ISO) - хорошо подходит для не точных дат (например, только год)
- "Datestamp" ( штамп даты, кол. секунд с момента начала эры Unix) - тот же формат используется в ядре Drupal
- Лучше всего использовать "Datetime", этот формат имеет ту же точность что и "Datestamp". Кроме того, "Datetime" сохраняет данные в родном формате базы данных, что позволяет проводить различные манипуляции прямо на уровне базы данных (что очень быстро).

24. [Лучшая практика] Разбивайте Вашу папку "sites/all/modules" на две дополнительные папки "contrib" и "custom", для скачанных и своих модулей соответственно.

25. [Лучшая практика] Если Вам необходимо модифицировать код чужих модулей, то отслеживайте все изменения и сохраняйте их в специальных файлах патчей. Создайте отдельную директорию для сохранения всех файлов патчей. Каждый раз, когда Вы обновляете модуль, удостоверьтесь, что Ваш патч все ещё необходим. Примените совой патч к новой версии модуля (если это требуется), либо удалите патч из Вашей папки (если патч уже включен в модуль).

26. [Лучшая практика] Хук hook_menu() должен быть первой функцией в Вашем модуле, потому что он играет роль "индекса" для модуля, который описывает что делает Ваш модуль и когда он это делает. (Имеется ввиду не программная сторона, а девелоперская. Любой разработчик глядя на Ваш hook_menu() может легко начать ориентироваться в Вашем модуле).

27. Причина по которой аттрибуты форм начинаются со знака "#" в массиве $form заключается в возможности создавать вложенности форм в массиве.

28. Атрибут "clicked_button" используется для управления сабмитом кнопок, которые являются картинками. Т.к. интернет эксплорер не использует при сабмите имена кнопок, как это делают другие браузеры.

29-30. Вы обычно устанавливаете ошибку в поле во вложенной форме используя формат parent][child (Например "home][street")? А Вы знаете, что form_error() позволяет устанавливать ошибку в поле с использованием более логичного форматирования чем form_set_error()
form_set_error('home][street','You must enter the street address.');
form_error($form['home']['city'], ‘You must enter the street address.’);

31. Если в переменной $form_storage находится хотя бы что то, в этом случае Drupal будет игнорировать любые редиректы и будет просто делать ребилд формы при сабмите. Что бы избежать этого, в некоторых случаях придется делать unset $form_storage.

32. [Лучшая практика] Вы можете использовать любой HTML код в Ваших функциях темизации потому, что система темизации построена таким образом, что она может переопределять HTML в своих собственных функциях.

33. Drupal будет автоматически рендерить любые неотрендеренные части массива $form. Поэтому Вам совсем не обязательно рендерить вручную каждую часть. Только если вы хотите управлять этой частью индивидуально и отдельно от остальных.

34. Для быстрого переключения между базами данных используйте db_set_active(). Эта функция позволяет переключаться между соединениями с базами, которые Вы указали в своем файле settings.php.

35. Модуль  Table Wizard (http://drupal.org/project/tw) позволяет создать описание любой таблицы для views. Вы даже можете выбрать ключи таблицы, которые используются для джоинтов.

36. Если Вы установите для элемента формы атрибут "#value" (например, для скрытого поля), то Drupal при обработке сабмита всегда будет устанавливать значение этого поля в то, что Вы укажете в "#value" независимо от того, что будет получено от пользователя т.к. при сабмите происходит ребилд формы, а уже затем обработка.

37. Если тип элемента формы ("#type") это "value", то этот элемент формы не будет включен в HTML форму на пользовательской стороне. Пользователь вообще не увидит этих данных, но в обработчиках формы в Drupal эти данные будут доступны на ряду с другими данными формы.
Например: $form['element_name'] = array("#type" => "value", "#value" => "My Value");
My Value - будет доступен в $form_state['values']['element_name'], но не будет присутствовать на страничке с формой.

38. [HTML] Если в страницу включен JavaScript (инлайн, прямо в тексте страницы), то в этом месте будет происходить полная остановка загрузки всего, что идет после этого скрипта (HTML, JavaScript и др.) до тех пор, пока код не загрузится.

39. [JQuery] VisualjQuery.com это удобное, визуальное API к JQuery

40. [Firebug] можно запустить JavaScript прямо в консольном табе Firebug если использовать ">>>" который находится внизу консоли.

41. [HTML] Некоторые браузеры будут вырезать теги "A" если для них не определен атрубут "href".

42. [Производительность JQuery] Если указать тег вместе с классом, то поиск этого элемента будет происходить намного быстрее чем если указать просто класс.
Например:
Медленно: $('.content');
Быстро: $('div.content');

43. [Производительность JQuery] Использование $(this) внутри функций селекторов дает большую скорость чем использование селектора еще раз заново.

44. Самым удобным способом управления вьюсами является экспортирование необходимого вьюса и сохранение его в своем модуле. Это приводит к тому, что вы можете следить за изменением вида с помощью систем контроля версий. Еще ваш вид становится защищенным от случайных ошибок пользователей, Вы всегда можете сделать "revert" и возвратиться к исходному состоянию.

45. Управление патчами: Создайте пустой модуль и используйте хук hook_update() для того, что бы вносить в сайт большие изменения, например, в настройках и пр. Таким способом можно, например, после обновления модуля еще запустить update.php и накатить на новый модуль Ваш патч.

46. Безопасность данных: По большому счету, на уровне темизации все данные должны быть уже безопастны. Что бы обезопасить свой сайт от данных, введенных пользователем используйте check_plain (все теги вырезаются) или check_markup (текст проходит обработку фильтром ввода поумолчанию).

47. Вы можете создать drush_make скрипт для  Drush (http://drupal.org/project/drush), который будет создавать чистую установку Drupal со свежими версиями модулей, которые будут скачаны с Drupal.org прямо в момент установки.

48. Как можно больше используйте функции cache_get() и cache_set() т.к. они уменьшат количество запросов к базе данных.

Из комментариев

Советы по JQuery:

1. Если только возможно, то используйте ID для селекторов jquery.
$(‘#block-menu-1") это очень быстро, примерно в 100 раз быстрее чем $(‘div.block’)
а $(‘div.block’) всего лишь немного быстрее чем $(‘.block’)

2. Кешируйте данные.
Плохо:
$(‘#wombat’).hide();
$(‘#wombat’).remove();

Хорошо:
var wombat = $(‘#wombat’);
wombat.hide();
wombat.remove():

Отлично:
$(‘#wombat’)
.hide()
.remove();

3. Вы можете передать переменную в Firebug с использованием console.log()
var lemmeSee = $(‘#wombat’);
console.log(lemmeSee)

Другие полезные функции модуля Devel

dpm() – впечатывает объект в сообщение.

dargs($once = TRUE) – печатает аргументы текущей фукнции, $once = TRUE в этом случае печатает их только один раз.

dd() – записывает объект в файл /tmp/drupal_debug.txt – очень полезно, когда нужно сделать дебаг Ajax запросов. если запросы идут из Flash плеера, то у них другой ID сессии. Можно так же использовать watchdog(‘debug’, print_r($object, TRUE)) , в этом случае объект будет записан в базу данных.

dfb() – выводит информацию в firebug (нужно установить FirePHP в модуле Devel)

Как узнать какие переменные доступны в файлах шаблонов:

Это сделать очень легко вызвав dpm(get_defined_vars())
или var_dump(get_defined_vars())

Еще немного советов:

Вы можете без труда создать схему базы данных для Вашего модуля по следующему алгоритму:

1. Создайте необходимую таблицу (или таблицы) в Вашем любимом инструменте (например, в phpMyAdmin)
2. Экспортируйте таблицу с помощью модуля  Schema (http://drupal.org/project/schema). Вы можете просто скопировать полученный массив в Ваш модуль, в хук hook_schema

Вы можете экспортировать Ваш тип контента (CCK) с использованием модуля "CCK Content Copy" (который входит в пакет CCK) и вставить этот код к инсталяционный хук Вашего модуля.





  


Разместил: Drupal Россия | Дата: 02.03.2010 | Прочитано: 1241 | Раздел: Новости разработчиков программного обеспечения (CMS) для построения сайтов   

Рейтинг статьи

Средняя оценка: 0.00/0Средняя оценка: 0Всего голосов:0

Отлично
Хорошо Нормально Пойдёт Плохо


Смотрите также связанные темы

04.08.2008 Опубликована версия CMS Made Simple 1.4 "Jamaica"
Версия включает в себя исправления ошибок бета-версии, которая успешно прошла тестирование в течение нескольких недель на различных серверах различными пользователями. Включает страницу с системной информацией Полная поддержка smarty в административном интерфейсе Абсолютно новая система генерации шаблонов Оптимизация запросов к базе данных и использования памяти Значительные изменения в обработке таблиц стилей Корректировка и улучшения в менеджере модулей Полный перевод модуля установки (в том числе на русский язык) Изменен стандартный шаблон административного модуса на NCleanGrey Добавлен п...
23.05.2009 Украинские языковые файлы для SLAED CMS 4.3.* Pro
Перевод всех языковых файлов системы, а так же её стандартных модулей. В архиве содержится пакет Украинских языковых файлов и изображения флагов. Для установки разархивируйте и загрузите все файлы из скачанного архива на сервер где размещается Ваш сайт.
28.02.2007 Новая версия локального сервера XAMPP 1.6.0a
Вышла новая версия широко применяемого локального сервера предназначенного для установки, использования, написания и отладки скриптов на своём персональном компьютере. XAMPP - это очень простой в установке дистрибутив Apache для систем Linux, Solaris и Windows. Программа содержит в себе все известные программные пакеты, которые используются на сервере и удовлетворят спрос и потребности как опытных, так и начинающих разработчиков, программистов и дизайнеров. Подробная информация о содержании дистрибутива в подробном просмотре.
13.11.2009 Еще одна тема для WordPress от WebDesignLessons на русском языке – Phyto
Друзья, рад представить Вам перевод на русский язык еще одного бесплатного шаблона от WebDesignLessons – это тема Phyto, коричневая, на три колонки, с контрольной панелью, менеджментом баннеров, социальными кнопками, Твиттером. В шапке – выпадающеее меню страниц, в подвале – три блока для виджетов. Посмотрите скриншот: Сделал живое демо: В других шаблонах приходится уделять много времени настройке. В данном [...]
12.11.2009 Концентрированный опыт
В Учебном центре Джум.ру (http://joom.ru/edu) проходит обучение первая, после полугодового перерыва и изменения формата обучения, группа будущих веб-мастеров. Под руководством практика веб-бизнеса, генерального директора компании Русский Дом Джумла Артёма Лебсака слушатели постигают науку самостоятельного создания сайтов. В группе обучаются и дизайнер, решивший освоить простой и надёжный способ создания полнофункциональных сайтов. И двое программистов, решивших изменить вид деятельности на веб-разработку. И две представительницы сетевых компаний, которые видят возможности, предоставляемые Инте...
24.02.2010 Интересная тема для WordPress – GRUNGIE
Рад представить перевод еще одного wordpress шаблона от проекта SkinPress. Мне нравятся их темы – современные, интересные, у них можно много чему научиться. Мне очень понравился шаблон GRUNGIE, с удовольствием подготовил для Вас его русский релиз. Тема для классического блога, фон с уклоном в грандж, но очень деликатно – красивый спокойный бэкграунд. Тема имеет выравнивание по [...]
17.03.2010 Шаблон Wordpress – Ultima
Здравствуйте, уважаемые мужики и дамы, друзья, коллеги и все остальные, кто пришел сюда, ведомый странным колдовством поисковых систем или случайно был закинут судьбой! Рад сегодня представить Вам перевод шаблона под названием Ultima, который вышел из под руки человека по имени Jai, индуса, автора сайта blogohblog.com. Сам шаблон хоть и прост, но, по моему мнению, темы [...]
18.03.2010 Интересный шаблон wordpress – Press 88
Здравствуйте, рад представить перевод шаблона для WordPress под названием Press 88. Тема сделана проектом simplewpthemes.com, прежде на wpbot (да и в рунете вообще) темы этого проекта доселе не публиковались. Шаблон выполнен в псевдо-магазинном стиле. Страницы и рубрики вынесены в шапку, имеется интересный слайдер, горизонтальный глайдер, места для баннеров, древовидные комментарии с граватарами, правый сайдбар с виджетами [...]
27.02.2010 WordPress тема NdaDap
С удовольствием представляю перевод еще одного wordpress шаблона от jauhari.net. Трехколоночная тема с двумя сайдбарами, миниатюрами, пронумеровенными древовидными комментариями. Как и любой шаблон от jauhari, тема быстро загружается, имеет предустановленные баннеры и нестандартное расположение элементов. Скриншот и демо Хорошо выглядит нижняя часть темы, где метки, рубрики и архивы выводятся по всей ширине страницы (рубрики и архивы – [...]
01.03.2010 Тема для WordPress WP Glory на русском языке
Рад представить перевод неплохого WordPress шаблона под названием WP Glory от solosteam. Вообще этот проект выпускает платные премиум шаблоны, но у них в архивах я нашел пару нормальных бесплатных тем. Конечно, они не настолько шикарны и современны, как их последние платные вещи, но судя по внешнему виду и функциями, этот шаблон – хорошее [...]
Нет комментариев. Почему бы Вам не оставить свой?
Вы не можете отправить комментарий анонимно, пожалуйста зарегистрируйтесь.
Google Search
Google

Web yoursitemaster.com

Топ Новостей
1: Опубликован список золотых, серебряных и бронзовых дилеров системы управления сайтом HostCMS по итогам 2015 года
Hot NEWS!
Просмотров - 1221


2: «1С-Битрикс» провела технологическую конференцию FailOver Conference 2016
Просмотров - 540

3: 1С УТ + Drupal 7 Commerce (Ubercard)
Просмотров - 534

4: DataLife Engine (DLE) v.11.0 Final Release
Просмотров - 446

5: WordPress 4.4.1 Security and Maintenance Release
Просмотров - 445

6: Critical vulnerabilities in ImageMagick
Просмотров - 442

7: Drupal 8, Cache & Rock N\' Roll
Просмотров - 442

8: Drupal 8 CI/CD c Docker и CircleCI
Просмотров - 438

9: Впервые определены лучшие сайты на самой популярной коммерческой платформе «1C-Битрикс»
Просмотров - 438

10: Спринт по переводам Drupal8!
Просмотров - 437

Google 120X240
Ссылки

Главная | Actual Topics | Статьи | Обратная связь | Guest Book
Генерация: 0.216 сек. и 11 запросов к базе данных за 0.163 сек.
Powered by SLAED CMS © 2005-2007 SLAED. All rights reserved.