-
Notifications
You must be signed in to change notification settings - Fork 0
/
obuceisea.sql
520 lines (439 loc) · 208 KB
/
obuceisea.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
-- phpMyAdmin SQL Dump
-- version 3.5.6
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1:3306
-- Время создания: Апр 01 2016 г., 13:27
-- Версия сервера: 5.1.67-community-log
-- Версия PHP: 5.4.11
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- База данных: `obuceisea`
--
-- --------------------------------------------------------
--
-- Структура таблицы `category`
--
CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`category_id` int(11) unsigned DEFAULT NULL,
`type_id` int(11) unsigned DEFAULT NULL,
`name` char(80) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `index_foreignkey_category_category` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=29 ;
--
-- Дамп данных таблицы `category`
--
INSERT INTO `category` (`id`, `category_id`, `type_id`, `name`) VALUES
(1, NULL, 2, 'Программирование'),
(2, 1, NULL, 'Серверное программирование'),
(4, 1, NULL, 'Клиентское программирование'),
(5, 1, NULL, 'Desktop'),
(6, NULL, 2, 'Дизайн'),
(7, NULL, 3, 'Медицина'),
(8, 6, NULL, 'Веб-дизайн'),
(9, 6, NULL, 'Векторная графика'),
(10, 7, NULL, 'Фармацефтика'),
(15, NULL, 3, 'Программирование'),
(16, 15, NULL, 'Desktop'),
(17, NULL, 7, 'Программирование'),
(18, NULL, 8, 'Вязание'),
(19, NULL, 8, 'Электроника'),
(20, NULL, 7, 'Радиотехника'),
(21, 17, NULL, 'Desktop'),
(22, 18, NULL, 'Вязание спицами'),
(23, 18, NULL, 'Вязание крючком'),
(24, 19, NULL, 'Автоэлектроника'),
(25, 20, NULL, 'Радиосвязь'),
(26, 20, NULL, 'Телевидение'),
(27, NULL, 9, 'Программирование'),
(28, 27, NULL, 'Desktop');
-- --------------------------------------------------------
--
-- Структура таблицы `dossier`
--
CREATE TABLE IF NOT EXISTS `dossier` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(40) NOT NULL,
`andername` char(40) NOT NULL,
`surname` char(40) NOT NULL,
`email` char(80) NOT NULL,
`land` char(40) DEFAULT NULL,
`sity` char(40) DEFAULT NULL,
`phone` int(20) DEFAULT NULL,
`image` char(80) DEFAULT NULL,
`about` varchar(2000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Данные пользователя' AUTO_INCREMENT=3 ;
--
-- Дамп данных таблицы `dossier`
--
INSERT INTO `dossier` (`id`, `name`, `andername`, `surname`, `email`, `land`, `sity`, `phone`, `image`, `about`) VALUES
(1, 'Василий', 'Васильевич', 'Василевский', 'vasea@mail.ru', 'Беларусь', 'Минск', 2222222, 'смсмс', 'Привет мир!'),
(2, 'Алла', 'Сергеевна', 'Сусик', 'alla@gmail.com', 'Беларусь', 'Минск', 155156, 'photoTest.png', 'В 2006 поступила и в 2010 году с отличием окончила юридический факультет Казахского Национального Университета имени аль-Фараби по специальности «Юриспруденция».\n\nВ 2010-2012 гг. обучалась и с отличием окончила магистратуру юридического факультета КазНУ имени аль-Фараби с академической степенью магистра юридических наук по специальности «Юриспруденция» и в 2012 году защитила магистерскую диссертацию на тему: «Концептуальные направления деятельности органов прокуратуры».\n\nС 2011 по 2012 гг. работала младшим научным сотрудником кафедры уголовного права, уголовного процесса и криминалистики юридического факультета КазНУ имени аль-Фараби.\n\nС сентября 2012 года по настоящее время являюсь преподавателем кафедры уголовного права, уголовного процесса и криминалистики КазНУ имени аль-Фараби.\n\nАктивно принимает участие в учебно-методической и научно-исследовательской работе университета, участвует в различных международных и республиканских конференциях. Круг научных интересов: криминалистика, судебная экспертология, прокурорский надзор, правоохранительные органы.\n\nПриказом ректора от 12 мая 2014 года № 182 награждена медалью «80 лет Казахскому национальному университету имени аль-Фараби» за вклад в развитие университета.\n\nЯвляюсь одним из авторов восьми учебных и электронных учебных пособий, одной монографий, опубликовано 6 имиджевых, более 35-ти научных и учебно-методических статей.');
-- --------------------------------------------------------
--
-- Структура таблицы `education`
--
CREATE TABLE IF NOT EXISTS `education` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`information_id` int(11) DEFAULT NULL,
`number` int(11) DEFAULT NULL,
`name` char(120) DEFAULT NULL,
`parent` int(11) DEFAULT NULL,
`description` varchar(300) NOT NULL,
`block` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
--
-- Дамп данных таблицы `education`
--
INSERT INTO `education` (`id`, `information_id`, `number`, `name`, `parent`, `description`, `block`) VALUES
(2, 1, 1, 'Вёрстка веб страниц', NULL, '<p>Курсы по верстке предназначены для тех, кто владеет первичными навыками работы с компьютером</p>\r\n', 1),
(3, 1, 2, 'JavaScript для начинающих', NULL, '<p>Javascript - скриптовый язык, предназначенный для создания интерактивных веб-страниц.</p>\r\n', 1),
(5, 2, 1, 'Объектная модель браузера', NULL, '<p><strong>Объектная</strong> <strong>модель</strong> документа (DOM) — <strong>объект</strong> document,через который осуществляется доступ к содержимому страницы.</p>\r\n', 1),
(6, 2, 1, 'События и их обработка', NULL, '<p>Переменная «e» в javascript встречается часто, но не все разработчики сайтов понимают что под ней скрывается. Давайте разберемся с её назначением, ведь это целый объект, содержащий массу полезной информации и дающий большие возможности для работы с событиями.</p>\r\n', 1),
(7, 1, 3, 'Основы SQL', NULL, '<p>SQL - стандартный язык манипулирования данными в базе данных</p>\r\n', 1),
(8, 33, 1, 'Основы С#', NULL, '<p>На сегодняшний момент язык программирования C# одни из самых мощных, быстро развивающихся и востребованных языков в ИТ-отрасли. В настоящий момент на нем пишутся самые различные приложения: от небольших десктопных программок до крупных веб-порталов и веб-сервисов, обслуживающих ежедневно миллионы', 1),
(9, 1, 4, 'Основы PHP', NULL, '<p>Серверный язык программирования</p>\r\n', 1),
(10, 33, 2, 'Введение в ASP.NET MVC 5', NULL, 'ASP.NET MVC Framework — фреймворк для создания веб-приложений, который реализует шаблон Model-view-controller. Данный фреймворк добавлен Microsoft в ASP.NET', 1),
(14, 33, 3, 'Windows Forms', NULL, 'Windows Forms представляет простейшую технологию для создания графических настольных программ на платформе .NET. И в этом разделе выкладываются все материалы, посвященные созданию оконных приложений с использованием технологии Windows Forms, в том числе по работе различными элементами управления, дв', 1),
(15, 1, 5, 'Основы CMS Joomla', NULL, 'Популярная CMS для создания сайтов', 1);
-- --------------------------------------------------------
--
-- Структура таблицы `information`
--
CREATE TABLE IF NOT EXISTS `information` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(191) COLLATE utf8_unicode_ci DEFAULT NULL,
`category_id` int(11) unsigned NOT NULL,
`description` text COLLATE utf8_unicode_ci NOT NULL,
`shortdescription` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
`activ` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=36 ;
--
-- Дамп данных таблицы `information`
--
INSERT INTO `information` (`id`, `name`, `category_id`, `description`, `shortdescription`, `activ`) VALUES
(1, 'Основы web-программирования', 8, '<p>Для нас важно, чтобы Вы получили результат и были довольны качеством нашего обучения. Ваши дальнейшие успехи в профессии – это лучшая оценка нашей работы.</p>\r\n\r\n<p>Чему Вы научитесь</p>\r\n\r\n<ul>\r\n <li>∙ WEB-верстка (HTML, CSS)</li>\r\n <li>∙ WEB-дизайн и анимация (JavaScript)</li>\r\n <li>∙ WEB-программирование (PHP, My SQL, CMS)</li>\r\n <li>∙ Тестирование программного обеспечения и web-приложений</li>\r\n <li>∙ Создание сайта и интернет-магазина на Joomla</li>\r\n</ul>\r\n', 'Курс "Основы web-программирования", позволит вам научиться создавать собственные HTML-страницы, осуществлять навигацию между ними, добавлять анимацию и обрабатывать запросы на сервере ,что позволит создавать полноценные сайты', 1),
(2, 'Продвинутый JavaScript', 4, '<p>По окончании курса Вы будете уметь:</p>\r\n\r\n<ul>\r\n <li>Понимать возможности JavaScript в среде веб-браузеров</li>\r\n <li>Управлять браузерами и элементами HTML-страниц с помощью JavaScript</li>\r\n</ul>\r\n\r\n<p>Специалисты, обладающие этими знаниями и навыками, в настоящее время крайне востребованы. Большинство выпускников наших курсов делают успешную карьеру и пользуются уважением работодателей.</p>\r\n', 'Данный учебный материал предназначен для разработчиков, знакомых с языком JavaScript и технологией Ajax и стремящихся создавать краткий и понятный программный код.', 1),
(3, 'Инженер', 2, 'Sed aliquam eu mauris ac egestas. Quisque nisi velit, pretium quis venenatis lobortis, eleifend vitae urna. Praesent vehicula, nunc a hendrerit rhoncus, tellus sapien dignissim arcu, dignissim consectetur ante lorem quis quam. Morbi nec arcu iaculis, lacinia nisi ac, congue sapien. Ut sit amet fermentum nisl. Suspendisse a enim varius nulla faucibus ultrices vitae vel quam. Pellentesque gravida erat at congue fringilla.', ' Imperat tibi Deus Pater + ; imperat tibi Deus Filius + ; imperat tibi Deus Spiritus Sanctus + . Imperat tibi majestas Christi, aeternum Dei Verbum, caro factum + , qui pro salute generis nostri tua invidia perditi, humiliavit semetipsum facfus hobediens usque ad mortem;', 1),
(4, 'Дизайн', 6, 'Integer condimentum euismod magna, a euismod nunc suscipit a. Duis tincidunt eleifend massa scelerisque sagittis. Quisque congue eget erat eget mattis. Cras varius pharetra ex at sollicitudin. In porttitor hendrerit metus, vitae varius metus blandit quis. Etiam pretium, erat eu pretium aliquam, risus dolor convallis libero, sed rutrum enim risus euismod velit. Praesent eu leo in diam tempus porta. Cras pellentesque sapien eu venenatis maximus. Cras euismod fermentum urna at ultrices. Aenean blandit, quam a lacinia vehicula, massa nulla semper orci, vitae tempus lorem ipsum in ligula. Aliquam commodo neque vel felis lobortis malesuada. Sed auctor lectus leo, id vehicula tellus blandit ac. Sed cursus est neque, quis rutrum lectus pharetra quis.', 'Ecclesiam suam aedificavit supra firmam petram, et portas inferi adversus eam nunquam esse praevalituras edixit, cum ea ipse permansurus omnibus diebus usque ad consummationem saeculi. Imperat tibi sacramentum Crucis + , omniumque christianae fidei Mysteriorum virtus +.', 1),
(5, 'Безопастность', 9, 'Mauris pretium dapibus imperdiet. Ut a quam lobortis, vehicula dui eu, condimentum felis. Vivamus at quam ut ligula semper malesuada eu nec libero. Praesent pulvinar, libero non interdum tincidunt, augue libero lobortis enim, vel rutrum nisl nisi eget purus. Donec id est in arcu ornare rutrum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam lacinia sed nulla rutrum ullamcorper. Sed eleifend quam ex, et dictum tellus placerat et. Nulla dignissim a magna quis ultrices. Cras dictum pellentesque massa eu maximus. Duis pretium tortor eget nunc finibus tempus.', 'Imperat tibi excelsa Dei Genitrix Virgo Maria + , quae superbissimum caput tuum a primo instanti immaculatae suae conceptionis in sua humilitate contrivit. Imperat tibi fides sanctorum Apostolorum Petri et Pauli, et ceterorum Apostolorum + . Imperat tibi Martyrum sanguis, ac pia Sanctorum et Sanctarum omnium intercessio +.', 1),
(6, 'Серверное программирование', 2, 'Aliquam erat volutpat. Phasellus id orci a risus tristique aliquam. Etiam sagittis tempor luctus. Nam mi nunc, imperdiet ac consequat vel, ultrices eu mi. In vitae est a justo pharetra venenatis. In justo mauris, rhoncus eu enim euismod, pretium eleifend turpis. Nullam luctus augue ac congue ultrices. Nullam et condimentum mauris. Vivamus eu leo sed ligula vulputate maximus. In sit amet tristique magna. Phasellus finibus ullamcorper nisl vel dapibus. Maecenas sagittis massa in euismod varius. Vestibulum elementum turpis quis arcu commodo, sit amet bibendum nulla egestas. Integer feugiat libero quis urna porta mattis.', 'Ergo, draco maledicte et omnis legio diabolica, adjuramus te per Deum + vivum, per Deum + verum, per Deum + sanctum, per Deum qui sic dilexit mundum, ut Filium suum unigenitum daret, ut omnes qui credit in eum non pereat, sed habeat vitam aeternam: cessa decipere humanas creaturas, eisque aeternae perditionis venenum propinare: desine Ecclesiae nocere, et ejus libertati laqueos injicere.', 1),
(7, 'Как писать на PHP и не сойти с ума', 2, 'Morbi vehicula lobortis odio. Vivamus porta risus id porttitor vestibulum. Aliquam id lectus nulla. Donec semper mi enim, porttitor pellentesque dui porttitor ut. Aenean ut enim fringilla, ullamcorper lectus id, convallis mauris. Proin sit amet egestas justo. Mauris dapibus tellus at pulvinar porta. Phasellus a lacus at augue auctor iaculis. Morbi congue fermentum dolor, et accumsan magna rhoncus vel. Sed vitae elit lorem. Proin gravida arcu eu odio pulvinar, nec vehicula mauris condimentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam molestie, elit eget imperdiet sagittis, risus nunc malesuada mi, nec porta orci lectus id dui. Vestibulum vitae rutrum magna.', 'Vade, satana, inventor et magister omnis fallaciae, hostis humanae salutis. Da locum Christo, in quo nihil invenisti de operibus tuis; da locum Ecclesiae uni, sanctae, catholicae, et apostolicae, quam Christus ipse acquisivit sanguine suo. Humiliare sub potenti manu Dei; contremisce et effuge, invocato a nobis sancto et terribili nomine Jesu, quem inferi tremunt, cui Virtutes caelorum et Potestates et Dominationes subjectae sunt', 1),
(8, 'Задачи 1С', 5, 'Pellentesque vehicula lectus at leo mollis eleifend. Nunc efficitur ornare tellus, a auctor urna lobortis in. In feugiat, justo et fermentum efficitur, arcu nibh venenatis metus, at mollis justo lectus ac tellus. Vestibulum auctor in arcu ultricies condimentum. Aliquam erat volutpat. Aliquam erat volutpat. Maecenas condimentum varius purus a feugiat. Praesent tristique sem non molestie maximus. Nunc quis metus ex. Proin tristique ex sit amet magna feugiat, eget tempus nisi eleifend. Fusce at sollicitudin erat. Duis euismod in velit et cursus. Donec tempor rhoncus ipsum, vel efficitur urna placerat eu. Ut turpis elit, ultricies aliquam tellus eu, fermentum imperdiet magna. Nulla molestie tellus et nunc dictum tempor. Donec tempor elementum arcu sit amet fringilla.', ' quem Cherubim et Seraphim indefessis vocibus laudant, dicentes: Sanctus, Sanctus, Sanctus Dominus Deus Sabaoth.\nV. Domine, exaudi orationem meam.\nR. Et clamor meus ad te veniat.\n[si fuerit saltem diaconus subjungat V. Dominus vobiscum.\nR. Et cum spiritu tuo.]', 1),
(9, 'Ангулар', 4, 'Etiam convallis velit et metus sodales dictum. Quisque tristique efficitur eleifend. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque suscipit non augue vel pulvinar. Phasellus hendrerit sapien et gravida pretium. Nunc sit amet lectus semper, vulputate magna ut, ultricies velit. Curabitur non sagittis quam. Donec placerat quam non odio feugiat tincidunt. Suspendisse fringilla posuere risus, ut gravida enim efficitur aliquet. Nam laoreet, turpis varius rhoncus mollis, tortor lectus vulputate leo, eget ultrices metus sem a lorem. Duis mi ante, maximus at maximus sed, tristique nec nulla. Praesent blandit ex a accumsan efficitur.', 'Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. Lorem Ipsum не только успешно пережил без заметных изменений пять веков, но и перешагнул в электронный дизайн. Его популяризации в новое время послужили публикация листов Letraset с образцами Lorem Ipsum в 6', 1),
(10, 'Sed ultricies tortor', 8, 'In dolor risus, posuere at ipsum et, bibendum consequat neque. Aenean dolor lectus, placerat a sapien blandit, sollicitudin lobortis ex. Duis tempus justo augue, eget mattis sapien vestibulum in. Curabitur a ante sit amet dolor aliquet egestas. Fusce volutpat vel leo at convallis. Aliquam erat volutpat. Donec ut malesuada nibh. Donec sit amet egestas urna. Maecenas eget ultricies mauris. Praesent blandit tincidunt urna, a scelerisque ex aliquam et. Praesent at sapien sit amet arcu condimentum rutrum. Phasellus quis diam ut nunc condimentum lacinia et quis libero. Nam eleifend libero lacus.', 'Многие думают, что Lorem Ipsum - взятый с потолка псевдо-латинский набор слов, но это не совсем так. Его корни уходят в один фрагмент классической латыни 45 года н.э., то есть более двух тысячелетий назад. Ричард МакКлинток, профессор латыни из колледжа Hampden-Sydney, штат Вирджиния, взял одно из самых странных слов в Lorem Ipsum, "consectetur"', 1),
(11, 'blandit suscipit sed vitae eros.', 2, 'Sed sed sapien eget ante venenatis viverra vel at lectus. Ut sollicitudin orci vel congue interdum. Curabitur eu vestibulum ante. Phasellus porttitor interdum finibus. Aenean id lacus vel ipsum finibus efficitur. Maecenas efficitur volutpat volutpat. Aenean varius placerat nunc at volutpat. Praesent mollis mauris sed dictum porta. Pellentesque aliquam ligula felis, in pretium purus elementum non. Integer metus odio, ornare vitae ultricies in, luctus in odio. Nam porttitor sagittis nisi, id scelerisque ex fringilla at. Ut at dolor semper, aliquet mauris quis, malesuada nibh. Praesent et accumsan turpis. In hac habitasse platea dictumst.', 'Lorem Ipsum в разделах 1.10.32 и 1.10.33 книги "de Finibus Bonorum et Malorum" ("О пределах добра и зла"), написанной Цицероном в 45 году н.э. Этот трактат по теории этики был очень популярен в эпоху Возрождения. Первая строка Lorem Ipsum, "Lorem ipsum dolor sit amet..", происходит от одной из строк в разделе 1.10.32', 1),
(12, 'Mauris semper', 10, 'Ut malesuada sit amet libero ut pulvinar. Ut id lacinia nisi. Etiam tristique suscipit augue sed ultrices. Donec ac sagittis dui. Aliquam ornare nisi eu felis scelerisque condimentum. Quisque in diam metus. Cras tincidunt, purus ac vulputate efficitur, ligula ipsum consequat nibh, a hendrerit risus diam sed nisl. Sed sodales finibus lacus, ac bibendum nisl dapibus eget. Donec hendrerit dui non lacus varius, nec rhoncus sem rutrum. Morbi ac purus nec lorem porta egestas ut ut sem.', 'Есть много вариантов Lorem Ipsum, но большинство из них имеет не всегда приемлемые модификации, например, юмористические вставки или слова, которые даже отдалённо не напоминают латынь. Если вам нужен Lorem Ipsum для серьёзного проекта, вы наверняка не хотите какой-нибудь шутки, скрытой в середине абзаца.', 1),
(13, 'Donec nec nibh nec', 10, 'Praesent accumsan consequat bibendum. Vivamus lectus dolor, sodales a placerat ut, congue quis ex. Ut et arcu velit. Suspendisse potenti. Aliquam erat volutpat. In hac habitasse platea dictumst. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis efficitur massa cursus arcu porttitor faucibus non ac purus. Morbi vitae tortor orci. Duis suscipit eros finibus, congue velit vitae, pretium ex. Aenean sit amet egestas nisl. Proin porttitor lectus orci, eget imperdiet est tristique non. Quisque eget risus a mi auctor fermentum. Nam congue sit amet mi quis facilisis.', 'Если вам нужен Lorem Ipsum для серьёзного проекта, вы наверняка не хотите какой-нибудь шутки, скрытой в середине абзаца. Также все другие известные генераторы Lorem Ipsum используют один и тот же текст, который они просто повторяют, пока не достигнут нужный объём.', 1),
(14, 'RedBean как средство для суицида', 2, 'Maecenas interdum ex sit amet lacinia finibus. Mauris quam enim, pulvinar eget eros nec, convallis euismod neque. Mauris felis elit, ullamcorper eget ipsum id, facilisis malesuada leo. Sed congue sapien nec quam tempus pulvinar. Pellentesque consequat lectus turpis, at bibendum nunc gravida et. Maecenas tellus risus, consectetur vel scelerisque vel, efficitur id quam. Suspendisse auctor risus augue, iaculis hendrerit orci porta placerat. Cras sagittis orci a volutpat condimentum. Vestibulum mollis ex massa. Aliquam in tristique tellus.', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus posuere dapibus congue. Nam maximus pulvinar ex ut malesuada. Maecenas elementum purus vitae efficitur mattis. Duis facilisis commodo libero commodo ultrices. Fusce aliquet tincidunt faucibus. Praesent tristique sem nec maximus mattis. ', 1),
(15, '1C для начинающих', 16, 'Donec sed eleifend ante. Suspendisse id nibh leo. Maecenas eu ligula augue. Integer sodales justo non diam posuere, ut sollicitudin lacus feugiat. In eget dui enim. Nullam vel mi nec tellus rhoncus finibus. Aenean sed dictum felis, nec posuere leo. Quisque in congue turpis, ullamcorper porta ante. Morbi accumsan fringilla eros a semper.', 'Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris eget interdum urna. Cras vulputate libero tortor. Sed et leo purus. Donec porttitor urna sed ante eleifend cursus. Sed molestie pellentesque neque, eget venenatis nulla mattis et. Duis commodo libero at diam porta, quis vulputate purus gravida.', 1),
(16, 'С,С++', 17, 'Идейные соображения высшего порядка, а также начало повседневной работы по формированию позиции играет важную роль в формировании позиций, занимаемых участниками в отношении поставленных задач. Таким образом сложившаяся структура организации позволяет оценить значение существенных финансовых и административных условий. Задача организации, в особенности же сложившаяся структура организации позволяет выполнять важные задания по разработке существенных финансовых и административных условий. Значимость этих проблем настолько очевидна, что укрепление и развитие структуры влечет за собой процесс внедрения и модернизации соответствующий условий активизации. С другой стороны сложившаяся структура организации играет важную роль в формировании существенных финансовых и административных условий.', 'Aliquam porttitor purus nec est feugiat, eu hendrerit nibh rhoncus. Nulla facilisi. Pellentesque ac mauris in orci finibus lobortis. Fusce auctor vulputate leo, mattis venenatis ipsum laoreet at. Donec gravida leo et quam efficitur pretium. Praesent in ex ac nibh pulvinar cursus a sed massa. ', 1),
(17, 'Ассемблер', 17, 'Равным образом постоянное информационно-пропагандистское обеспечение нашей деятельности играет важную роль в формировании позиций, занимаемых участниками в отношении поставленных задач. Значимость этих проблем настолько очевидна, что консультация с широким активом в значительной степени обуславливает создание соответствующий условий активизации. Задача организации, в особенности же консультация с широким активом играет важную роль в формировании форм развития.\r\n\r\nНе следует, однако забывать, что постоянный количественный рост и сфера нашей активности требуют определения и уточнения дальнейших направлений развития. Значимость этих проблем настолько очевидна, что укрепление и развитие структуры требуют определения и уточнения соответствующий условий активизации. Товарищи! постоянное информационно-пропагандистское обеспечение нашей деятельности представляет собой интересный эксперимент проверки дальнейших направлений развития.', 'Pellentesque augue urna, auctor vel ligula sit amet, laoreet imperdiet magna. Morbi ultricies, massa ut tincidunt finibus, est ex convallis nisl, cursus consequat eros libero nec turpis. Mauris sit amet hendrerit tellus, sed eleifend erat. Sed ex velit, scelerisque vel leo vitae, venenatis dapibus ex. Ut commodo velit nisi, eget ullamcorper justo hendrerit id.', 1),
(18, 'Простые узоры', 18, '<p>Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он у себя в постели превратился в страшное насекомое. Лежа на панцирнотвердой спине, он видел, стоило ему приподнять голову, свой коричневый, выпуклый, разделенный дугообразными чешуйками живот, на верхушке которого еле держалось готовое вот-вот окончательно сползти одеяло. Его многочисленные, убого тонкие по сравнению с остальным телом ножки беспомощно копошились у него перед глазами. «Что со мной случилось? » – подумал он. Это не было сном. Его комната, настоящая, разве что слишком маленькая, но обычная комната, мирно покоилась в своих четырех хорошо знакомых стенах.</p>', 'Nulla ut ex purus. In facilisis, ligula non pretium cursus, erat lorem rhoncus lorem, ac condimentum nisl diam id enim. Donec accumsan dolor nec nunc fermentum consequat.', 1),
(19, 'Сложные узоры', 18, '<p>Над столом, где были разложены распакованные образцы сукон – Замза был коммивояжером, – висел портрет, который он недавно вырезал из иллюстрированного журнала и вставил в красивую золоченую рамку. На портрете была изображена дама в меховой шляпе и боа, она сидела очень прямо и протягивала зрителю тяжелую меховую муфту, в которой целиком исчезала ее рука. Затем взгляд Грегора устремился в окно, и пасмурная погода – слышно было, как по жести подоконника стучат капли дождя – привела его и вовсе в грустное настроение.</p>', 'Praesent nec molestie mauris, nec hendrerit ipsum. Morbi dignissim sem diam, et interdum orci elementum at. In placerat et risus venenatis volutpat. Curabitur tempor, urna id volutpat pulvinar, libero ex fermentum massa, in mattis lectus libero id mi. Vestibulum vel enim vel magna congue venenatis vel nec est. Maecenas id lacinia orci. Morbi sed sapien id nisi dictum pharetra ut at nunc.', 1),
(20, 'Python', 21, '<p>«Хорошо бы еще немного поспать и забыть всю эту чепуху», – подумал он, но это было совершенно неосуществимо, он привык спать на правом боку, а в теперешнем своем состоянии он никак не мог принять этого положения. С какой бы силой ни поворачивался он на правый бок, он неизменно сваливался опять на спину. Закрыв глаза, чтобы не видеть своих барахтающихся ног, он проделал это добрую сотню раз и отказался от этих попыток только тогда, когда почувствовал какую-то неведомую дотоле, тупую и слабую боль в боку. «Ах ты, господи, – подумал он, – какую я выбрал хлопотную профессию! Изо дня в день в разъездах.</p>', ' Nulla ac purus ut nulla consequat vestibulum. Nam pellentesque purus at purus malesuada elementum. Ut erat diam, placerat a lorem sit amet, gravida bibendum sem. Donec cursus diam in orci consectetur consectetur. Cras imperdiet ut nisi ac volutpat. Vestibulum ut suscipit risus, ac semper felis. Praesent vitae nisl ante. Nullam velit elit, ornare quis congue fringilla, egestas auctor nisl.', 1),
(21, 'Вязание без спиц', 22, '<p>Деловых волнений куда больше, чем на месте, в торговом доме, а кроме того, изволь терпеть тяготы дороги, думай о расписании поездов, мирись с плохим, нерегулярным питанием, завязывай со все новыми и новыми людьми недолгие, никогда не бывающие сердечными отношения. Черт бы побрал все это! » Он почувствовал вверху живота легкий зуд; медленно подвинулся на спине к прутьям кровати, чтобы удобнее было поднять голову; нашел зудевшее место, сплошь покрытое, как оказалось, белыми непонятными точечками; хотел было ощупать это место одной из ножек, но сразу отдернул ее, ибо даже простое прикосновение вызвало у него, Грегора, озноб. Он соскользнул в прежнее свое положение.</p>', 'Nunc sollicitudin cursus sapien at tristique. Aliquam in enim sit amet quam convallis ultricies. Cras tempor augue vitae risus placerat commodo. Donec id tempus felis, sit amet fermentum dolor. Proin ut fringilla ligula. Vivamus eget euismod libero. Quisque interdum lacinia velit, imperdiet rhoncus enim pulvinar at.', 1),
(22, 'Введение в разработку на платформе Arduino', 25, '<p>Arduino - это эффективное средство разработки программируемых электронных устройств, которые, в отличие от персональных компьютеров, ориентированы на тесное взаимодействие с окружающим миром. Ардуино - это открытая программируемая аппаратная платформа для работы с различными физическими объектами и представляет собой простую плату с микроконтроллером, а также специальную среду разработки для написания программного обеспечения микроконтроллера.</p>\r\n\r\n<p>Существует множество других микроконтроллеров и микропроцессорных устройств, предназначенных для программирования различных аппаратных средств: Parallax Basic Stamp, Netmedia's BX-24, Phidgets, MIT's Handyboard и многие другие. Все эти устройства предлагают похожую функциональность и призваны освободить пользователя от необходимости углубляться в мелкие детали внутреннего устройства микроконтроллеров, предоставив ему простой и удобный интерфейс для их программирования. Ардуино также упрощает процесс работы с микроконтроллерами, но в отличие от других систем предоставляет ряд преимуществ для преподавателей, студентов и радиолюбителей:</p>\r\n\r\n<ul>\r\n <li><strong>Низкая стоимость.</strong> По сравнению с похожими аппаратными платформами, платы Ардуино имеют относительно низкую стоимость: готовые модули Ардуино стоят не дороже 50$, а возможность собрать плату вручную позволяет максимально сэкономить средства и получить Ардуино за минимальную цену.</li>\r\n <li><strong>Кроссплатформенность.</strong> Программное обеспечение Ардуино работает на операционных системах Windows, Macintosh OSX и Linux, в то время, как большинство подобных систем ориентированы на работу только в Windows.</li>\r\n <li><strong>Простая и удобная среда программирования.</strong> Среда программирования Ардуино понятна и проста для начинающих, но при этом достаточно гибка для продвинутых пользователей. Она основана на среде программирования Processing, что может быть удобно для преподавателей. Благодаря этому, студенты, изучающие программирование в среде Processing, смогут легко освоить Ардуино.</li>\r\n <li><strong>Расширяемое программное обеспечение с открытым исходным кодом.</strong> Программное обеспечение Ардуино имеет открытый исходный код, благодаря этому опытные программисты могут изменять и дополнять его. Возможности языка Ардуино можно также расширять с помощью C++ библиотек. Благодаря тому, что он основан на языке AVR C, продвинутые пользователи, желающие разобраться в технических деталях, могут легко перейти с языка Ардуино на С либо вставлять участки AVR-C кода непосредственно в программы Ардуино.</li>\r\n <li><strong>Расширяемое открытое аппаратное обеспечение.</strong> Устройства Arduino построены на базе микроконтроллеров Atmel ATmega8 и ATmega168. Благодаря тому, что все схемы модулей Ардуино опубликованы под лицензией Creative Commons, опытные инженеры и разработчики могут создавать свои версии устройств на основе существующих. И даже обычные пользователи могут собирать опытные образцы Ардуино для лучшего понимания принципов их работы и экономии средств.</li>\r\n</ul>\r\n', 'Arduino — аппаратная вычислительная платформа, основными компонентам которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wiring.', 1),
(23, 'Тормозная система', 24, 'Товарищи! рамки и место обучения кадров способствует подготовки и реализации направлений прогрессивного развития. С другой стороны реализация намеченных плановых заданий в значительной степени обуславливает создание форм развития. Равным образом дальнейшее развитие различных форм деятельности представляет собой интересный эксперимент проверки соответствующий условий активизации. Задача организации, в особенности же дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации форм развития. Задача организации, в особенности же консультация с широким активом в значительной степени обуславливает создание направлений прогрессивного развития. Идейные соображения высшего порядка, а также новая модель организационной деятельности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям.', 'Quisque sollicitudin ligula quis quam pharetra, ut aliquam velit vehicula. Aenean suscipit ligula ut scelerisque congue. Fusce consequat, ex et lacinia consequat, magna mi cursus nulla, id suscipit augue tellus ac urna. Nulla eget ante auctor, ultricies magna sit amet, egestas nisi. Mauris consequat pulvinar purus.', 1),
(24, 'Цифровое телевидение', 26, '<p>«От этого раннего вставания, – подумал он, – можно совсем обезуметь. Человек должен высыпаться. Другие коммивояжеры живут, как одалиски. Когда я, например, среди дня возвращаюсь в гостиницу, чтобы переписать полученные заказы, эти господа только завтракают. А осмелься я вести себя так, мои хозяин выгнал бы меня сразу. Кто знает, впрочем, может быть, это было бы даже очень хорошо для меня. Если бы я не сдерживался ради родителей, я бы давно заявил об уходе, я бы подошел к своему хозяину и выложил ему все, что о нем думаю. Он бы так и свалился с конторки!</p>', 'Morbi laoreet tincidunt blandit. Nulla aliquet sollicitudin tortor vel gravida. Vestibulum felis ex, fermentum sed metus in, aliquam vestibulum ipsum. Donec vitae laoreet turpis, eget lobortis odio. Praesent in sem dictum, placerat augue nec, posuere enim. Vivamus hendrerit suscipit mattis. Phasellus sodales ultricies condimentum.', 1),
(25, 'Проводная связь', 25, '<p>Странная у него манера – садиться на конторку и с ее высоты разговаривать со служащим, который вдобавок вынужден подойти вплотную к конторке из-за того, что хозяин туг на ухо. Однако надежда еще не совсем потеряна: как только я накоплю денег, чтобы выплатить долг моих родителей – на это уйдет еще лет пять-шесть, – я так и поступлю. Тут-то мы и распрощаемся раз и навсегда. А пока что надо подниматься, мой поезд отходит в пять». И он взглянул на будильник, который тикал на сундуке. «Боже правый! » – подумал он. Было половина седьмого, и стрелки спокойно двигались дальше, было даже больше половины, без малого уже три четверти. Неужели будильник не звонил?</p>', 'Proin pellentesque ullamcorper metus, a dapibus arcu fermentum facilisis. Cras elementum ac tortor porta tincidunt. Curabitur vel velit dui. Suspendisse hendrerit urna sed elit fringilla, sit amet hendrerit est gravida. In laoreet velit at urna ullamcorper malesuada. Quisque aliquet nibh lorem, et dapibus justo ullamcorper in. Proin eget justo non nibh tempor hendrerit ut sit amet nunc. ', 1),
(26, 'Навигация и система управления', 24, '<p>С кровати было видно, что он поставлен правильно, на четыре часа; и он, несомненно, звонил. Но как можно было спокойно спать под этот сотрясающий мебель трезвон? Ну, спал-то он неспокойно, но, видимо, крепко. Однако что делать теперь? Следующий поезд уходит в семь часов; чтобы поспеть на него, он должен отчаянно торопиться, а набор образцов еще не упакован, да и сам он отнюдь не чувствует себя свежим и легким на подъем. И даже поспей он на поезд, хозяйского разноса ему все равно не избежать – ведь рассыльный торгового дома дежурил у пятичасового поезда и давно доложил о его, Грегора, опоздании. Рассыльный, человек бесхарактерный и неумный, был ставленником хозяина. А что, если сказаться больным?</p>', 'Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis a dictum magna, quis sagittis nulla. Maecenas diam erat, interdum quis interdum posuere, ultrices sit amet risus. Morbi tortor sapien, bibendum quis interdum non, pellentesque at risus. Praesent vitae hendrerit nunc, vitae varius nunc. Aenean nec tellus lobortis, tempus quam non, fringilla nisi. Nunc quis erat auctor, porta nisi vel, pretium felis.', 1),
(27, 'Передача ПАЛ сигнала', 26, '<p>Но это было бы крайне неприятно и показалось бы подозрительным, ибо за пятилетнюю свою службу Грегор ни разу еще не болел. Хозяин, конечно, привел бы врача больничной кассы и стал попрекать родителей сыном-лентяем, отводя любые возражения ссылкой на этого врача, по мнению которого все люди на свете совершенно здоровы и только не любят работать. И разве в данном случае он был бы так уж неправ? Если не считать сонливости, действительно странной после такого долгого сна, Грегор и в самом деле чувствовал себя превосходно и был даже чертовски голоден. Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он у себя в постели превратился в страшное насекомое.</p>', 'Etiam et malesuada metus, ac hendrerit est. Cras in gravida odio, pellentesque volutpat est. Donec consequat vitae libero eget porta. Aliquam erat volutpat. Proin semper malesuada lectus, vitae viverra justo accumsan quis. Cras ut felis magna. Pellentesque nec risus nec nisl vulputate fermentum in et tellus. Aenean ultrices pretium velit ac pellentesque. Donec sit amet leo malesuada, euismod metus vitae, pharetra ex.', 1),
(28, 'Вязание зимних изделий', 23, '<p>Лежа на панцирнотвердой спине, он видел, стоило ему приподнять голову, свой коричневый, выпуклый, разделенный дугообразными чешуйками живот, на верхушке которого еле держалось готовое вот-вот окончательно сползти одеяло. Его многочисленные, убого тонкие по сравнению с остальным телом ножки беспомощно копошились у него перед глазами. «Что со мной случилось? » – подумал он. Это не было сном. Его комната, настоящая, разве что слишком маленькая, но обычная комната, мирно покоилась в своих четырех хорошо знакомых стенах. Над столом, где были разложены распакованные образцы сукон – Замза был коммивояжером, – висел портрет, который он недавно вырезал из иллюстрированного журнала и вставил в красивую золоченую рамку.</p>', 'Donec ut est placerat, mattis elit a, congue lectus. Nullam maximus congue nulla, eget tincidunt libero vestibulum et. Mauris fringilla tortor ipsum, et pulvinar orci pharetra at. Mauris fringilla erat eu pulvinar mattis. Proin ut magna orci.\n\nDonec fringilla nunc tristique, varius purus in, condimentum lectus.', 1),
(29, 'Спутниковая коммуникация', 25, 'Не следует, однако забывать, что реализация намеченных плановых заданий способствует подготовки и реализации форм развития. Равным образом дальнейшее развитие различных форм деятельности в значительной степени обуславливает создание соответствующий условий активизации. Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки дальнейших направлений развития. Задача организации, в особенности же постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет выполнять важные задания по разработке систем массового участия. Равным образом постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа форм развития. Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации дальнейших направлений развития.', 'Maecenas tincidunt magna turpis, et sollicitudin lectus posuere eget. Phasellus commodo velit id purus ultrices, non ultricies nisi bibendum. Donec facilisis euismod dapibus. Aliquam aliquam diam nulla, sit amet consectetur sem semper at. Suspendisse vitae neque risus. Sed sit amet laoreet nisi. Pellentesque commodo feugiat quam ut pretium. ', 1),
(30, 'AVR-C', 21, 'Идейные соображения высшего порядка, а также постоянное информационно-пропагандистское обеспечение нашей деятельности играет важную роль в формировании <strong>форм развития.</strong> Равным образом рамки и место обучения кадров позволяет оценить значение систем массового участия.\r\n<br>\r\nРазнообразный и богатый опыт начало повседневной работы по формированию позиции в значительной степени обуславливает создание систем массового участия. Идейные соображения высшего порядка, а также дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании дальнейших направлений развития. С другой стороны реализация намеченных плановых заданий способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Товарищи! постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа модели развития. Задача организации, в особенности же укрепление и развитие структуры играет важную роль в формировании модели развития.', ' Maecenas eget quam ut nisi semper sollicitudin vel a erat. In tellus augue, gravida et leo nec, congue tempor lectus. Fusce dapibus nunc nec ultricies sollicitudin. Integer pulvinar nisl in sagittis hendrerit. Quisque dolor dui, vehicula quis aliquam id, hendrerit quis elit.\n\nAliquam porttitor efficitur urna, non euismod tortor. Quisque laoreet vel leo ac vulputate.', 1);
INSERT INTO `information` (`id`, `name`, `category_id`, `description`, `shortdescription`, `activ`) VALUES
(33, 'Платформа .NET', 16, '<p>Как-то Билл Гейтс сказал, что платформа .NET - это лучшее, что создала компания Microsoft. Возможно, он был прав. Фреймворк .NET представляет мощную платформу для создания приложений. Можно выделить следующие ее основные черты:</p>\r\n\r\n<ul>\r\n <li>\r\n <p>Поддержка нескольких языков. Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR), благодаря чему .NET поддерживает несколько языков: наряду с C# это также VB.NET, C++, F#, а также различные диалекты других языков, привязанные к .NET, например, Delphi.NET. При компиляции код на любом из этих языков компилируется в сборку на общем языке CIL (Common Intermediate Language) - своего рода ассемблер платформы .NET. Поэтому мы можем сделать отдельные модули одного приложения на отдельных языках.</p>\r\n </li>\r\n <li>\r\n <p>Кроссплатформенность. .NET является переносимой платформой (с некоторыми ограничениями). Например, последняя версия платформы на данный момент .NET Framework поддерживается на большинстве современных ОС Windows (Windows 10/8.1/8/7/Vista). А благодаря проекту Mono можно создавать приложения, которые будут работать и на других ОС семейства Linux, в том числе на мобильных платформах Android и iOS.</p>\r\n </li>\r\n <li>\r\n <p>Мощная библиотека классов. .NET представляет единую для всех поддерживаемых языков библиотеку классов. И какое бы приложение мы не собирались писать на C# - текстовый редактор, чат или сложный веб-сайт - так или иначе мы задействуем библиотеку классов .NET.</p>\r\n </li>\r\n <li>\r\n <p>Разнообразие технологий. Общеязыковая среда исполнения CLR и базовая библиотека классов являются основой для целого стека технологий, которые разработчики могут задействовать при построении тех или иных приложений. Например, для работы с базами данных в этом стеке технологий предназначена технология ADO.NET. Для построения графических приложений с богатым насыщенным интерфейсом - технология WPF. Для создания веб-сайтов - ASP.NET и т.д.</p>\r\n </li>\r\n</ul>\r\n\r\n<p>Также еще следует отметить такую особенность языка C# и фреймворка .NET, как автоматическая сборка мусора. А это значит, что нам в большинстве случаев не придется, в отличие от С++, заботиться об освобождении памяти. Вышеупомянутая общеязыковая среда CLR сама вызовет сборщик мусора и очистит память.</p>\r\n', 'Когда говорят C#, нередко имеют в виду технологии платформы .NET (WPF, ASP.NET). И, наоборот, когда говорят .NET, нередко имеют в виду C#. Однако, хотя эти понятия связаны, отождествлять их неверно. Язык C# был создан специально для работы с фреймворком .NET, однако само понятие .NET несколько шире.', 1),
(34, 'Lorem ipsum dolor sit amet', 28, '<p> </p>\r\n\r\n<div class="row three-col">\r\n<div class="col-md-4 col-1">\r\n<p><img src="http://placehold.it/400x225&text=Image" /></p>\r\n\r\n<p>Aliquam tempor ultrices metus, ac finibus mi egestas sed. Mauris magna sem, ultricies sit amet massa a, porttitor eleifend odio.</p>\r\n</div>\r\n\r\n<div class="col-md-4 col-2">\r\n<p><img src="http://placehold.it/400x225&text=Image" /></p>\r\n\r\n<p>Nam vehicula viverra ex. Nulla imperdiet nisi nec consequat auctor. </p>\r\n</div>\r\n\r\n<div class="col-md-4 col-3">\r\n<p><img src="http://placehold.it/400x225&text=Image" /></p>\r\n\r\n<p>Suspendisse mollis rhoncus magna, id varius arcu tristique nec.</p>\r\n</div>\r\n</div>\r\n\r\n<div class="row two-col-left">\r\n<div class="col-md-3 col-sidebar">\r\n<h3><code>Morbi iaculis molestie</code></h3>\r\n\r\n<p><img src="http://placehold.it/300x250&text=Image" /></p>\r\n</div>\r\n\r\n<div class="col-md-9 col-main">\r\n<p>Etiam a finibus nisl. Etiam rhoncus augue ac tincidunt cursus. Proin purus massa, maximus consectetur convallis quis, feugiat vel lorem. Fusce odio leo, egestas sit amet bibendum non, dignissim eu elit. Etiam consequat purus non neque finibus placerat. Duis neque justo, ornare quis euismod sed, faucibus quis enim. Morbi eget rhoncus neque, ut sagittis leo.</p>\r\n\r\n<p>Cras posuere lobortis odio eget cursus. Etiam porttitor, mauris in iaculis posuere, nisi urna accumsan mi, tincidunt scelerisque nisl risus eget dui. Quisque ac leo augue. Ut vel lectus justo. Nunc sollicitudin gravida faucibus. Sed diam sem, commodo ac malesuada id, rutrum sed eros. Aliquam gravida, tortor sit amet pulvinar iaculis, ligula velit fringilla quam, quis scelerisque mauris orci luctus odio.</p>\r\n\r\n<p>Donec et nisl scelerisque, dignissim dui in, consequat neque. Vivamus mollis efficitur justo, vel vehicula mi lobortis id. Duis facilisis augue nunc, non auctor urna feugiat bibendum. Nulla a dapibus dui, vel convallis diam. Duis vitae iaculis eros. Etiam a dolor urna. In at consectetur tortor. In et leo eget purus varius molestie. Fusce efficitur urna et justo porta tristique. Maecenas maximus aliquet massa a ultrices. Donec elementum, purus ac rhoncus auctor, orci metus aliquet purus, sed commodo turpis ipsum eu ipsum.</p>\r\n</div>\r\n</div>\r\n\r\n<p> </p>\r\n', 'Praesent tortor augue, pretium non molestie in, blandit eu magna. Morbi placerat arcu erat, in sagittis lorem malesuada nec. Suspendisse id urna et nisl commodo elementum eget vel ligula. In tristique nisi id orci cursus, ac porta tortor posuere.', 1),
(35, 'С# для начинающих', 5, '<p dir="ltr">На данном курсе Вы сможете изучить один из наиболее востребованных языков программирования - C++. Это язык общего назначения, который сочетает в себе свойства как низко-, так и высоко- уровневых языков. Сегодня C++ широко применяется в разработке надежного высокопроизводительного системного и прикладного программного обеспечения, позволяющего решать широкий круг задач. Хотите получить престижную и востребованную профессию C++-разработчика? Тогда этот курс для Вас!</p>\r\n\r\n<p><strong>Цели:</strong></p>\r\n\r\n<p>Заложить твердый фундамент знаний:</p>\r\n\r\n<ol>\r\n <li>Базовых средств языка</li>\r\n <li>Механизмов абстракции</li>\r\n</ol>\r\n\r\n<p dir="ltr"><strong>Этот курс отлично подойдет, если Вы:</strong></p>\r\n\r\n<ul>\r\n <li dir="ltr">\r\n <p dir="ltr">Хотите начать изучать программирование “с нуля”;</p>\r\n </li>\r\n <li dir="ltr">\r\n <p dir="ltr">Уже знаете основы программирования и планируете разобраться в объектно-ориентированном программировании;</p>\r\n </li>\r\n</ul>\r\n\r\n<p><strong>Требования:</strong></p>\r\n\r\n<p dir="ltr">Курс является базовым и рассчитан на слушателей, не имеющих опыта разработки, но так же будет интересен и тем, у кого опыт имеется.</p>\r\n\r\n<p dir="ltr"> </p>\r\n', 'C# является объектно-ориентированным и в этом плане много перенял у Java и С++. Например, C# поддерживает полиморфизм, наследование, перегрузку операторов, статическую типизацию. Объектно-ориентированный подход позволяет решить задачи по построению крупных, но в тоже время гибких, масштабируемых и расширяемых приложений. И C# продолжает активно развиваться, и с каждой новой версией появляется все больше интересных функциональностей, как, например, лямбды, динамическое связывание.', 1);
-- --------------------------------------------------------
--
-- Структура таблицы `information_user`
--
CREATE TABLE IF NOT EXISTS `information_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`information_id` int(11) DEFAULT NULL,
`education_id` int(11) DEFAULT NULL,
`lesson_id` int(11) DEFAULT NULL,
`status` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;
--
-- Дамп данных таблицы `information_user`
--
INSERT INTO `information_user` (`id`, `user_id`, `information_id`, `education_id`, `lesson_id`, `status`) VALUES
(1, 3, 1, NULL, NULL, NULL),
(2, 3, 2, NULL, NULL, NULL),
(3, 3, 3, NULL, NULL, NULL),
(4, 3, 12, NULL, NULL, NULL),
(5, 2, 1, NULL, NULL, NULL),
(9, 2, 1, 2, NULL, 1),
(10, 2, 1, NULL, 1, 1),
(11, 2, 1, NULL, 2, 1),
(12, 2, 12, NULL, NULL, 1),
(13, 2, 22, NULL, NULL, NULL),
(14, 3, 22, NULL, NULL, NULL),
(15, 2, 1, 3, NULL, 1),
(16, 2, 1, NULL, 3, 1),
(17, 2, 1, NULL, 4, 1),
(20, 3, 33, NULL, NULL, NULL),
(21, 3, 34, NULL, NULL, NULL),
(22, 3, 35, NULL, NULL, NULL),
(26, 2, 33, NULL, NULL, NULL);
-- --------------------------------------------------------
--
-- Структура таблицы `lesson`
--
CREATE TABLE IF NOT EXISTS `lesson` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(120) NOT NULL,
`description` varchar(255) NOT NULL,
`text` text NOT NULL,
`number` int(11) NOT NULL,
`block` int(11) NOT NULL DEFAULT '0',
`education_id` int(11) DEFAULT NULL,
`information_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;
--
-- Дамп данных таблицы `lesson`
--
INSERT INTO `lesson` (`id`, `name`, `description`, `text`, `number`, `block`, `education_id`, `information_id`) VALUES
(1, 'Введение в HTML.', 'Основы создания веб страниц', '<div class="btgrid">\r\n<div class="row row-1">\r\n<div class="col col-md-6">\r\n<div class="content">\r\n<h2>Быстрый старт</h2>\r\n\r\n<p>Чтобы сразу же ввести в курс дела нетерпеливых читателей, предложим им возможность создания веб-страницы без последовательного изучения правил HTML. По крайней мере, вы сумеете убедиться, что создание веб-страниц достаточно простая штука.</p>\r\n\r\n<p>В примере 1.1 приведен несложный пример такого кода.</p>\r\n\r\n<p>Пример 1.1. Первая веб-страница</p>\r\n\r\n<pre>\r\n\r\n<code><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" \r\n "http://www.w3.org/TR/html4/strict.dtd">\r\n<html>\r\n <head>\r\n <meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r\n <title>Моя первая веб-страница</title>\r\n </head>\r\n <body>\r\n\r\n <h1>Заголовок страницы</h1>\r\n <p>Основной текст.</p>\r\n\r\n </body>\r\n</html></code></pre>\r\n</div>\r\n</div>\r\n\r\n<div class="col col-md-6">\r\n<div class="content">\r\n<p><img alt="Рис. 1.1" src="http://htmlbook.ru/files/images/samhtml/fig_1_01_01.png" style="height:296px; width:608px" /></p>\r\n\r\n<p>Рис. 1.1. Вид HTML-кода в программе Блокнот</p>\r\n</div>\r\n</div>\r\n</div>\r\n</div>\r\n\r\n<p> </p>\r\n\r\n<div class="btgrid">\r\n<div class="row row-1">\r\n<div class="col col-md-6">\r\n<div class="content">\r\n<p>Чтобы посмотреть результат примера в действии, проделайте следующие шаги.</p>\r\n\r\n<p>1. В Windows откройте программу Блокнот (Пуск > Выполнить > набрать «notepad» или Пуск > Программы > Стандартные > Блокнот).</p>\r\n\r\n<p>2. Наберите или скопируйте код в Блокноте (рис. 1.1).</p>\r\n</div>\r\n</div>\r\n\r\n<div class="col col-md-6">\r\n<div class="content">\r\n<p><img alt="Рис. 1.1" src="http://htmlbook.ru/files/images/samhtml/fig_1_01_01.png" style="height:296px; width:608px" /></p>\r\n\r\n<p>Рис. 1.1. Вид HTML-кода в программе Блокнот</p>\r\n</div>\r\n</div>\r\n</div>\r\n</div>\r\n\r\n<p>3. Сохраните готовый документ (Файл > Сохранить как...) под именем c:\\www\\example11.html, при этом обязательно поставьте в диалоговом окне сохранения тип файла: Все файлы и кодировку UTF-8 (рис. 1.2). Обратите внимание, что расширение у файла должно быть именно html.</p>\r\n\r\n<p><img alt="Рис. 1.2" src="http://htmlbook.ru/files/images/samhtml/fig_1_01_02.png" style="height:108px; width:365px" /></p>\r\n\r\n<p>Рис. 1.2. Параметры сохранения файла в Блокноте</p>\r\n\r\n<p>4. Запустите браузер Internet Explorer (Пуск > Выполнить > набрать «iexplore» или Пуск > Программы > Internet Explorer).</p>\r\n\r\n<p>5. В браузере выберите пункт меню Файл > Открыть и укажите путь к вашему файлу.</p>\r\n\r\n<p>6. Если все сделано правильно, то в браузере вы увидите результат, как показано на рис. 1.3.</p>\r\n\r\n<p><img alt="Рис. 1.3" src="http://htmlbook.ru/files/images/samhtml/fig_1_01_03.png" style="height:279px; width:446px" /></p>\r\n\r\n<p>Рис. 1.3. Вид веб-страницы в окне браузера</p>\r\n\r\n<p>В случае возникновения каких-либо ошибок проверьте правильность набора кода согласно примеру 1.1, расширение файла (должно быть html) и путь к документу.</p>\r\n', 1, 1, 2, 0),
(2, 'Вёрстка таблиц', 'Вёрстка таблиц описание', 'Вёрстка таблиц описание', 2, 1, 2, 0),
(3, 'Блоки', 'Блоки описание', 'Блоки описание', 1, 1, 3, 0),
(4, 'Вёрстка блоков', 'Вёрстка блоков описание', 'Вёрстка блоков описание', 2, 1, 3, 0),
(5, 'Объектная модель браузера', 'Объектная модель документа (DOM) — объект document,через который осуществляется доступ к содержимому страницы.', '<p>BOM – это объекты для работы с чем угодно, кроме документа.</p>\r\n\r\n<p>Например:</p>\r\n\r\n<ul>\r\n <li>Объект <a href="https://developer.mozilla.org/en/DOM/window.navigator">navigator</a> содержит общую информацию о браузере и операционной системе. Особенно примечательны два свойства: <code>navigator.userAgent</code> – содержит информацию о браузере и<code>navigator.platform</code> – содержит информацию о платформе, позволяет различать Windows/Linux/Mac и т.п.</li>\r\n <li>Объект <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window.location">location</a> содержит информацию о текущем URL страницы и позволяет перенаправить посетителя на новый URL.</li>\r\n <li>Функции <code>alert/confirm/prompt</code> – тоже входят в BOM.</li>\r\n</ul>\r\n\r\n<p>Пример использования:</p>\r\n\r\n<pre>\r\n<code>alert( location.href ); // выведет текущий адрес</code></pre>\r\n\r\n<p>Большинство возможностей BOM стандартизированы в <a href="http://www.w3.org/TR/html5/Overview.html">HTML 5</a>, хотя различные браузеры и предоставляют зачастую что-то своё, в дополнение к стандарту.</p>\r\n', 1, 1, 5, 0),
(6, 'Объектная модель документа (DOM)', 'Цикл как элемент алгоритма описание', '<p>Глобальный объект <code>document</code> даёт возможность взаимодействовать с содержимым страницы.</p>\r\n\r\n<p>Пример использования:</p>\r\n\r\n<pre>\r\n<code>document.body.style.background = 'red';\r\nalert( 'Элемент BODY стал красным, а сейчас обратно вернётся' );\r\ndocument.body.style.background = '';</code></pre>\r\n\r\n<p>Он и громадное количество его свойств и методов описаны в <a href="http://www.w3.org/DOM/DOMTR">стандарте W3C DOM</a>.</p>\r\n\r\n<p>По историческим причинам когда-то появилась первая версия стандарта DOM Level 1, затем придумали ещё свойства и методы, и появился DOM Level 2, на текущий момент поверх них добавили ещё DOM Level 3 и готовится DOM 4.</p>\r\n\r\n<p>Современные браузеры также поддерживают некоторые возможности, которые не вошли в стандарты, но де-факто существуют давным-давно и отказываться от них никто не хочет. Их условно называют «DOM Level 0».</p>\r\n\r\n<p>Также информацию по работе с элементами страницы можно найти в стандарте <a href="http://www.w3.org/TR/html5/Overview.html">HTML 5</a>.</p>\r\n\r\n<p>Мы подробно ознакомимся с DOM далее в этой части учебника.</p>\r\n', 2, 1, 5, 0),
(7, 'Свойства объекта события', 'Построение веб-страницы описание', '<p>Чтобы хорошо обработать событие, недостаточно знать о том, что это – «клик» или «нажатие клавиши». Могут понадобиться детали: координаты курсора, введённый символ и другие, в зависимости от события.</p>\r\n\r\n<p>Детали произошедшего браузер записывает в «объект события», который передаётся первым аргументом в обработчик.</p>\r\n\r\n<p>Пример ниже демонстрирует использование объекта события:<code><code> <code> </code></code> </code></p>\r\n\r\n<p>Свойства объекта <code>event</code>:</p>\r\n\r\n<dl>\r\n <dt><code>event.type</code></dt>\r\n <dd>Тип события, в данном случае <code>click</code></dd>\r\n <dt><code>event.currentTarget</code></dt>\r\n <dd>Элемент, на котором сработал обработчик. Значение – в точности такое же, как и у <code>this</code>, но бывают ситуации, когда обработчик является методом объекта и его <code>this</code> при помощи <code>bind</code> привязан к этому объекту, тогда мы можем использовать <code>event.currentTarget</code>.</dd>\r\n <dt><code>event.clientX / event.clientY</code></dt>\r\n <dd>Координаты курсора в момент клика (относительно окна)</dd>\r\n</dl>\r\n\r\n<p>Есть также и ряд других свойств, в зависимости от событий, которые мы разберём в дальнейших главах, когда будем подробно знакомиться с событиями мыши, клавиатуры и так далее.</p>\r\n\r\n<p>Объект события доступен и в HTML</p>\r\n\r\n<p>При назначении обработчика в HTML, тоже можно использовать переменную <code>event</code>, это будет работать кросс-браузерно:<code><code> <code> </code></code></code></p>\r\n\r\n<p>Это возможно потому, что когда браузер из атрибута создаёт функцию-обработчик, то она выглядит так: <code>function(event) { alert(event.type) }</code>. То есть, её первый аргумент называется <code>"event"</code>.</p>\r\n\r\n<h2>Особенности IE8-</h2>\r\n\r\n<p>IE8- вместо передачи параметра обработчику создаёт глобальный объект <code>window.event</code>. Обработчик может обратиться к нему.</p>\r\n\r\n<p>Работает это так:</p>\r\n\r\n<pre>\r\n<code>elem.onclick = function() {\r\n // window.event - объект события\r\n alert( window.event.clientX );\r\n};</code></pre>\r\n\r\n<h3>Кроссбраузерное решение</h3>\r\n\r\n<p>Универсальное решение для получения объекта события:</p>\r\n\r\n<pre>\r\n<code>element.onclick = function(event) {\r\n event = event || window.event; // (*)\r\n\r\n // Теперь event - объект события во всех браузерах.\r\n};</code></pre>\r\n\r\n<p>Строка <code>(*)</code>, в случае, если функция не получила <code>event</code> (IE8-), использует <code>window.event</code>.-событие <code>event</code>.</p>\r\n\r\n<p>Можно написать и иначе, если мы сами не используем переменную <code>event</code> в замыкании:</p>\r\n\r\n<pre>\r\n<code>element.onclick = function(e) {\r\n e = e || event;\r\n\r\n // Теперь e - объект события во всех браузерах.\r\n};</code></pre>\r\n\r\n<h2>Итого</h2>\r\n\r\n<ul>\r\n <li>Объект события содержит ценную информацию о деталях события.</li>\r\n <li>Он передается первым аргументом <code>event</code> в обработчик для всех браузеров, кроме IE8-, в которых используется глобальная переменная <code>window.event</code>.</li>\r\n</ul>\r\n\r\n<p>Кросс-браузерно для JavaScript-обработчика получаем объект события так:</p>\r\n\r\n<pre>\r\n<code>element.onclick = function(event) {\r\n event = event || window.event;\r\n\r\n // Теперь event - объект события во всех браузерах.\r\n};</code></pre>\r\n\r\n<p>Еще вариант:</p>\r\n\r\n<pre>\r\n<code>element.onclick = function(e) {\r\n e = e || event; // если нет другой внешней переменной event\r\n ...\r\n};</code></pre>\r\n\r\n<p> </p>\r\n', 1, 1, 6, 0),
(8, 'Запрет на стандартное действие браузера и всплытие события', 'Различные способы запрет всплытия события ', '<h2>Запрет на стандартное действие браузера и всплытие события</h2>\r\n\r\n<p>Для некоторых тегов браузер создает свои обработчики событий. Например, при клике по ссылке осуществляется переход по адресу, указанному в аттрибуте «href», при нажатии на кнопку с типом «submit» происходит отправка формы, а при двойном щелчке на поле с текстом — он выделяется. Все эти действия по умолчанию заложены в браузер, но несмотря на это, ими можно манипулировать.</p>\r\n\r\n<p>В javascript для отмены стандартного действия браузера используется метод «preventDefault()», который можно применить к объекту события «e». Например, чтобы запретить переход по всем ссылкам достаточно немного переделать предыдущий код.</p>\r\n\r\n<pre>\r\ndocument.onclick = function(e){\r\n if (e.target.tagName=='a') e.preventDefault();\r\n}</pre>\r\n\r\n<h3>Запрет на всплытие события</h3>\r\n\r\n<p>В предыдущих примерах мы основывали решение на эффекте всплывания события, но в некоторых случаях оно может не дойти до «document». Произойти это может если на его пути встанет обработчик с запретом дальнейшего всплытия.</p>\r\n\r\n<pre>\r\ndocument.getElementById('link').onclick = function(e){\r\n e.stopPropagation();\r\n}</pre>\r\n\r\n<p>Если создать ссылку с идентификатором «link» и обработчиком, где есть запрет на всплытие, то при клике на неё будет осуществлен переход на новую страницу независимо от того, запрещен ли он в обработчиках у родителей этой ссылки.</p>\r\n\r\n<h3>Одновременный запрета всплытия и действия браузера</h3>\r\n\r\n<p>Чтобы запретить всплытие и стандартное действие браузера можно конечно воспользоваться одновременным вызовом вышепредставленных методов объекта «e», но в большинстве случаев в javascript просто возвращают в обработчике значение «false».</p>\r\n\r\n<p><img alt="запрета всплытия и действия браузера" src="http://realadmin.ru/assets/templates/main/images/ForNews/2014/11/return.jpg" title="запрета всплытия и действия браузера" /></p>\r\n\r\n<h2>Заключение</h2>\r\n\r\n<p>В качестве заключения хочу предупредить, что здесь рассмотрены не все возможности объекта e в javascript. Например, я полностью опустил кроссбраузерность в примерах, а ведь для использования в Internet Explorer необходимо в начале обработчика прописывать следующий код:</p>\r\n\r\n<pre>\r\n var elem, evt=e?e:event;\r\n if (evt.target) elem = evt.target;\r\n else if (evt.srcElement) elem = evt.srcElement;</pre>\r\n\r\n<p>Так же я ничего не написал про способ получения нажатых клавиш, а ведь вся эта информация так же содержится в рассматриваемом объекте. Постараюсь восполнить эти пробелы в следующих статьях.</p>\r\n', 2, 1, 6, 0),
(9, 'Введение Arduino', 'Общие сведения о продукте Arduino', '<div class="row three-col">\r\n<div class="col-md-4 col-1">\r\n<p><img alt="" src="http://www.suli-company.org.ua/wp-content/uploads/2013/02/8271191f3e.png" /></p>\r\n</div>\r\n\r\n<div class="col-md-4 col-2">\r\n<p><img src="http://img2.okidoker.com/c/1/1/9/19659/4304740/8941784_2.jpg" /></p>\r\n</div>\r\n\r\n<div class="col-md-4 col-3">\r\n<p><img src="https://im3-tub-by.yandex.net/i?id=23a2f4078af7a21d7dd7d3538ea8c211&n=33&h=215&w=286" /></p>\r\n</div>\r\n</div>\r\n\r\n<p> </p>\r\n\r\n<p><strong>Arduino</strong> — аппаратная вычислительная платформа, основными компонентам которой являются простая плата ввода/вывода и среда разработки на языке <a>Processing</a>/<a>Wiring</a>. J,ott jgbcfybt </p>\r\n\r\n<p><strong>Аппаратная часть</strong></p>\r\n\r\n<p>Плата Arduino состоит из микроконтроллера Atmel AVR (ATmega328 и ATmega168 в новых версиях и ATmega8 в старых) и элементной обвязки для программирования и интеграции с другими схемами. На каждой плате обязательно присутствуют линейный стабилизатор напряжения 5 В и 16 МГц кварцевый генератор (в некоторых версиях керамический резонатор). В микроконтроллер предварительно <a>прошит загрузчик</a>, поэтому внешний программатор не нужен.<br />\r\n<br />\r\nНа концептуальном уровне все платы программируются через <strong>RS-232</strong> (последовательное соединение), но реализация этого способа отличается от версии к версии. Плата Serial Arduino содержит простую инвертирующую схему для конвертирования уровней сигналов RS-232 в уровни ТТЛ, и наоборот. Текущие платы, вроде Diecimila, программируются через USB, что осуществляется благодаря микросхеме конвертера USB-to-serial вроде FTDI FT232. В некоторых вариантах, таких как Arduino Mini или неофициальной Boarduino, для программирования требуется подключение отдельной платы USB-to-serial или кабеля.</p>\r\n\r\n<p>Платы Arduino позволяют использовать большую часть I/O <a>выводов микроконтроллера</a> во внешних схемах. Например, в плате Diecimila доступно 14 цифровых вводов/выводов(уровни «LOW» -0В и «HIGH» -5В), 6 из которых могут выдавать ШИМ сигнал, и 6 аналоговых входов(0-5В). Эти выводы доступны в верхней части платы через 0,1 дюймовые разъёмы типа «мама». На рынке доступны несколько внешних плат расширения, известных как «shields».</p>\r\n\r\n<p><strong>Программное обеспечение</strong></p>\r\n\r\n<p><br />\r\nИнтегрированная <a>среда разработки</a> Arduino — это кроссплатформенное приложение на Java, включающее в себя редактор кода, компилятор и модуль передачи прошивки в плату.<br />\r\n<br />\r\nСреда разработки основана на языке программирования <a>Processing</a> и спроектирована для программирования новичками, не знакомыми близко с разработкой программного обеспечения. Язык программирования аналогичен используемому в проекте Wiring. Строго говоря, это <strong><a>C/C++</a></strong>, дополненный некоторыми библиотеками. Программы обрабатываются с помощью препроцессора, а затем компилируется с помощью <a>AVR-GCC</a>.</p>\r\n\r\n<p><strong>Клоны</strong></p>\r\n\r\n<p>Название «Arduino» (и производные от него) является торговой маркой для официального продукта и не использовалось для производных работ без разрешения. В официальном документе об использовании названия Arduino подчеркивается, что проект открыт для всех желающих работать над официальным продуктом.</p>\r\n\r\n<p>Результатом защиты названия стало ответвление от версии платы Arduino Diecimila, сделанное группой пользователей, что привело к выпуску эквивалентной платы, названной <a>Freeduino</a>. Название Freeduino не является торговой маркой и может использоваться в любых целях.<br />\r\nПодробнее — \\»<a>Разновидности плат Arduino, а также про клоны, оригиналы и совместимость</a>\\»</p>\r\n\r\n<p><strong>Самостоятельное изготовление</strong></p>\r\n\r\n<p>В домашних условиях можно <a>самостоятельно изготовить</a> <a>Arduino Single-Sided Serial Board</a><br />\r\n<br />\r\n<a>принципиальная схема</a><br />\r\n<a>руководство</a> (на английском)</p>\r\n\r\n<p>Читать далее: <a>Ардуино что это и зачем.</a><br />\r\n<a>Разновидности плат Arduino, а также про клоны, оригиналы и совместимость</a></p>\r\n\r\n<p>По теме:<br />\r\n<a>Подготовка к работе с Arduino/CraftDuino</a><br />\r\n<a>Программирование Arduino — статьи.</a><br />\r\n<a>Книги про Arduino</a><br />\r\nкнига на русском языке: <strong><a>Блокнот программиста Arduino</a></strong> (PDF 1.3 Mb)<br />\r\n<a>Шпаргалка по Arduino</a></p>\r\n\r\n<p>Ссылки:<br />\r\n<a>http://www.arduino.cc</a> — официальный сайт<br />\r\n<a>http://habrahabr.ru/blogs/arduino/30100/</a><br />\r\n<a>ЖЖ-сообщество</a><br />\r\n<a>Инструкции по Arduino</a> — несколько уроков с фотографиями и советами для начинающих (на английском).</p>\r\n\r\n<p>по материалам<br />\r\n<a>http://ru.wikipedia.org/wiki/Arduino</a></p>\r\n\r\n<p><strong>А что такое контроллер?</strong> </p>\r\n\r\n<p> </p>\r\n\r\n<p>Для тех кто немного в курсе: не путать с микроконтроллером — МК это atmega, PIC и прочие “микросхемы” – однокристальные микро-ЭВМ,а контроллер это плата такая, на которую этот самый МК запаян. <br />\r\nДля тех кто совсем не в курсе: контроллер это такое электронное устройство которое что- нибудь контролирует — то есть реагирует на изменения одних параметров изменением других. Ну вот например кондиционер на стене видишь? (я тоже не вижу, но у кого-то он наверняка есть) так вот там тоже стоит умная плата-контроллер включающая/выключающая подогрев/охлаждение/осушение/увлажнение воздуха когда нужно. </p>\r\n\r\n<p>Кондиционер, mp3 плеер, велокомпьютер, сигнализация, мобильник, навигатор — всё это (грубо говоря) специализированные контроллеры. А вот комп настольный это контроллер универсальный, да ещё и расширяемый, и с его помощью всё вышеперечисленное можно реализовать. Нужны будут только соответствующие платы расширения и софт.</p>\r\n\r\n<p><strong>Ардуино</strong></p>\r\n\r\n<p>Так вот ардуино тоже универсальный контроллер, который можно заточить под какую-нибудь задачу и превратить в законченное электронное устройство произвольного назначения, от часов с будильником до робота. Или просто играться — собирая разбирая всякие приблуды=)<br />\r\nРадиоконструктор в общем. <br />\r\nК самой плате можно подключать различную периферию – кнопки, некоторые виды датчиков (температуры, давления, освещённости, ускорения и т.п.), светодиоды, жидкокристаллические индикаторы (цифро-буквенные, а не LCD-монитор конечно =) написать программу и заставить взаимодействовать всё это как угодно. Масса применений кстати.</p>\r\n\r\n<p><em>Системы сбора данных</em> (чёрный ящик для аквариума – пишет температуру раз в 5 минут)</p>\r\n\r\n<p><em>Таймеры-Счётчики событий</em> (сколько раз и во сколько кот подходил к пустой миске)</p>\r\n\r\n<p><em>Сигнализации-Извещатели</em> (кот превысил разрешенное количество подходов к миске, температура в аквариуме ниже 0, кто-то покинул туалет не выключив свет/не смыв/не опустив стульчак =)</p>\r\n\r\n<p>В таком духе. Cкучновато конечно. Прям как древний пустой комп — ну клава, ну моник, ну часы, ну пасьянс какой-нибудь… А вот если воткнуть звуковушку, модем, мышь с джойстиком, да тв-тюнер с веб-камерой присобачить… уже больший полёт фантазии можно наблюдать.<br />\r\nТак же подключая к ардуино различные устройства – <a>шилды</a>(shields) добавляем различные функции — так можно управлять всякими двигателями, <a>сервомашинками</a>, сетевой нагрузкой наконец (свет, обогреватель, чайник и т.п.). Можно подключить GPS или GSM модуль и получать координаты со спутника или отправлять данные на свой телефон – координаты своей машины которую кореш взял покататься, или угнали не дай бог, или в командировке узнать что твой любимый кактус никто не поливает. Можно воткнуть <a>Ethernet-модуль</a> и выпустить свой девайс в интернет — пусть шлёт данные на твой сайт, или пусть пишет всё на SD-карту воткнутую в соответствующий шилд. Можно добавить каналы связи – ИК, радиоканал, а то и вообще<a>Bluetooth</a>, со всеми вытекающими. </p>\r\n\r\n<p>Ещё примеры что в голову приходит: </p>\r\n\r\n<p><em>Автокормушка для домашних животных</em><br />\r\n<em>Контроллер аквариума</em><br />\r\n<em>Дебаггер для машины</em> (все температуры, давления, обороты твоего жигуля на красивом экранчике, расшифровка блинк-кодов)<br />\r\n<em>Системы удалённой телеметрии </em><br />\r\n<em>Велокомпьютер</em><br />\r\n<em>Элементы умного дома</em> (управление светом, шторами, вентиляцией,кондиционированием, отоплением, прочими электроприборами)<br />\r\n<em>Элементы хобби-чпу</em><br />\r\n<em>Простые промышленные контроллеры</em><br />\r\n<em>Ну и конечно робототехника!</em> (для этого сайта — основное направление развития =)</p>\r\n\r\n<p>И всё это в произвольных комбинациях — ограничивает только фантазия и владение железом/софтом.</p>\r\n\r\n<p>Почему ардуино? Да, есть ещё немало универсальных контроллеров и плат развития позволяющих осуществлять и более амбициозные проекты. Но! Ардуино имеет ряд преимуществ:<br />\r\n<em>Не нужен программатор</em><br />\r\n<em>Не нужны особо глубокие познания в программирования микроконтроллеров</em> <br />\r\n<em>Проект ардуино полностью открытый</em><br />\r\n<em>Платформа набирает популярность</em> — куча сайтов с библиотеками, схемами и проектами<br />\r\n<em>Стандартизация расположения выводов</em> — это делает её привлекательной для производителей – появляются всё новые <a>шилды</a></p>\r\n', 1, 1, NULL, 22),
(10, 'Среда разработки Arduino', 'В данной лекции мы рассмотрим среду для программирования Arduino и напишем первую программу.', '<div class="row two-col">\r\n<div class="col-md-6 col-1">\r\n<p><img src="http://www.suli-company.org.ua/wp-content/uploads/2013/02/627a6abade.png" /></p>\r\n\r\n<p>Content</p>\r\n</div>\r\n\r\n<div class="col-md-6 col-2">\r\n<p><img alt="" src="http://www.suli-company.org.ua/wp-content/uploads/2013/02/43e6fada46.jpg" /></p>\r\n\r\n<p>Content</p>\r\n</div>\r\n</div>\r\n\r\n<p> </p>\r\n\r\n<p>На официальном сайте пишут: \\»<em>…is programmed using the Arduino programming language (based on <strong>Wiring</strong>)</em>\\». Фактически — нет никакого особого языка программирования и программы пишутся на <strong>C/C++</strong>, а компилируются и собираются с помощью широко известного avr-gcc (в версии для Windows — <a>WinAVR</a>).<br />\r\nВсе особенности сводятся к тому, что имеется набор библиотек, включающий в себя некоторые функции (вроде pinMode) и объекты (вроде Serial), а при компиляции Вашей программы среда разработки создает временный .cpp файл, в который кроме Вашего кода включается еще несколько строчек, и полученный результат скармливается компилятору а затем линковщику с нужными параметрами.</p>\r\n\r\n<p>Для примера, рассмотрим стандартный тестовый скетч (<a>Sketch</a>) </p>\r\n\r\n<blockquote>\r\n<p><strong>Sketch </strong>— это название программ для Arduino. Это единичный проект, который загружается и выполняется платой.</p>\r\n</blockquote>\r\n\r\n<p>Например, скетч <strong>Blink</strong> — мигает светодиодом, подключённым к 13 выводу(File -> SketchBook -> Examples -> Digital -> Blink):<br />\r\nсам файл находится здесь: <strong>arduino-0016\\\\examples\\\\Digital\\\\Blink\\\\Blink.pde</strong></p>\r\n\r\n<pre>\r\n<code>/*\r\n * Blink\r\n *\r\n * The basic Arduino example. Turns on an LED on for one second,\r\n * then off for one second, and so on... We use pin 13 because,\r\n * depending on your Arduino board, it has either a built-in LED\r\n * or a built-in resistor so that you need only an LED.\r\n *\r\n * http://www.arduino.cc/en/Tutorial/Blink\r\n */\r\n\r\nint ledPin = 13; // LED connected to digital pin 13\r\n\r\nvoid setup() // run once, when the sketch starts\r\n{\r\n pinMode(ledPin, OUTPUT); // sets the digital pin as output\r\n}\r\n\r\nvoid loop() // run over and over again\r\n{\r\n digitalWrite(ledPin, HIGH); // sets the LED on\r\n delay(1000); // waits for a second\r\n digitalWrite(ledPin, LOW); // sets the LED off\r\n delay(1000); // waits for a second\r\n}\r\n\r\n</code></pre>\r\n\r\n<p>— Если теперь скомпилировать полученную программу в Arduino, то во временной директории<br />\r\nвида<br />\r\n<strong>Local Settings\\\\Temp\\\\build40910.tmp\\\\</strong> появится куча файлов. <br />\r\nВ основном это объектные, содержащие скомпилированные стандартные функции, а также готовая скомпилированная программа в разных форматах (ELF, ROM, HEX). Самым интересным является .cpp файл — это то, во что превратился наш код, с нашими подробными комментариями — разумеется они добавлены вручную <br />\r\n— Temporary_4477_534.cpp —</p>\r\n\r\n<pre>\r\n<code>/*\r\n * Blink\r\n *\r\n * The basic Arduino example. Turns on an LED on for one second,\r\n * then off for one second, and so on... We use pin 13 because,\r\n * depending on your Arduino board, it has either a built-in LED\r\n * or a built-in resistor so that you need only an LED.\r\n *\r\n * http://www.arduino.cc/en/Tutorial/Blink\r\n */\r\n\r\n#include \\"WProgram.h\\" // тут определения всех Arduino ф-ий, констант и т.д.\r\nvoid setup(); // объявляют ф-ии setup() и loop(), в которых наша\r\nvoid loop(); // программа для Arduino и пишется\r\nint ledPin = 13; // светодиод подключается к выводу 13\r\n // --- а вот с этого места пошел наш исходник --- \r\nvoid setup() // вызывается один раз при запуске скетча\r\n{\r\n pinMode(ledPin, OUTPUT); // устанавливаем вывод, как ВЫХОД\r\n}\r\n\r\nvoid loop() // вызывается в цикле\r\n{\r\n digitalWrite(ledPin, HIGH); // устанавливает высокий уровень напряжения (светодиод горит)\r\n delay(1000); // задержка на 1 секунду\r\n digitalWrite(ledPin, LOW); // устанавливает низкий уровень напряжения (светодиод гаснет)\r\n delay(1000); // задержка на 1 секунду\r\n} // здесь наш код кончился, опять пошли \\"довески\\"\r\n\r\nint main(void) // здесь как и принято в c/c++ ф-ия main()\r\n{\r\n init(); // в ней вызывается своя инициализация\r\n\r\n setup(); // затем вызывается наш setup()\r\n \r\n for (;;) // и в бесконечном цикле вызывается наш loop()\r\n loop();\r\n \r\n return 0; // а сюда вообще никогда не попадаем\r\n}\r\n\r\n\r\n</code></pre>\r\n\r\n<p>На самом деле, среда Arduino делает еще какие-то мелкие преобразования исходного кода, например декорирует не-латинские символы, выносит все \\»#include\\» наверх, может еще какие-то мелочи, но идея остается той же самой.</p>\r\n', 2, 1, NULL, 22),
(11, 'Bootstrap основы', 'Bootstrap основы описание', 'Bootstrap основы описание', 1, 1, 7, 0),
(12, 'Bootstrap LESS', 'Bootstrap LESS описание', 'Bootstrap LESS описание', 2, 1, 7, 0),
(13, 'Основы работы со светодиодами', 'В данном уроке, Вы научитесь пользоваться светодиодами', '<p><iframe align="middle" frameborder="0" height="600" scrolling="no" src="https://www.youtube.com/embed/bO_jN0Lpz3Q" width="100%"></iframe></p>\r\n', 3, 1, NULL, 22);
INSERT INTO `lesson` (`id`, `name`, `description`, `text`, `number`, `block`, `education_id`, `information_id`) VALUES
(14, 'Начало работы. Visual Studio', 'Создание первого консольного приложения на С# и Visual Studio', '<p>Итак, создадим первое приложение на языке C#. Что для этого потребуется? Во-первых, нам нужен текстовый редактор, в котором мы могли бы напечатать код программы. Во-вторых, нам нужен компилятор, который бы скомпилировал набранный в текстовом редакторе код в приложение exe. В-третьих, нам нужен фреймворк .NET, который требуется для компиляции и выполнения программы.</p>\r\n\r\n<p>Чтобы облегчить написание, а также тестирование и отладку программного кода обычно используют специальные среды разработки, в частности, Visual Studio.</p>\r\n\r\n<p>Для создания приложений на C# будем использовать бесплатную и полнофункциональную среду разработки - Visual Studio Community 2015, которую можно загрузить по следующему адресу: <a href="https://www.visualstudio.com/en-us/downloads">Microsoft Visual Studio 2015</a>. Также можно использовать Visual Studio 2013.</p>\r\n\r\n<p>При инсталляции Visual Studio на ваш компьютер будут установлены все необходимые инструменты для разработки программ, в том числе фреймворк .NET 4.6.</p>\r\n\r\n<p>После завершения установки создадим первую программу. Она будет простенькой. Вначале откроем Visual Studio и вверху в строке меню выберем пункт File (Файл) -> New (Создать) -> Project (Проект). Перед нами откроется диалоговое окно создания нового проекта:</p>\r\n\r\n<p><img alt="Создание первого приложения на C#" src="http://metanit.com/sharp/tutorial/pics/1.1.png" /></p>\r\n\r\n<p>Здесь в центре мы выберем пункт <strong>Console Application</strong>, так как наше первое приложение будет консольным. Внизу в поле Name дадим проекту какое-либо название. В моем случае это <em>FirstApp</em>. И нажмем ОК.</p>\r\n\r\n<p>После этого Visual Studio создаст и откроет нам проект:</p>\r\n\r\n<p><img alt="Первый проект на C#" src="http://metanit.com/sharp/tutorial/pics/1.2.png" /></p>\r\n\r\n<p>В большом поле в центре, которое по сути представляет текстовый редактор, находится сгенерированный по умолчанию код C#. Впоследствии мы изменим его на свой.</p>\r\n\r\n<p>Справа находится окно Solution Explorer, в котором можно увидеть структуру нашего проекта. В данном случае у нас сгенерированная по умолчанию структура: узел Properties или Свойств (он хранит файлы свойств приложения и пока нам не нужен); узел References - это узел содержит сборки dll, которые добавлены в проект по умолчанию. Эти сборки как раз содержат классы библиотеки .NET, которые будет использовать C#. Однако не всегда все сборки нужны. Ненужные потом можно удалить, в то же время если понадобится добавить какую-нибудь нужную библиотеку, то именно в этот узел она будет добавляться.</p>\r\n\r\n<p>Далее идет файл конфигурации <em>App.config</em> (пока он нас не интересует) и непосредственно сам файл кода программы <em>Program.cs</em>. Как раз этот файл и открыт в центральном окне. Вначале разберем, что весь этот код представляет:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n\r\n <p>17</p>\r\n\r\n <p>18</p>\r\n\r\n <p>19</p>\r\n\r\n <p>20</p>\r\n </td>\r\n <td>\r\n <p><code>/*начало секции подключаемых пространств имен*/</code></p>\r\n\r\n <p><code>using</code> <code>System;</code></p>\r\n\r\n <p><code>using</code> <code>System.Collections.Generic;</code></p>\r\n\r\n <p><code>using</code> <code>System.Linq;</code></p>\r\n\r\n <p><code>using</code> <code>System.Text;</code></p>\r\n\r\n <p><code>using</code> <code>System.Threading.Tasks;</code></p>\r\n\r\n <p><code>/*конец секции подключаемых пространств имен*/</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code>namespace</code> <code>FirstApp </code><code>/*объявление нового пространства имен*/</code></p>\r\n\r\n <p><code>{</code></p>\r\n\r\n <p><code> </code><code>class</code> <code>Program </code><code>/*объявление нового класса*/</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>static</code> <code>void</code> <code>Main(</code><code>string</code><code>[] args) </code><code>/*объявление нового метода*/</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code> </p>\r\n\r\n <p><code> </code><code>}</code><code>/* конец объявления нового метода*/</code></p>\r\n\r\n <p><code> </code> </p>\r\n\r\n <p><code> </code><code>} </code><code>/* конец объявления нового класса*/</code></p>\r\n\r\n <p><code> </code> </p>\r\n\r\n <p><code>} </code><code>/* конец объявления нового пространства имен*/</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>В начале файла идут директивы using после которых идут названия подключаемых пространств имен. <strong>Пространства имен</strong> представляют собой организацию классов в общие блоки. Например, на первой строке <code>using System;</code> подключается пространство имен System, которое содержит фундаментальные и базовые классы платформы .NET. Физически пространства имен находятся в подключаемых библиотеках dll, которые можно увидеть в окне Solution Explorer, открыв узел References:</p>\r\n\r\n<p><img alt="Подключаемые библиотеки в Visual Studio" src="http://metanit.com/sharp/tutorial/pics/1.3.png" /></p>\r\n\r\n<p>Так, вы можете увидеть там библиотеку System.dll, которая содержит классы из пространства имен System. Однако точного соответствия между пространствами имен и названиями файлов dll нет.</p>\r\n\r\n<p>Второй строкой опять же подключается вложенное пространство имен System.Collections.Generic: то есть у нас в пространстве имен System определено пространство имен Collections, а уже в нем пространство имен Generic.</p>\r\n\r\n<p>И так как C# имеет Си-подобный синтаксис, каждая строка завершается точкой с запятой, а каждый блок кода помещается в фигурные скобки.</p>\r\n\r\n<p>Далее начинается уже собственно наше пространство имен, которое будет создавать отдельную сборку или исполняемую программу: сначала идет ключевое слово <code>namespace</code>, после которого название пространства имен. По умолчанию Visual Studio дает ему название проекта. Далее внутри фигурных скобок идет блок пространства имен.</p>\r\n\r\n<p>Пространство имен может включать другие пространства или классы. В данном случае у нас по умолчанию сгенерирован один класс - Program. Классы объявляются похожим способом - сначала идет ключевое слово <code>class</code>, а потом название класса, и далее блок самого класса в фигурных скобках.</p>\r\n\r\n<p>Класс может содержать различные переменные, методы, свойства, прочие инструкции. В данном случае у нас объявлен один метод Main. Сейчас он пуст и ничего не делает. В программе на C# метод Main является входной точкой программы, с него начинается все управление. Он обязательно должен присутствовать в программе.</p>\r\n\r\n<p>Слово <code>static</code> указывает, что метод Main - статический, а слово <code>void</code> - что он не возвращает никакого значения. Позже мы подробнее разберем, что все это значит.</p>\r\n\r\n<p>Далее в скобках у нас идут параметры метода - <code>string[] args</code> - это массив args, который хранит значения типа <code>string</code>, то есть строки. В данном случае ни нам пока не нужны, но в реальной программе это те параметры, которые передаются при запуске программы из консоли.</p>\r\n\r\n<p>Теперь изменим весь этот код на следующий:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n\r\n <p>17</p>\r\n\r\n <p>18</p>\r\n\r\n <p>19</p>\r\n\r\n <p>20</p>\r\n\r\n <p>21</p>\r\n\r\n <p>22</p>\r\n\r\n <p>23</p>\r\n\r\n <p>24</p>\r\n </td>\r\n <td>\r\n <p><code>using</code> <code>System;</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code>namespace</code> <code>FirstApp</code></p>\r\n\r\n <p><code>{</code></p>\r\n\r\n <p><code> </code><code>class</code> <code>Program</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>static</code> <code>void</code> <code>Main(</code><code>string</code><code>[] args)</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>Calculator calc = </code><code>new</code> <code>Calculator();</code></p>\r\n\r\n <p><code> </code><code>calc.Add(2, 3);</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code> </code><code>// объявление нового класса</code></p>\r\n\r\n <p><code> </code><code>class</code> <code>Calculator</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>public</code> <code>void</code> <code>Add(</code><code>int</code> <code>x, </code><code>int</code> <code>y)</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>int</code> <code>z = x + y;</code></p>\r\n\r\n <p><code> </code><code>Console.WriteLine(</code><code>"Сумма {0} и {1} равна {2}"</code><code>, x, y, z);</code></p>\r\n\r\n <p><code> </code><code>Console.ReadLine();</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code>}</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>По сравнению с автоматически сгенерированным кодом я внес несколько изменений. Во-первых, я убрал подключение ненужных пространств имен, так как они в данном случае не нужны.</p>\r\n\r\n<p>Во-вторых, я добавил в наше пространство имен новый класс - Calculator, который имеет один метод Add. Этот метод принимает в качестве параметров два числа - x и y и складывает их. А сумму выводим на консоль с помощью метода <code>Console.WriteLine</code>. Метод <code>Console.ReadLine</code>используется для ожидания ввода от пользователя, чтобы командная строка не схлопывалась сразу же после вывода результата.</p>\r\n\r\n<p>В этих двух строках кода я обращаюсь к классу Console, который находится в пространстве имен System. Это пространство подключено в начале с помощью директивы using. Однако нам необязательно подключать пространство имен. Мы можем даже удалить первую строку, но в этом случае мы тогда должны будем указать полный путь до используемого класса. Например, в нашем случае мы могли бы написать:<code>System.Console.ReadLine()</code>.</p>\r\n\r\n<p>После объявления нового класса мы можем использовать его в методе Main:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n </td>\r\n <td>\r\n <p><code>Calculator calc = </code><code>new</code> <code>Calculator(); </code><code>// создание объекта нового класса</code></p>\r\n\r\n <p><code>calc.Add(2, 3); </code><code>// вызов метода Add нового класса</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>Позже мы разберем создание объектов, почему именно такой синтаксис используется, а сейчас же достаточно понимать, что все действия, которые мы хотим сделать, мы делаем в методе Main, так как это входная точка в программу. Если бы мы не обратились к методу Add, то он бы никогда бы не сработал.</p>\r\n\r\n<p>Теперь мы можем запустить на выполнение с помощью клавиши F5 или с панели инструментов, нажав на зеленую стрелку. И если вы все сделали правильно, то вам отобразится консоль где будет красоваться число 5 - то есть сумма чисел 2 и 3.</p>\r\n\r\n<p>Итак, мы создали первое приложение. Вы его можете найти на жестком диске в папке проекта в каталоге <em>bin/Debug</em> (оно будет называться по имени проекта и иметь расширение exe) и затем уже запускать без Visual Studio, а также переносить его на другие компьютеры, где есть .NET.</p>\r\n\r\n<p>Теперь же рассмотрим основные составляющие синтаксиса языка.</p>\r\n', 1, 1, 8, NULL),
(15, 'Типы данных и переменные', 'Типы данных, используемые в С#', '<p>Как и во многих языках программирования, в C# есть своя система типов данных, которая используется для создания переменных. Она представлена следующими типами:</p>\r\n\r\n<ul>\r\n <li>\r\n <p>bool: хранит значение <code>true</code> или <code>false</code>. Представлен системным типом <code>System.Boolean</code></p>\r\n </li>\r\n <li>\r\n <p>byte: хранит целое число от <code>0</code> до <code>255</code> и занимает 1 байт. Представлен системным типом <code>System.Byte</code></p>\r\n </li>\r\n <li>\r\n <p>sbyte: хранит целое число от <code>-128</code> до <code>127</code> и занимает 1 байт. Представлен системным типом <code>System.SByte</code></p>\r\n </li>\r\n <li>\r\n <p>short: хранит целое число от <code>-32768</code> до <code>32767</code> и занимает 2 байта. Представлен системным типом <code>System.Int16</code></p>\r\n </li>\r\n <li>\r\n <p>ushort: хранит целое число от <code>0</code> до <code>65535</code> и занимает 2 байта. Представлен системным типом <code>System.UInt16</code></p>\r\n </li>\r\n <li>\r\n <p>int: хранит целое число от <code>-2147483648</code> до <code>2147483647</code> и занимает 4 байта. Представлен системным типом <code>System.Int32</code></p>\r\n </li>\r\n <li>\r\n <p>uint: хранит целое число от <code>0</code> до <code>4294967295</code> и занимает 4 байта. Представлен системным типом <code>System.UInt32</code></p>\r\n </li>\r\n <li>\r\n <p>long: хранит целое число от <code>–9 223 372 036 854 775 808</code> до <code>9 223 372 036 854 775 807</code> и занимает 8 байт. Представлен системным типом<code>System.Int64</code></p>\r\n </li>\r\n <li>\r\n <p>ulong: хранит целое число от <code>0</code> до <code>18 446 744 073 709 551 615</code> и занимает 8 байт. Представлен системным типом <code>System.UInt64</code></p>\r\n </li>\r\n <li>\r\n <p>float: хранит число с плавающей точкой от <code>-3.4*10<sup>38</sup></code> до <code>3.4*10<sup>38</sup></code> и занимает 4 байта. Представлен системным типом <code>System.Single</code></p>\r\n </li>\r\n <li>\r\n <p>double: хранит число с плавающей точкой от <code>±5.0*10<sup>324</sup></code> до <code>±1.7*10<sup>308</sup></code> и занимает 8 байта. Представлен системным типом <code>System.Double</code></p>\r\n </li>\r\n <li>\r\n <p>decimal: хранит десятичное дробное число. Если употребляется без десятичной запятой, имеет значение от 0 до +/–79 228 162 514 264 337 593 543 950 335; если с запятой, то от 0 до +/–7,9228162514264337593543950335 с 28 разрядами после запятой и занимает 16 байт. Представлен системным типом <code>System.Decimal</code></p>\r\n </li>\r\n <li>\r\n <p>char: хранит одиночный символ в кодировке Unicode и занимает 2 байта. Представлен системным типом <code>System.Char</code></p>\r\n </li>\r\n <li>\r\n <p>string: хранит набор символов Unicode. Представлен системным типом <code>System.String</code></p>\r\n </li>\r\n <li>\r\n <p>object: может хранить значение любого типа данных и занимает 4 байта на 32-разрядной платформе и 8 байт на 64-разрядной платформе. Представлен системным типом <code>System.Object</code>, который является базовым для всех других типов и классов .NET.</p>\r\n </li>\r\n</ul>\r\n\r\n<h3>Объявление переменных</h3>\r\n\r\n<p>Общий способ объявления переменных следующий: <code>тип_данных название_переменной</code>. Например, <code>int x;</code>. В этом выражении мы объявляем переменную x типа <code>int</code>. То есть x будет хранить некоторое число не больше 4 байт.</p>\r\n\r\n<p>В качестве имени переменной может выступать любое произвольное название, которое удовлетворяет следующим требованиям:</p>\r\n\r\n<ul>\r\n <li>\r\n <p>имя должно содержать не более 255 символов</p>\r\n </li>\r\n <li>\r\n <p>имя может содержать любые цифры, буквы и символ подчеркивания, при этом первый символ в имени должен быть буквой или символом подчеркивания</p>\r\n </li>\r\n <li>\r\n <p>в имени не должно быть знаков пунктуации и пробелов</p>\r\n </li>\r\n <li>\r\n <p>имя не может быть ключевым словом языка C#</p>\r\n </li>\r\n</ul>\r\n\r\n<p>Объявив переменную, мы можем тут же присвоить ей значение или инициализировать ее. Варианты объявления переменных:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n </td>\r\n <td>\r\n <p><code>bool</code> <code>isEnabled = </code><code>true</code><code>;</code></p>\r\n\r\n <p><code>int</code> <code>x;</code></p>\r\n\r\n <p><code>double</code> <code>y=3.0;</code></p>\r\n\r\n <p><code>string</code> <code>hello=</code><code>"Hello World"</code><code>;</code></p>\r\n\r\n <p><code>char</code> <code>c=</code><code>'s'</code><code>;</code></p>\r\n\r\n <p><code>int</code> <code>a=4;</code></p>\r\n\r\n <p><code>int</code> <code>z=a+5;</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<h4>Использование суффиксов</h4>\r\n\r\n<p>При присвоении значений надо иметь в виду следующую тонкость. При присвоении переменным типа float и decimal чисел с плавающей точкой, Visual Studio рассматривает все эти числа как значения типа <code>double</code>. И чтобы конкретизировать, что данное значение должно рассматриваться как <code>float</code>, нам надо использовать суффиксы (f и m соответственно для float и decimal):</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n </td>\r\n <td>\r\n <p><code>float</code> <code>b = 30.6f;</code></p>\r\n\r\n <p><code>decimal</code> <code>d = 334.8m;</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<h3>Использование системных типов</h3>\r\n\r\n<p>Выше при перечислении всех базовых типов данных для каждого упоминался системный тип. Потому что название встроенного типа по сути представляет собой сокращенное обозначение системного типа. Например, следующие переменные будут эквивалентны по типу:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n </td>\r\n <td>\r\n <p><code>int</code> <code>a = 4;</code></p>\r\n\r\n <p><code>System.Int32 b = 4;</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<h3>Неявная типизация</h3>\r\n\r\n<p>Ранее мы явным образом указывали тип переменных, например, <code>int x;</code>. И компилятор при запуске уже знал, что x хранит целочисленное значение.</p>\r\n\r\n<p>Однако мы можем использовать и модель неявной типизации:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n </td>\r\n <td>\r\n <p><code>var stroka = </code><code>"Hell to World"</code><code>;</code></p>\r\n\r\n <p><code>var c = 20;</code></p>\r\n\r\n <p><code> </code> </p>\r\n\r\n <p><code>Console.WriteLine(c.GetType().ToString());</code></p>\r\n\r\n <p><code>Console.WriteLine(stroka.GetType().ToString());</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>Для неявной типизации вместо названия типа данных используется ключевое слово <code>var</code>. Затем уже при компиляции компилятор сам выводит тип данных исходя из присвоенного значения. В примере выше использовалось выражение <code>Console.WriteLine(c.GetType().ToString());</code>, которое позволяет нам узнать выведенный тип переменной с. Так как по умолчанию все целочисленные значения рассматриваются как значения типа <code>int</code>, то поэтому в итоге переменная c будет иметь тип <code>int</code> или <code>SystemInt32</code></p>\r\n\r\n<p>Эти переменные подобны обычным, однако они имеют некоторые ограничения.</p>\r\n\r\n<p>Во-первых, мы не можем сначала объявить неявно типизируемую переменную, а затем инициализировать:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n </td>\r\n <td>\r\n <p><code>// этот код работает</code></p>\r\n\r\n <p><code>int</code> <code>a;</code></p>\r\n\r\n <p><code>a = 20;</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code>// этот код не работает</code></p>\r\n\r\n <p><code>var c;</code></p>\r\n\r\n <p><code>c= 20;</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>Во-вторых, мы не можем указать в качестве значения неявно типизируемой переменной <code>null</code>:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n </td>\r\n <td>\r\n <p><code>// этот код не работает</code></p>\r\n\r\n <p><code>var c=</code><code>null</code><code>;</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>Так как значение null, то компилятор не сможет вывести тип данных.</p>\r\n', 2, 1, 8, NULL),
(16, 'Знакомство с ASP.NET MVC', 'Платформа ASP.NET MVC базируется на взаимодействии трех компонентов: контроллера, модели и представления. Контроллер принимает запросы, обрабатывает пользовательский ввод, взаимодействует с моделью и представлением и возвращает пользователю результат обра', '<p>Платформа ASP.NET MVC представляет собой фреймворк для создания сайтов и веб-приложений с помощью реализации паттерна MVC.</p>\r\n\r\n<p>Концепция паттерна (шаблона) MVC (model - view - controller) предполагает разделение приложения на три компонента:</p>\r\n\r\n<p>Контроллер (controller) представляет класс, обеспечивающий связь между пользователем и системой, представлением и хранилищем данных. Он получает вводимые пользователем данные и обрабатывает их. И в зависимости от результатов обработки отправляет пользователю определенный вывод, например, в виде представления.</p>\r\n\r\n<p>Представление (view) - это собственно визуальная часть или пользовательский интерфейс приложения. Как правило, html-страница, которую пользователь видит, зайдя на сайт.</p>\r\n\r\n<p>Модель (model) представляет класс, описывающий логику используемых данных.</p>\r\n\r\n<p> </p>\r\n\r\n<p>Общую схему взаимодействия этих компонентов можно представить следующим образом:</p>\r\n\r\n<p><img alt="Паттерн MVC в ASP.NET" src="http://metanit.com/sharp/mvc5/pics/1.1.png" /></p>\r\n\r\n<p>В этой схеме модель является независимым компонентом - любые изменения контроллера или представления не затрагивают модель. Контроллер и представление являются относительно независимыми компонентами, и нередко их можно изменять независимо друг от друга.</p>\r\n\r\n<p>Благодаря этому реализуется концепция разделение ответственности, в связи с чем легче построить работу над отдельными компонентами. Кроме того, вследствие этого приложение обладает лучшей тестируемостью. И если нам, допустим, важная визуальная часть или фронтэнд, то мы можем тестировать представление независимо от контроллера. Либо мы можем сосредоточиться на бэкэнде и тестировать контроллер.</p>\r\n\r\n<p>Конкретные реализации и определения данного паттерна могут отличаться, но в силу своей гибкости и простоты он стал очень популярным в последнее время, особенно в сфере веб-разработки.</p>\r\n\r\n<p>Свою реализацию паттерна представляет платформа ASP.NET MVC. 2013 год ознаменовался выходом новой версии ASP.NET MVC - MVC 5, а также релизом Visual Studio 2013, которая предоставляет инструментарий для работы с MVC5.</p>\r\n\r\n<p>Хотя во многих аспектах MVC 5 не слишком сильно будет отличаться от MVC 4, многое из одной версии вполне применимо к другой, но в то же время есть и существенные отличия:</p>\r\n\r\n<ul>\r\n <li>\r\n <p>В MVC 5 изменилась концепция аутентификации и авторизации. Вместо SimpleMembershipProvider была внедрена система ASP.NET Identity, которая использует компоненты OWIN и Katana.</p>\r\n </li>\r\n <li>\r\n <p>Для создания адаптивного и расширяемого интерфейса в MVC 5 используется css-фреймворк Bootstrap</p>\r\n </li>\r\n <li>\r\n <p>Добавлены фильтры аутентификации, а также появилась функциональность переопределения фильтров</p>\r\n </li>\r\n <li>\r\n <p>В MVC 5 также добавлены атрибуты маршрутизации</p>\r\n </li>\r\n</ul>\r\n\r\n<p>Это наиболее важные нововведения в MVC 5. Кроме того, есть еще ряд менее значимых, например, использование по умолчанию Entity Framework 6, некоторые изменения при создании проекта (концепция One ASP.NET), дополнительные компоненты и т.д.</p>\r\n\r\n<p>В любом случае все полученные при работе с MVC 4 навыки можно успешно применять при использовании MVC 5, учитывая, конечно, нововведения.</p>\r\n', 1, 1, 10, NULL);
INSERT INTO `lesson` (`id`, `name`, `description`, `text`, `number`, `block`, `education_id`, `information_id`) VALUES
(17, 'Создание приложения на ASP.NET MVC 5', 'Начало работы с ASP.NET MVC 5. Создание первого приложения. ', '<p>Для создания веб-приложений на платформе ASP.NET MVC 5 необходима среда разработки - Visual Studio Community 2013 (либо другой выпуск Visual Studio 2013), которую можно найти по адресу <a href="https://www.visualstudio.com/ru-ru/downloads/download-visual-studio-vs#DownloadFamilies_2">Visual Studio Community 2013</a>.</p>\r\n\r\n<p>После установки откроем Visual Studio 2013 и в меню File (Файл) выберем пункт New Project... (Создать проект). Перед нами откроется диалоговое окно создания проекта. Поскольку в компании Microsoft взят курс под названием "One ASP.NET", то мы не увидим, как в прежних выпусках Visual Studio, разнообразие типов проектов. Вместо этого нам будет доступен только один тип проекта:</p>\r\n\r\n<p><img alt="Создание первого проекта ASP.NET MVC 5" src="http://metanit.com/sharp/mvc5/pics/1.2.png" /></p>\r\n\r\n<p>Дадим какое-нибудь имя проекту и нажмем ОК. После этого отобразится окно выбора шаблона нового приложения:</p>\r\n\r\n<p><img alt="Шаблоны проектов ASP.NET MVC 5" src="http://metanit.com/sharp/mvc5/pics/1.3.png" /></p>\r\n\r\n<p>По умолчанию уже выбран шаблон MVC.</p>\r\n\r\n<p>Кроме того, данное диалоговое окно позволяет задать опции тестирования.</p>\r\n\r\n<p>Также нам доступен в правой части окна выбор механизма аутентификации в приложении (кнопка Change Authentication). По умолчанию установлен тип Individual User Accounts. Не будем его изменять. Но если мы нажмем на кнопку Change Authentication, то нам будет доступен выбор из следующих типов аутентификации:</p>\r\n\r\n<p><img alt="Типы аутентификации в ASP.NET MVC 5" src="http://metanit.com/sharp/mvc5/pics/1.4.png" /></p>\r\n\r\n<p>Что они представляют?</p>\r\n\r\n<ul>\r\n <li>\r\n <p>No Authentication: приложение не требует аутентификации пользователя</p>\r\n </li>\r\n <li>\r\n <p>Individual User Accounts: требуется индивидуальная аутентификация, учетные записи пользователей хранятся в базе данных, кроме того, доступна аутентификация с помощью социальных сетей</p>\r\n </li>\r\n <li>\r\n <p>Organizational Accounts: в основном предназначено для корпоративных приложений, которые используют Active Directory или Office 365</p>\r\n </li>\r\n <li>\r\n <p>Windows Authentication: для управления учетными записями используется аутентификация Windows, так называемые intranet-приложения</p>\r\n </li>\r\n</ul>\r\n\r\n<p>Позже мы подробнее поговорим о механизмах аутентификации в приложении.</p>\r\n\r\n<p>Нажимаем кнопку OK, и создается новый проект. Он уже содержит разветвленную структуру и имеет некоторое наполнение по умолчанию. Запустим проект на выполнение, и нам отобразится некоторый контент, который уже имеется по умолчанию в приложении:</p>\r\n\r\n<p><img src="http://metanit.com/sharp/mvc5/pics/1.5.png" /></p>\r\n\r\n<h3>Структура проекта MVC 5</h3>\r\n\r\n<p>Весь этот функционал обеспечивается следующей структурой проекта:</p>\r\n\r\n<p><img alt="Стуктура проекта в ASP.NET MVC 5" src="http://metanit.com/sharp/mvc5/pics/1.6.png" /></p>\r\n\r\n<p>Вкратце рассмотрим, для чего нужны все эти папки и файлы.</p>\r\n\r\n<ul>\r\n <li>\r\n <p>App_Data: содержит файлы, ресурсы и базы данных, используемые приложением</p>\r\n </li>\r\n <li>\r\n <p>App_Start: хранит ряд статических файлов, которые содержат логику инициализации приложения при запуске</p>\r\n </li>\r\n <li>\r\n <p>Content: содержит вспомогательные файлы, которые не включают код на c# или javascript, и которые развертываются вместе с приложением, например, файлы стилей css</p>\r\n </li>\r\n <li>\r\n <p>Controllers: содежит файлы классов контроллеров. По умолчанию в эту папку добавляются два контроллера - HomeController и AccountController</p>\r\n </li>\r\n <li>\r\n <p>fonts: хранит дополнительные файлы шрифтов, используемых приложением</p>\r\n </li>\r\n <li>\r\n <p>Models: содержит файлы моделей. По умолчанию Visual Studio добавляет пару моделей, описывающих учетную запись и служащих для аутентификации пользователя</p>\r\n </li>\r\n <li>\r\n <p>Scripts: каталог со скриптами и библиотеками на языке javascript</p>\r\n </li>\r\n <li>\r\n <p>Views: здесь хранятся представления. Все представления группируются по папкам, каждая из которых соответствует одному контроллеру. После обработки запроса контроллер отправляет одно из этих представлений клиенту. Также здесь имеется каталог Shared, который содержит общие для всех представления</p>\r\n </li>\r\n <li>\r\n <p>Global.asax: файл, запускающийся при старте приложения и выполняющий начальную инициализацию. Как правило, здесь срабатывают методы классов, определенных в папке App_Start</p>\r\n </li>\r\n <li>\r\n <p>Startup.cs: поскольку в приложении MVC 5 используются библиотеки, применяющие спецификацию OWIN, то данный файл организует связь между OWIN и приложением. (OWIN представляет спецификацию, описывающую взаимодействие между компонентами приложения)</p>\r\n </li>\r\n <li>\r\n <p>Web.config: файл конфигурации приложения</p>\r\n </li>\r\n</ul>\r\n\r\n<p>Конкретная структура каждого отдельного приложения, естественно, будет отличаться, а гибкость MVC позволяет изменять структуру, приспосабливая, ее к своим потребностям. Но описанные выше моменты будут общими для большинства проектов.</p>\r\n\r\n<p>Теперь после ознакомления со структурой проекта создадим первое приложение.</p>\r\n\r\n<p>Так как с моделями и настройкой контекста данных мы закончили, то займемся другим компонентом приложения - контроллером. Для контроллеров предназначена папка Controllers. По умолчанию при создании проекта в нее добавляется контроллер HomeController, который практически не имеет никакой функциональности, и сейчас его код выглядит следующим образом:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n\r\n <p>17</p>\r\n\r\n <p>18</p>\r\n\r\n <p>19</p>\r\n\r\n <p>20</p>\r\n\r\n <p>21</p>\r\n\r\n <p>22</p>\r\n\r\n <p>23</p>\r\n\r\n <p>24</p>\r\n\r\n <p>25</p>\r\n\r\n <p>26</p>\r\n\r\n <p>27</p>\r\n\r\n <p>28</p>\r\n\r\n <p>29</p>\r\n\r\n <p>30</p>\r\n </td>\r\n <td>\r\n <p><code>using</code> <code>System;</code></p>\r\n\r\n <p><code>using</code> <code>System.Collections.Generic;</code></p>\r\n\r\n <p><code>using</code> <code>System.Linq;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web.Mvc;</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code>namespace</code> <code>BookStore.Controllers</code></p>\r\n\r\n <p><code>{</code></p>\r\n\r\n <p><code> </code><code>public</code> <code>class</code> <code>HomeController : Controller</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>public</code> <code>ActionResult Index()</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>return</code> <code>View();</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code> </code><code>public</code> <code>ActionResult About()</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>ViewBag.Message = </code><code>"Your application description page."</code><code>;</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code> </code><code>return</code> <code>View();</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code> </code><code>public</code> <code>ActionResult Contact()</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>ViewBag.Message = </code><code>"Your contact page."</code><code>;</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code> </code><code>return</code> <code>View();</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code>}</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>В контроллере определены по умолчанию три метода: Index, About и Contact. Нам они не нужны. Изменим код контроллера на следующий:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n\r\n <p>17</p>\r\n\r\n <p>18</p>\r\n\r\n <p>19</p>\r\n\r\n <p>20</p>\r\n\r\n <p>21</p>\r\n\r\n <p>22</p>\r\n\r\n <p>23</p>\r\n\r\n <p>24</p>\r\n\r\n <p>25</p>\r\n </td>\r\n <td>\r\n <p><code>using</code> <code>System;</code></p>\r\n\r\n <p><code>using</code> <code>System.Collections.Generic;</code></p>\r\n\r\n <p><code>using</code> <code>System.Linq;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web.Mvc;</code></p>\r\n\r\n <p><code>using</code> <code>BookStore.Models;</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code>namespace</code> <code>BookStore.Controllers</code></p>\r\n\r\n <p><code>{</code></p>\r\n\r\n <p><code> </code><code>public</code> <code>class</code> <code>HomeController : Controller</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>// создаем контекст данных</code></p>\r\n\r\n <p><code> </code><code>BookContext db = </code><code>new</code> <code>BookContext();</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code> </code><code>public</code> <code>ActionResult Index()</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>// получаем из бд все объекты Book</code></p>\r\n\r\n <p><code> </code><code>IEnumerable<Book> books = db.Books;</code></p>\r\n\r\n <p><code> </code><code>// передаем все объекты в динамическое свойство Books в ViewBag</code></p>\r\n\r\n <p><code> </code><code>ViewBag.Books = books;</code></p>\r\n\r\n <p><code> </code><code>// возвращаем представление</code></p>\r\n\r\n <p><code> </code><code>return</code> <code>View();</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code>}</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>Прежде всего, мы подключаем пространство имен моделей, даже не смотря на то, что он находятся в одном проекте, но в разных пространствах. Затем создается объект контекста данных, через который мы будем взаимодействовать с бд: <code>BookContext db = new BookContext();</code>.</p>\r\n\r\n<p>Далее используя свойство db.Books, получаем из базы данных набор объектов Book. Теперь надо передать этот набор в представление.</p>\r\n\r\n<p>Для передачи списка объектов Book в представление используем объект ViewBag. ViewBag представляет такой объект, который позволяет определить любую переменную и передать ей некоторое значение, а затем в представлении извлечь это значение. Так, мы определяем переменную <code>ViewBag.Books</code>, которая и будет хранить набор книг.</p>\r\n\r\n<p>Теперь создадим само представление для вывода списка книг. Для представлений в проекте предназначена папка Views. По умолчанию в этой папке уже есть подкаталог для представлений контроллера Home, в котором три представления: About.cshtml, Contact.cshtml и Index.chtml.</p>\r\n\r\n<p><img src="http://metanit.com/sharp/mvc5/pics/2.3.png" /></p>\r\n\r\n<p>Первые два представления нам уже не понадобятся, и их можно спокойно удалить. А представление Index.cshtml откроем и изменим следующим образом:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n\r\n <p>17</p>\r\n\r\n <p>18</p>\r\n\r\n <p>19</p>\r\n\r\n <p>20</p>\r\n\r\n <p>21</p>\r\n\r\n <p>22</p>\r\n\r\n <p>23</p>\r\n\r\n <p>24</p>\r\n\r\n <p>25</p>\r\n\r\n <p>26</p>\r\n\r\n <p>27</p>\r\n\r\n <p>28</p>\r\n\r\n <p>29</p>\r\n\r\n <p>30</p>\r\n\r\n <p>31</p>\r\n\r\n <p>32</p>\r\n </td>\r\n <td>\r\n <p><code>@{</code></p>\r\n\r\n <p><code> </code><code>Layout = null;</code></p>\r\n\r\n <p><code>}</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code><!DOCTYPE html></code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code><</code><code>html</code><code>></code></p>\r\n\r\n <p><code><</code><code>head</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>meta</code> <code>name</code><code>=</code><code>"viewport"</code> <code>content</code><code>=</code><code>"width=device-width"</code> <code>/></code></p>\r\n\r\n <p><code> </code><code><</code><code>title</code><code>>Книжный магазин</</code><code>title</code><code>></code></p>\r\n\r\n <p><code></</code><code>head</code><code>></code></p>\r\n\r\n <p><code><</code><code>body</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>div</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>h3</code><code>>Распродажа книг</</code><code>h3</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>table</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>tr</code><code>><</code><code>td</code><code>><</code><code>p</code><code>>Название книги</</code><code>p</code><code>></</code><code>td</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>td</code><code>><</code><code>p</code><code>>Автор</</code><code>p</code><code>></</code><code>td</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>td</code><code>><</code><code>p</code><code>>Цена</</code><code>p</code><code>></</code><code>td</code><code>><</code><code>td</code><code>></</code><code>td</code><code>></code></p>\r\n\r\n <p><code> </code><code></</code><code>tr</code><code>></code></p>\r\n\r\n <p><code> </code><code>@foreach (var b in ViewBag.Books)</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code><</code><code>tr</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>td</code><code>><</code><code>p</code><code>>@b.Name</</code><code>p</code><code>></</code><code>td</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>td</code><code>><</code><code>p</code><code>>@b.Author</</code><code>p</code><code>></</code><code>td</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>td</code><code>><</code><code>p</code><code>>@b.Price</</code><code>p</code><code>></</code><code>td</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>td</code><code>><</code><code>p</code><code>><</code><code>a</code> <code>href</code><code>=</code><code>"/Home/Buy/@b.Id"</code><code>>Купить</</code><code>a</code><code>></</code><code>p</code><code>></</code><code>td</code><code>></code></p>\r\n\r\n <p><code> </code><code></</code><code>tr</code><code>></code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code> </code><code></</code><code>table</code><code>></code></p>\r\n\r\n <p><code> </code><code></</code><code>div</code><code>></code></p>\r\n\r\n <p><code></</code><code>body</code><code>></code></p>\r\n\r\n <p><code></</code><code>html</code><code>></code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>Самым первым выражением <code>Layout = null;</code> мы указываем, что мастер-страница не будет применяться к этому представлению. Далее мы добавим к нему мастер-страницу и узнаем, зачем она нужна, а пока обойдемся без нее.</p>\r\n\r\n<p>Практически весь остальной код представляет собой стандартный код на языке html: создание обычной таблицы, которая выводит информацию о продаваемых книгах. Здесь также используется интересная конструкция <code>@foreach (var b in ViewBag.Books)</code>. Эта конструкция применяет синтаксис Razor. Подробнее о движке Razor и его ситаксисе мы поговорим в отдельной главе, а пока вам надо знать, что после символа <code>@</code> согласно синтаксису мы можем использовать выражения кода на языке C#/VB.NET.</p>\r\n\r\n<p>То есть тут мы создаем цикл. В нем мы пробегаемся по всем элементам в объекте ViewBag.Books, который был ранее создан в методе контроллера. И затем получаем значение свойства каждого элемента с помощью синтаксиса Razor: <code>@b.Name</code> и помещаем его в ячейку таблицы.</p>\r\n\r\n<p>В последнюю колонку таблицы для каждого элемента добавляется ссылка <code><a href="/Home/Buy/@b.Id">Купить</a></code>. При нажатии на эту ссылку методу Buy контроллера HomeController будет отправляться запрос, в котором вместо <code>@b.Id</code> будет указан id книги. Пока у нас, правда, отсутствует метод Buy, но скоро мы его создадим.</p>\r\n\r\n<h4>Основы маршрутизации</h4>\r\n\r\n<p>Чтобы обратиться к контроллеру HomeController или отправить ему запрос, нам надо указать в строке запроса его имя - Home. Кроме того, после имени контроллера нам надо через слеш указать действие или метод контроллера, к которому отправляется запрос. По умолчанию при запуске проекта или при обращении к сайту система mvc будет вызывать действие Index контроллера HomeController, если мы не укажем иной маршрут по умолчанию в параметрах маршрутизации. Путь <code>/Home/Buy</code> означает, что мы будем обращаться к методу Buy контроллера HomeController. А добавление в запрос параметра <code>/Home/Buy/@b.Id</code>, означает, что такой метод может принимать параметр. Но перед тем как создать этот метод, наполним приложение данными.</p>\r\n\r\n<h4>Данные для моделей по умолчанию</h4>\r\n\r\n<p>Так как мы будем использовать подход Code First, то нам не надо вручную создавать базу данных и наполнять ее данными. Мы можем воспользоваться специальным классом, который за нас добавит начальные данные в бд. Для этого в папку Models добавим новый классBookDbInitializer и изменим его код следующим образом:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n\r\n <p>17</p>\r\n\r\n <p>18</p>\r\n\r\n <p>19</p>\r\n\r\n <p>20</p>\r\n </td>\r\n <td>\r\n <p><code>using</code> <code>System;</code></p>\r\n\r\n <p><code>using</code> <code>System.Collections.Generic;</code></p>\r\n\r\n <p><code>using</code> <code>System.Linq;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web;</code></p>\r\n\r\n <p><code>using</code> <code>System.Data.Entity;</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code>namespace</code> <code>BookStore.Models</code></p>\r\n\r\n <p><code>{</code></p>\r\n\r\n <p><code> </code><code>public</code> <code>class</code> <code>BookDbInitializer : DropCreateDatabaseAlways<BookContext></code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>protected</code> <code>override</code> <code>void</code> <code>Seed(BookContext db)</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>db.Books.Add(</code><code>new</code> <code>Book { Name = </code><code>"Война и мир"</code><code>, Author = </code><code>"Л. Толстой"</code><code>, Price = 220 });</code></p>\r\n\r\n <p><code> </code><code>db.Books.Add(</code><code>new</code> <code>Book { Name = </code><code>"Отцы и дети"</code><code>, Author = </code><code>"И. Тургенев"</code><code>, Price = 180 });</code></p>\r\n\r\n <p><code> </code><code>db.Books.Add(</code><code>new</code> <code>Book { Name = </code><code>"Чайка"</code><code>, Author = </code><code>"А. Чехов"</code><code>, Price = 150 });</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code> </code><code>base</code><code>.Seed(db);</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code>}</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>Класс <code>DropCreateDatabaseAlways</code> позволяет при каждом новом запуске заполнять базу данных заново некоторыми начальными данными. В качестве таких начальных значений здесь создаются три объекта Book. Используя метод <code>db.Books.Add</code> мы добавляем каждый такой объект в базу данных.</p>\r\n\r\n<p>Однако чтобы этот класс действительно сработал, и заполнение базы данных произошло, нам надо запустить его при запуске приложения. Все начальные настройки приложения и конфигурации находятся в файле Global.asax. Откроем его и добавим в метод Application_Start, который отрабатывает при старте приложения, следующую строку <code>Database.SetInitializer(new BookDbInitializer());</code>:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n\r\n <p>17</p>\r\n\r\n <p>18</p>\r\n\r\n <p>19</p>\r\n\r\n <p>20</p>\r\n\r\n <p>21</p>\r\n\r\n <p>22</p>\r\n\r\n <p>23</p>\r\n\r\n <p>24</p>\r\n\r\n <p>25</p>\r\n </td>\r\n <td>\r\n <p><code>using</code> <code>System;</code></p>\r\n\r\n <p><code>using</code> <code>System.Collections.Generic;</code></p>\r\n\r\n <p><code>using</code> <code>System.Linq;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web.Mvc;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web.Optimization;</code></p>\r\n\r\n <p><code>using</code> <code>System.Web.Routing;</code></p>\r\n\r\n <p><code>using</code> <code>BookStore.Models;</code></p>\r\n\r\n <p><code>using</code> <code>System.Data.Entity;</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code>namespace</code> <code>BookStore</code></p>\r\n\r\n <p><code>{</code></p>\r\n\r\n <p><code> </code><code>public</code> <code>class</code> <code>MvcApplication : System.Web.HttpApplication</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>protected</code> <code>void</code> <code>Application_Start()</code></p>\r\n\r\n <p><code> </code><code>{</code></p>\r\n\r\n <p><code> </code><code>Database.SetInitializer(</code><code>new</code> <code>BookDbInitializer());</code></p>\r\n\r\n <p><code> </code> </p>\r\n\r\n <p><code> </code><code>AreaRegistration.RegisterAllAreas();</code></p>\r\n\r\n <p><code> </code><code>FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);</code></p>\r\n\r\n <p><code> </code><code>RouteConfig.RegisterRoutes(RouteTable.Routes);</code></p>\r\n\r\n <p><code> </code><code>BundleConfig.RegisterBundles(BundleTable.Bundles);</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code> </code><code>}</code></p>\r\n\r\n <p><code>}</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>И, наконец, мы можем запустить проект на выполнение и увидеть на веб-странице в браузере наши данные по умолчанию:</p>\r\n\r\n<p><img src="http://metanit.com/sharp/mvc5/pics/2.4.png" /></p>\r\n\r\n<p>И если мы откроем папку проекта на жестком диске и в этой папке перейдем к каталогу App_Data, то сможем увидеть только что созданную базу данных Bookstore.mdf, которая и хранит эти данные по умолчанию.</p>\r\n\r\n<p>Теперь же создадим выше обсуждавшийся метод Buy, который отвечает за покупку книги. Добавим в контроллер HomeController следующие два метода:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n </td>\r\n <td>\r\n <p><code>[HttpGet]</code></p>\r\n\r\n <p><code>public</code> <code>ActionResult Buy(</code><code>int</code> <code>id)</code></p>\r\n\r\n <p><code>{</code></p>\r\n\r\n <p><code> </code><code>ViewBag.BookId = id;</code></p>\r\n\r\n <p><code> </code><code>return</code> <code>View();</code></p>\r\n\r\n <p><code>}</code></p>\r\n\r\n <p><code>[HttpPost]</code></p>\r\n\r\n <p><code>public</code> <code>string</code> <code>Buy(Purchase purchase)</code></p>\r\n\r\n <p><code>{</code></p>\r\n\r\n <p><code> </code><code>purchase.Date = DateTime.Now;</code></p>\r\n\r\n <p><code> </code><code>// добавляем информацию о покупке в базу данных</code></p>\r\n\r\n <p><code> </code><code>db.Purchases.Add(purchase);</code></p>\r\n\r\n <p><code> </code><code>// сохраняем в бд все изменения</code></p>\r\n\r\n <p><code> </code><code>db.SaveChanges();</code></p>\r\n\r\n <p><code> </code><code>return</code> <code>"Спасибо,"</code> <code>+ purchase.Person + </code><code>", за покупку!"</code><code>;</code></p>\r\n\r\n <p><code>}</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>Хотя здесь два метода, но в целом они составляют одно действие Buy, только первый метод срабатывает при получении запроса GET, а второй - при получении запроса POST. С помощью атрибутов [HttpGet] и [HttpPost] мы можем указать, какой метод какой тип запроса обрабатывает.</p>\r\n\r\n<p>Так как предполагается, что в метод Buy будет передаваться id книги, которую пользователь хочет купить, то нам надо определить в методе соответствующий параметр: <code>public ActionResult Buy(int id)</code>. Затем этот параметр передается через объект ViewBag в представление, которое мы сейчас создадим.</p>\r\n\r\n<p>Метод <code>public string Buy(Purchase purchase)</code> выглядит несколько сложнее. Он принимает переданную ему в запросе POST модель purchase и добавляет ее в базу данных. Результатом работы метода будет строка, которую увидит пользователь.</p>\r\n\r\n<p>А весь код по добавлению нового объекта в бд благодаря использованию EntityFramework фактически сводится к двум строчкам:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n </td>\r\n <td>\r\n <p><code>db.Purchases.Add(purchase);</code></p>\r\n\r\n <p><code>db.SaveChanges();</code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>И в конце добавим представление Buy.cshtml. Для этого нажмем на метод <code>public ActionResult Buy(int id)</code> правой кнопкой и в появившемся списке выберем Add View...(Добавить представление). Перед нами откроется окно добавления нового представления:</p>\r\n\r\n<p><img src="http://metanit.com/sharp/mvc5/pics/2.5.png" /></p>\r\n\r\n<p>Оставим все установки по умолчанию, только снимем галочку с поля Use a layout page, так как пока мастер-страницу мы не будем использовать. И нажмем Add (Добавить). Изменим код нового представления следующим образом:</p>\r\n\r\n<table border="0" cellpadding="0" cellspacing="0">\r\n <tbody>\r\n <tr>\r\n <td>\r\n <p>1</p>\r\n\r\n <p>2</p>\r\n\r\n <p>3</p>\r\n\r\n <p>4</p>\r\n\r\n <p>5</p>\r\n\r\n <p>6</p>\r\n\r\n <p>7</p>\r\n\r\n <p>8</p>\r\n\r\n <p>9</p>\r\n\r\n <p>10</p>\r\n\r\n <p>11</p>\r\n\r\n <p>12</p>\r\n\r\n <p>13</p>\r\n\r\n <p>14</p>\r\n\r\n <p>15</p>\r\n\r\n <p>16</p>\r\n\r\n <p>17</p>\r\n\r\n <p>18</p>\r\n\r\n <p>19</p>\r\n\r\n <p>20</p>\r\n\r\n <p>21</p>\r\n\r\n <p>22</p>\r\n\r\n <p>23</p>\r\n\r\n <p>24</p>\r\n\r\n <p>25</p>\r\n\r\n <p>26</p>\r\n </td>\r\n <td>\r\n <p><code>@{</code></p>\r\n\r\n <p><code> </code><code>Layout = null;</code></p>\r\n\r\n <p><code>}</code></p>\r\n\r\n <p> </p>\r\n\r\n <p><code><!DOCTYPE html></code></p>\r\n\r\n <p><code><</code><code>html</code><code>></code></p>\r\n\r\n <p><code><</code><code>head</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>meta</code> <code>name</code><code>=</code><code>"viewport"</code> <code>content</code><code>=</code><code>"width=device-width"</code> <code>/></code></p>\r\n\r\n <p><code> </code><code><</code><code>title</code><code>>Покупка</</code><code>title</code><code>></code></p>\r\n\r\n <p><code></</code><code>head</code><code>></code></p>\r\n\r\n <p><code><</code><code>body</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>div</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>h3</code><code>>Форма оформления покупки</</code><code>h3</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>form</code> <code>method</code><code>=</code><code>"post"</code> <code>action</code><code>=</code><code>""</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>input</code> <code>type</code><code>=</code><code>"hidden"</code> <code>value</code><code>=</code><code>"@ViewBag.BookId"</code> <code>name</code><code>=</code><code>"BookId"</code> <code>/></code></p>\r\n\r\n <p><code> </code><code><</code><code>table</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>tr</code><code>><</code><code>td</code><code>><</code><code>p</code><code>>Введите свое имя </</code><code>p</code><code>></</code><code>td</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>td</code><code>><</code><code>input</code> <code>type</code><code>=</code><code>"text"</code> <code>name</code><code>=</code><code>"Person"</code> <code>/> </</code><code>td</code><code>></</code><code>tr</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>tr</code><code>><</code><code>td</code><code>><</code><code>p</code><code>>Введите адрес :</</code><code>p</code><code>></</code><code>td</code><code>><</code><code>td</code><code>> </code></p>\r\n\r\n <p><code> </code><code><</code><code>input</code> <code>type</code><code>=</code><code>"text"</code> <code>name</code><code>=</code><code>"Address"</code> <code>/> </</code><code>td</code><code>></</code><code>tr</code><code>></code></p>\r\n\r\n <p><code> </code><code><</code><code>tr</code><code>><</code><code>td</code><code>><</code><code>input</code> <code>type</code><code>=</code><code>"submit"</code> <code>value</code><code>=</code><code>"Отправить"</code> <code>/> </</code><code>td</code><code>><</code><code>td</code><code>></</code><code>td</code><code>></</code><code>tr</code><code>></code></p>\r\n\r\n <p><code> </code><code></</code><code>table</code><code>></code></p>\r\n\r\n <p><code> </code><code></</code><code>form</code><code>></code></p>\r\n\r\n <p><code> </code><code></</code><code>div</code><code>></code></p>\r\n\r\n <p><code></</code><code>body</code><code>></code></p>\r\n\r\n <p><code></</code><code>html</code><code>></code></p>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n\r\n<p>При переходе на главной странице по ссылке "/Home/Buy/2" контроллер будет получать запрос к действию Buy, передавая ему в качестве параметра id значение 2. И так как такой запрос представляет тип GET, пользователю будет возвращаться данное представление с формой.</p>\r\n\r\n<p>Представление по сути представляет собой форму для ввода данных. Обратите внимание, что так как нам не надо изменять значение BookId, однако это значение все равно нам нужно для формирования модели Purchase, то мы его вкладываем в скрытое поле в начале формы.</p>\r\n\r\n<p>После заполнения формы и нажатия на кнопку форма будет оправляться запросом POST, так как мы его определили в строке <code><form method="post" action=""></code>. Контроллер снова будет получать запрос к методу Buy, только теперь будет выбираться для обработки запроса метод <code>public string Buy(Purchase purchase)</code>.</p>\r\n\r\n<p>Как система MVC угадывает, что мы передали с запросом post информацию о модели Purchase, а не набор разрозненных значений полей формы? Обратите внимание на поля ввода <code><input type="text" name="Person" /></code> и <code><input type="text" name="Address" /></code>. Значение их атрибутаname соответствуют именам свойств модели Purchase. После нажатия кнопки и отправки запроса приложение получает значения этих полей. Система MVC, используя соглашения по умолчанию, считает эти значения значениями соответствующих свойств модели и проводит связывание отдельных значений со свойствами модели.</p>\r\n\r\n<p>Теперь запустим наше приложение. На главной странице выберем какую-нибудь книгу и нажмем на ссылку "Купить". На форме заполним поля и нажмем кнопку "Отправить".</p>\r\n\r\n<p><img src="http://metanit.com/sharp/mvc5/pics/2.6.png" /></p>\r\n\r\n<p>После нажатия кнопки информация о покупке попадет в базу данных, а в браузер отобразит уведомление:</p>\r\n\r\n<p><img src="http://metanit.com/sharp/mvc5/pics/2.7.png" /></p>\r\n\r\n<p>На этом небольшое мини-тренировочное приложение готово. Теперь сделаем приложение красивее, добавив стилизацию. А также добавим поддержку мастер-страниц.</p>\r\n', 2, 1, 10, NULL);
-- --------------------------------------------------------
--
-- Структура таблицы `menu`
--
CREATE TABLE IF NOT EXISTS `menu` (
`menu_id` int(11) NOT NULL AUTO_INCREMENT,
`menu_name` char(40) NOT NULL,
PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
--
-- Дамп данных таблицы `menu`
--
INSERT INTO `menu` (`menu_id`, `menu_name`) VALUES
(1, 'Верхнее меню'),
(2, 'Главное меню'),
(3, 'Меню студента'),
(4, 'Меню модератора'),
(5, 'Меню категорий'),
(6, 'Просмотр'),
(7, 'Меню преподавателя'),
(8, 'Меню модерирования модуля'),
(9, 'Меню редактирование лекции');
-- --------------------------------------------------------
--
-- Структура таблицы `menu_item`
--
CREATE TABLE IF NOT EXISTS `menu_item` (
`menu_item_id` int(11) NOT NULL AUTO_INCREMENT,
`menu_id` int(11) NOT NULL,
`menu_item_name` char(80) NOT NULL,
`menu_item_url` char(80) NOT NULL,
`menu_item_parent` int(11) NOT NULL DEFAULT '0',
`menu_item_activ` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`menu_item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;
--
-- Дамп данных таблицы `menu_item`
--
INSERT INTO `menu_item` (`menu_item_id`, `menu_id`, `menu_item_name`, `menu_item_url`, `menu_item_parent`, `menu_item_activ`) VALUES
(1, 1, 'Главная', '?', 0, 1),
(2, 1, 'Новости', '?ctrl=news&action=News&page=1', 0, 1),
(3, 1, 'О нас', '?ctrl=page&action=Page&id=1', 0, 1),
(4, 2, 'Комплексные курсы', '?ctrl=wisdom&action=WisdomType&type=1&page=1', 0, 1),
(5, 2, 'Многоуровневые комплексы', '?ctrl=wisdom&action=WisdomType&type=1&subtype=2&page=1', 4, 1),
(6, 2, 'Тематические комплексы', '?ctrl=wisdom&action=WisdomType&type=1&subtype=3&page=1', 4, 1),
(8, 2, 'Курсы', '?ctrl=wisdom&action=WisdomType&type=5&page=1', 0, 1),
(9, 2, 'Сертифицированные', '?ctrl=wisdom&action=WisdomType&type=5&subtype=7&page=1', 8, 1),
(10, 2, 'Не сертифицированные', '?ctrl=wisdom&action=WisdomType&type=5&subtype=8&page=1', 8, 1),
(11, 2, 'Семинары', '?ctrl=wisdom&action=WisdomType&type=6&page=1', 0, 1),
(12, 2, 'Мастер-классы', '?ctrl=wisdom&action=WisdomType&type=6&subtype=9&page=1', 11, 1),
(14, 2, 'Библиотека', '#', 0, 1),
(15, 2, 'Доклады', '?ctrl=wisdom&action=WisdomType&type=6&subtype=10&page=1', 11, 1),
(16, 3, 'Приступить', '?ctrl=cabinet&action=GetUserInformation&id=', 0, 1),
(17, 3, 'Отписаться', '?ctrl=cabinet&action=deleteUserInformation&id=', 0, 1),
(18, 6, 'Подробнее', '?ctrl=cabinet&action=GetUserInformation&id=', 0, 1),
(19, 7, 'Просмотр', '?ctrl=cabinet&action=GetUserInformation&id=', 0, 1),
(20, 7, 'Блокировка', '#', 0, 1),
(21, 7, 'Удалить', '#', 0, 1),
(22, 7, 'Редактировать', '?ctrl=teacher&action=EditWisdom&id=', 0, 1),
(23, 8, 'Редактировать', '?ctrl=teacher&action=EditWisdom&id=', 0, 1),
(24, 8, 'Блокировать', '#', 0, 1),
(25, 8, 'Удалить', '#', 0, 1),
(26, 9, 'Редактировать', '?ctrl=teacher&action=EditLesson', 0, 1),
(27, 9, 'Удалить', '#', 0, 1);
-- --------------------------------------------------------
--
-- Структура таблицы `news`
--
CREATE TABLE IF NOT EXISTS `news` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`news_header` varchar(90) NOT NULL,
`news_body` text NOT NULL,
`news_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`news_img` varchar(80) NOT NULL,
`user_id` int(11) NOT NULL,
`activ` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
--
-- Дамп данных таблицы `news`
--
INSERT INTO `news` (`id`, `news_header`, `news_body`, `news_date`, `news_img`, `user_id`, `activ`) VALUES
(1, 'Вчера во время проведения разведоперации наша группа подверглась нападению неизвестного пр', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris fermentum tristique dui vel varius. Donec egestas arcu eu quam tincidunt, at consectetur turpis tincidunt. Nulla quam nunc, porta et sapien fringilla, condimentum elementum lorem. Integer venenatis dui vel lacus lacinia, nec rutrum tortor vehicula. Integer elementum odio ante, id laoreet mi suscipit sit amet. Etiam molestie ipsum et pulvinar ultricies. Cras felis augue, congue ut odio quis, interdum facilisis mi. Curabitur et augue malesuada, iaculis sem a, fermentum dui. Mauris egestas eget nisi eu mattis. Pellentesque fermentum bibendum lobortis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras ac neque felis.', '2015-11-30 12:44:27', 'images/photoTest.png', 1, 1),
(2, 'Phasellus blandit nisl ac commodo aliquam.', 'Morbi sit amet quam quis neque tempus venenatis. Morbi placerat pulvinar leo, quis commodo urna lobortis sit amet. Praesent ornare congue diam, aliquet vulputate purus congue ac. Praesent et tellus a magna finibus maximus non ut velit. Nunc id dolor diam. Curabitur vulputate auctor felis, quis euismod libero varius sed. Cras eget mollis erat. Sed massa tellus, fringilla ut libero et, tincidunt efficitur dui.', '2015-11-30 14:40:27', 'images/IMG_20151228_120826.jpg', 1, 1),
(3, 'Praesent semper dui condimentum, auctor velit vitae, sagittis sapien.', 'Вчера во время проведения разведоперации наша группа подверглась нападению неизвестного противника в камуфляжной форме Алиенов.', '2015-11-30 14:44:56', 'images/20151228_120827.jpg', 1, 1),
(4, 'Sed in odio ac odio elementum ullamcorper et quis metus.', 'Morbi commodo eu risus non tincidunt. Proin vitae felis ac nunc efficitur dictum vitae vel erat. Sed nec pellentesque ex. Proin commodo arcu non diam vulputate vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tempus a ipsum in imperdiet. Duis quis eros quis erat convallis rutrum. Ut metus lacus, pulvinar nec sem eget, finibus molestie eros. Suspendisse malesuada mi sit amet faucibus hendrerit. Suspendisse eleifend libero enim, quis gravida tellus pulvinar sed. Aenean consequat risus at sapien cursus semper. Cras quam ipsum, pulvinar at aliquam in, aliquam non ex.<br><br>\nPellentesque faucibus hendrerit arcu sit amet posuere. Morbi magna lorem, gravida vel sapien eu, ultrices rutrum justo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris molestie eleifend blandit. Phasellus porta massa vitae ex sollicitudin pretium. Cras ac mi urna. Cras non luctus sem, scelerisque feugiat ipsum. Vestibulum vitae consequat nulla.', '2015-11-30 14:45:09', 'images/20151228_115024.jpg', 1, 1),
(5, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Morbi sapien libero, luctus ac nisi a, convallis pulvinar nisl. Donec ullamcorper ac enim a lacinia. Aliquam faucibus molestie tortor, eget luctus lectus vestibulum et. Proin faucibus elementum justo, nec hendrerit augue faucibus ut. Sed aliquet, massa id dignissim tincidunt, odio nulla congue turpis, sit amet laoreet eros sem cursus nisi. Nunc maximus blandit neque, ac fermentum lectus dapibus non. Ut in elit risus. Donec ultricies nunc in neque feugiat, quis laoreet quam pellentesque.', '2015-11-30 14:45:40', 'images/12_100229_1_96372.jpg', 1, 1),
(6, 'Sed molestie quam id sapien consequat, pellentesque fringilla arcu commodo.', 'Morbi commodo eu risus non tincidunt. Proin vitae felis ac nunc efficitur dictum vitae vel erat. Sed nec pellentesque ex. Proin commodo arcu non diam vulputate vestibulum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tempus a ipsum in imperdiet. Duis quis eros quis erat convallis rutrum. Ut metus lacus, pulvinar nec sem eget, finibus molestie eros. Suspendisse malesuada mi sit amet faucibus hendrerit. Suspendisse eleifend libero enim, quis gravida tellus pulvinar sed. Aenean consequat risus at sapien cursus semper. Cras quam ipsum, pulvinar at aliquam in, aliquam non ex.', '2015-11-30 14:45:50', 'images/12_100229_1_96370.jpg', 1, 1);
-- --------------------------------------------------------
--
-- Структура таблицы `page`
--
CREATE TABLE IF NOT EXISTS `page` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(40) NOT NULL,
`body` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Дамп данных таблицы `page`
--
INSERT INTO `page` (`id`, `title`, `body`) VALUES
(1, 'О нас', '<h1>Мы молодцы</h1>'),
(2, 'Контакты', '<h1>Садовая 32Б,кв 50</h1>\r\n<h2>Спросить Коровьева<h2>');
-- --------------------------------------------------------
--
-- Структура таблицы `questions`
--
CREATE TABLE IF NOT EXISTS `questions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`questions` int(11) NOT NULL,
`testing_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура таблицы `requirements`
--
CREATE TABLE IF NOT EXISTS `requirements` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`information_id` int(11) NOT NULL,
`requirements` int(11) NOT NULL,
`block` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Допуск к образованию по первому предмету' AUTO_INCREMENT=2 ;
--
-- Дамп данных таблицы `requirements`
--
INSERT INTO `requirements` (`id`, `information_id`, `requirements`, `block`) VALUES
(1, 2, 1, 1);
-- --------------------------------------------------------
--
-- Структура таблицы `testing`
--
CREATE TABLE IF NOT EXISTS `testing` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`information_id` int(11) NOT NULL,
`education_id` int(11) NOT NULL,
`lesson_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура таблицы `type`
--
CREATE TABLE IF NOT EXISTS `type` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` char(80) COLLATE utf8_unicode_ci NOT NULL,
`type_id` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_foreignkey_type_type` (`type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11 ;
--
-- Дамп данных таблицы `type`
--
INSERT INTO `type` (`id`, `name`, `type_id`) VALUES
(1, 'Комплекс курсов', NULL),
(2, 'Многоуровневые комплексы', 1),
(3, 'Тематические комплексы', 1),
(4, 'Сокращённое обучение', 1),
(5, 'Курсы', NULL),
(6, 'Семинары', NULL),
(7, 'Сертифицированные', 5),
(8, 'Не сертифицированные', 5),
(9, 'Мастер-классы', 6),
(10, 'Доклады', 6);
-- --------------------------------------------------------
--
-- Структура таблицы `user`
--
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dossier_id` int(11) NOT NULL,
`login` char(40) NOT NULL,
`password` char(40) NOT NULL,
`status` char(40) NOT NULL,
`block` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- Дамп данных таблицы `user`
--
INSERT INTO `user` (`id`, `dossier_id`, `login`, `password`, `status`, `block`) VALUES
(1, 0, 'admin', '123', 'admin', 0),
(2, 1, 'vasea', '12345', 'student', 0),
(3, 2, 'alla', '12345', 'teacher', 0);
-- --------------------------------------------------------
--
-- Структура таблицы `variable`
--
CREATE TABLE IF NOT EXISTS `variable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`questions_id` int(11) NOT NULL,
`text` varchar(300) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
-- Ограничения внешнего ключа сохраненных таблиц
--
--
-- Ограничения внешнего ключа таблицы `type`
--
ALTER TABLE `type`
ADD CONSTRAINT `c_fk_type_type_id` FOREIGN KEY (`type_id`) REFERENCES `type` (`id`) ON DELETE SET NULL ON UPDATE SET NULL;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;