Семинар-практикум по Drupal

3,410 views

Published on

Ведущий - Даниил Мясников

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,410
On SlideShare
0
From Embeds
0
Number of Embeds
391
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Семинар-практикум по Drupal

  1. 1. Семинар-практикум по применению CMS Drupal <ul><li>Основные плюсы использования CMS Drupal </li><ul><li>Единая информационная модель.
  2. 2. Ёмкая система расширения функционала.
  3. 3. Большая популярность CMS.
  4. 4. Открытый исходный код.
  5. 5. Минимум усилий при разработке. </li></ul></ul>Ведущий: Мясников Даниил
  6. 6. Общие принципы выбора CMS <ul><li>Выбор между собственной и стрононней разработкой </li><ul><li>Сторонняя разработка развивается без вашего участия.
  7. 7. Нет необходимости отвлекаться на устранение проблем безопасности сторонней системы.
  8. 8. Проект на сторонней разработке может поддерживать любой разработчик, связанный с системой, на которой построен троект. </li></ul></ul>
  9. 9. Сторонняя разработка развивается без вас Развитие Проекты Неисправности Расширения
  10. 10. Проект на сторонней разработке могут поддеривать другие разработчики Разработка Поддержка Модификации
  11. 11. Принцип ”моё ↔ чужое” <ul><li>Основные плюсы использования чужих разработок: </li><ul><li>Минимум программирования при реализации задач, ранее реализованных другими разработчиками
  12. 12. Отсутствие необходимости развивать разработку и заботиться о её безопасности* </li></ul><li>Плюсы публикации своих разработок: </li><ul><li>Быстрое выявление слабых мест разработки
  13. 13. Бесплатная аналитика оптимальности кода </li></ul></ul>
  14. 14. Различия между разорванной и единой информационной моделью Page Page <ul><li>ID
  15. 15. Title
  16. 16. Author
  17. 17. Post date
  18. 18. Change date
  19. 19. Content </li></ul>Страницы <ul><li>ID
  20. 20. Title
  21. 21. Author
  22. 22. Post date
  23. 23. Change date
  24. 24. Content </li></ul>Страницы <ul><li>ID
  25. 25. Title
  26. 26. Author
  27. 27. Post date
  28. 28. Change date
  29. 29. Teaser
  30. 30. Content </li></ul>News Новости <ul><li>ID
  31. 31. Page_ID
  32. 32. Author
  33. 33. Post date
  34. 34. Change date
  35. 35. Content </li></ul>Comment Комментарии <ul><li>ID
  36. 36. Content_ID
  37. 37. Parent_ID
  38. 38. Type
  39. 39. Author
  40. 40. Post date
  41. 41. Change date
  42. 42. Content </li></ul>Comments Иерархические комментарии <ul><li>ID
  43. 43. Content_ID
  44. 44. Type
  45. 45. Author
  46. 46. Post date
  47. 47. Change date
  48. 48. Content </li></ul>Comment Комментарии
  49. 49. Различия между разорванной и единой информационной моделью Node <ul><li>ID
  50. 50. Title
  51. 51. Author
  52. 52. Post date
  53. 53. Change date </li></ul><ul><li>NID
  54. 54. Teaser
  55. 55. Content </li></ul>News Новости <ul><li>ID
  56. 56. Content_ID
  57. 57. Author
  58. 58. Post date
  59. 59. Change date
  60. 60. Content </li></ul>Comment Комментарии <ul><li>NID
  61. 61. Content </li></ul>Page Страницы <ul><li>ID
  62. 62. Content_ID
  63. 63. Parent_ID
  64. 64. Type
  65. 65. Author
  66. 66. Post date
  67. 67. Change date
  68. 68. Content </li></ul>Comments Иерархические комментарии
  69. 69. Плюсы разработки на CMS Drupal <ul><li>Весь функционал Drupal основан на PHP </li><ul><li>Формирование форм
  70. 70. Формирование таблиц
  71. 71. Схемы баз данных
  72. 72. Нативный PHP-шаблонизатор </li></ul><li>Возможность создания нескольких проектов на одном движке
  73. 73. Каскадность расширений, отсутствие строгости в их файловой структуре
  74. 74. Масса реализованых дополнений </li></ul>
  75. 75. Формирование форм в CMS Drupal //Объявление меню function my_module_menu() { $items = array(); $items['form'] = array( 'title' => t('Form'), 'page callback' => 'drupal_get_form', 'page arguments' => array('first_form'), 'type' => MENU_NORMAL_ITEM, ); return $items; } //Объявление формы function first_form($form_state) { $form['name'] = array( '#type' => 'textfield', '#title' => t('Name'), ); return $form; } //Валидация формы function first_form_validate($form, &$form_state) { if(!mb_strlen($form_state['values']['name'])) form_set_error('name', t('Enter a Name.')); } //Обработка формы function first_form_submit($form, &$form_state){ drupal_set_message(t('The form has been submitted.')); }
  76. 76. AHAH в формах CMS Drupal function myahah_menu() { $items['myahah'] = array( 'title' => 'AHAH!', 'page callback' => 'drupal_get_form', 'page arguments' => array('poof_form'), 'access callback' => TRUE,); $items['myahah/message_js'] = array( 'page callback' => 'myahah_message_js', 'type' => MENU_CALLBACK, 'access callback' => TRUE,); return $items; } function myahah_form(){ $form['target'] = array( '#type' => 'markup', '#value' => '<div id=&quot;target&quot;>'.t('click here').'</div>', ); $form['submit'] = array( '#type' => 'submit', '#value' => t('click me'), '#ahah' => array( 'event' => 'click', 'path' => 'myahah/message_js', 'wrapper' => 'target', 'effect' => 'fade',) ); return $form; } function myahah_message_js(){ return drupal_json(array('status' => TRUE, 'data' => t('TRUE!'))); }
  77. 77. Формирование таблиц в CMS Drupal Col1 Col2 Cell1 Cell2 Cell3 Cell4 Код Результат //Заголовки столбцов таблицы $header = array('Col1', 'Col2'); //Массив строк таблицы $rows = array( array('Cell1', 'Cell2'), array('Cell3', 'Cell4'), ); print theme('table', $header, $rows);
  78. 78. Сортируемые таблицы в CMS Drupal Таблица с сортировкой $rows = array(); //Заголовки столбцов таблицы $header = array( array('data' => 'ID', 'field' => 'nid'), array('data' => 'Тип', 'field' => 'type'), array('data' => 'Заголовок', 'field' => 'title'), ); $result = db_query((&quot;SELECT nid, type, title FROM {node} WHERE status = 1&quot; . tablesort_sql($header)); //Массив строк таблицы while ($row = db_fetch_array($result)) { $rows[] = $row; } print theme('table', $header, $rows);
  79. 79. Объявление таблицы БД средствами Schema API Схема таблицы 'node' $schema['node'] = array( //Объявление полей 'fields' => array( 'nid' => array( 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE ), 'vid' => array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0 ), 'type' => array( 'type' => 'varchar', 'length' => 32, 'not null' => TRUE, 'default' => '' ), 'title' => array( 'type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => '' ), ), //Объявление первичного ключа 'primary key' => array( 'nid' ), //Объявление уникальных ключей 'unique keys' => array( 'vid' => array( 'vid' ) ), //Объявление индексов 'indexes' => array( 'nid' => array( 'nid' ), 'node_title_type' => array( 'title', array( 'type', 4 ) ), ), );
  80. 80. Шаблонизатор PHPTemplate <ul><li>Является нативным, для PHP, шаблонизатором (это значит, что шаблоны являются стандартными файлами PHP) </li><ul><li>Нет необходимости изучать синтаксис шаблонизатора
  81. 81. Высокая скорость отображения
  82. 82. Нет необходимости прекомпиляции шаблонов </li></ul><li>Обладает гибкой структурой и иерархией шаблонов
  83. 83. Поддерживает наследственность </li></ul>
  84. 84. Синтаксис шаблона PHPTemplate Шаблон отображения содержимого ноды 'node.tpl.php' <div id=&quot;node-<?php print $node->nid; ?>&quot; class=&quot;node<?php if ($sticky) { print ' sticky'; } ?> <?php if (!$status) { print ' node-unpublished'; } ?>&quot;> <?php print $picture ?> <?php if ($page == 0): ?> <h2><a href=&quot;<?php print $node_url ?>&quot; title=&quot;<?php print $title ?>&quot;> <?php print $title ?></a></h2> <?php endif; ?> <?php if ($submitted): ?> <span class=&quot;submitted&quot;><?php print $submitted; ?></span> <?php endif; ?> <div class=&quot;content clear-block&quot;> <?php print $content ?> </div> <div class=&quot;clear-block&quot;> <div class=&quot;meta&quot;> <?php if ($taxonomy): ?> <div class=&quot;terms&quot;><?php print $terms ?></div> <?php endif;?> </div> <?php if ($links): ?> <div class=&quot;links&quot;><?php print $links; ?></div> <?php endif; ?> </div> </div>
  85. 85. Струкрура шаблона PHPTemplate <ul><li>page.tpl.php – общий шаблон страницы
  86. 86. page-welcome.tpl.php – шаблон для страницы http://sitename/welcome
  87. 87. node.tpl.php – шаблон для отображения содержимого ноды
  88. 88. node-page.tpl.php – шаблон для отображения ноды типа 'page'
  89. 89. block.tpl.php – шаблон отображения блока
  90. 90. template.php – скрипт модификаций
  91. 91. <themename>.info – файл параметров темы </li></ul>
  92. 92. Наследование шаблона PHPTemplate Вид .info-файла подтемы name = My Theme description = Theme based on Garland. Version = 1.0 core = 6.x #определяем родительскую тему base theme = garland engine = phptemplate stylesheets[all][] = style.css
  93. 93. Наследование шаблона PHPTemplate <ul><li>Все стили (css-файлы). Порядок вывода стилей в html будет таков: стили друпала -> стили базовой темы -> стили дочерней темы. Если drupal у вас есть два style.css файла в папке темы и подтемы, используется style.css подтемы.
  94. 94. Все javascript-файлы
  95. 95. Все файлы шаблонов (*.tpl.php)
  96. 96. Все внутренности template.php. Собственный template.php файл, будет работать параллельно с родительским.
  97. 97. Скриншот темы </li></ul>Шаблоном наследуются
  98. 98. Мультисайтинг – несколько сайтов на одном Drupal <ul><li>В папке /sites системы Drupal можно вести несколько проектов
  99. 99. Достаточно создать в паке /sites папку с доменным именем проекта, например, myproject.com
  100. 100. Если у вашего сайта предусмотренны поддомены, например photos.myproject.com, то они также будут обращаться к папке проекта myproject.com, если для них не определена своя папка проекта 'photos.myproject.com'
  101. 101. В случае, если папка проекта, соответствующая доменному имени, не найдена, Drupal обращается за настройками проекта в папку /sites/default </li></ul>
  102. 102. Мультисайтинг – несколько сайтов на одном Drupal <ul><li>sites/www.example.ru.mysite.test
  103. 103. sites/example.ru.mysite.test
  104. 104. sites/ru.mysite.test
  105. 105. sites/www.example.ru.mysite
  106. 106. sites/example.ru.mysite
  107. 107. sites/ru.mysite
  108. 108. sites/www.example.ru
  109. 109. sites/example.ru
  110. 110. sites/ru
  111. 111. sites/default </li></ul>При обращении по адресу www.example.ru/mysite/test/ Drupal будет искать папку с проектом в следующей последовательности
  112. 112. Расположение модулей в CMS Drupal <ul><li>/modules – модули ядра
  113. 113. /sites – проекты </li><ul><li>all/modules – модули, доступные во всех проектах
  114. 114. project/modules – модули доступные в проекте 'project' </li></ul></ul>Чем ближе модуль находится к проекту, тем выше его приоритет при подключении. Например, есть два проекта, project1 и project2, и есть модуль с названием форум, один экзэмпляр которого находится в папке /modules(это стандартный модуль форума заложенный в ядро), второй - в папке /sites/all/modules, а третий - в папке /sites/project2/modules. Для проекта project1, в случае подключения модуля форум, будет работать модуль, находящийся в папке /sites/all/modules т.к. его приоритет выше, чем у модуля в папке /modules. Для проекта project2 будет работать модуль, находящийся в папке /sites/project2/modules, т.к. его приоритет выше, чем у модуля в папке /sites/all/modules.
  115. 115. Отсутствие строгости в файловой структуре модуля Kohana eZ Publish Drupal /application --/classes – -/controller – -/model --/config – -/messages – -/views /modules – -/classes – -/config … Имена классов должны Соответствовать пути /extension --/my_ext – -/autoloads ---ezcreateclas/ slistgroups.php ---eztemplateau/ toload.php --/classes – -/design – -/standart – -/modules --/settings – -/translations – --ezinfo.php … /modules /sites --/all --/modules – -/my_site – -/modules /module_name --/translations – --module_name.info – --module_name.module
  116. 116. Популярные модули Drupal <ul><li>CCK – позволяет модифицировать структуру конкретного типа нод.
  117. 117. Views – организует списки.
  118. 118. Rules – позволяет создать реакцию на событие.
  119. 119. Node words – добавляет к ноду Мета-теги необходимые для поисковой оптимизации.
  120. 120. Page titles – делает заголовок страницы отличным от заголовка материала
  121. 121. Pathauto – автоматически формирует URL'ы </li></ul>
  122. 122. О чем нужно помнить <ul><li>В Drupal нет древовидной структуры </li><ul><li>Древовиднсть может достигатсья с помошью меню или таксономии </li></ul><li>Drupal расширяется хуками </li><ul><li>Предопределённый вид функций, вызывающихся при определённых событиях </li></ul><li>Когда стоит применять Drupal </li></ul>
  123. 123. Всем спасибо! <ul><li>Отдыхаем, готовимся к практике
  124. 124. Контакты </li><ul><li>E-mail: [email_address]
  125. 125. daniil-myasnikov.moikrug.ru
  126. 126. vkontakte.ru/dcrue </li></ul></ul>Рассказывал Мясников Даниил

×