Шаг 7
Общие функции и классы
Следующая тонкость. Допустим у нас несколько модулей, которые выводят какие-нибудь даты. И даты эти мы хотим вывести в нужном нам формате. Написать функцию, форматирующую дату проблем не составит, однако её придется переписывать несколько раз в разных модулях. Это лениво. И еще, если эти модули пересекутся, то есть будут подключены одновременно, то будет ошибка повторного определения функции. Что бы этого избежать, такого рода функции и классы нужно выносить в отдельные файлы в отдельном каталоге.
В корне сделайте директорию libs, туда и будем помещать все файлы общих функций и классов. Своего рода фреймворк.
Ну а вот и функция:
libs/default.php
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
|
<?php
/** * Функция перевода даты из азиатского формата в прописной * Translation function of date from the Asian format in the string * @param string $date, boolean $format * @return string */ function formatDate($date, $format = true) { global $month;
$day = substr($date, 8, 2); $mnt = $month[substr($date, 5, 2)]; $year = substr($date, 0, 4); $time = ''; if($format) $time = ' '. substr($date, 11);
return $day .' '. $mnt .' '. $year . $time; }
|
Пока можно сильно не вникать, как она работает. Работает и ладно. Попозже мы все разберем по полочкам. Сейчас важно понять структуру, стратегию так сказать. Тактика потом.
В этом файле можно определить несколько разных функций, которые потребуются в разных модулях. Что бы не переписывать одно и то же.
Останется подключить его к индексу и вызвать функцию там где надо. Добавим в языковой файл массив месяцев, раз они выводятся в браузер:
ru.php
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
|
<?php
/** * Варианты модуля приветствия * Variants of the module of a greeting */ define('IRB_WHO_FIRST', 'Мир'); define('IRB_WHO_SECOND','Солнце'); define('IRB_WHO_THIRD', 'Небо'); define('IRB_WHO_FOURTH','Вася'); define('IRB_WHO_FIFTH', 'Петя'); /** * Массив месяцев * The month array */ $month = array( '01' => 'января', '02' => 'февраля', '03' => 'марта', '04' => 'апреля', '05' => 'мая', '06' => 'июня', '07' => 'июля', '08' => 'августа', '09' => 'сентября', '10' => 'октября', '11' => 'ноября', '12' => 'декабря' );
|
А в файл menu.tpl добавим её вызов:
1
2
3
4
5
6
7
8
9
10
|
<!-- skins/tpl/menu.tpl begin --> Сегодня <?php echo formatDate(date("Y-m-d"), false) ?> года <ul> <li><a href="?page=main">Главная страница</a></li> <li><a href="?page=second">Вторая страница</a></li> </ul>
<!-- skins/tpl/menu.tpl end -->
|
Теперь подключим файл общих функций в систему
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
|
<?php
/** * We connect a configuration file * Подключаем конфигурационный файл */ include './config.php';
/** * We connect a file of the language * Подключаем языковой файл */ include './language/'. IRB_LANGUAGE .'.php'; /** * Получаем файл переменных * Receive a variables file */ include './variables.php'; /** * We connect a file of the general functions * Подключаем файл общих функций */ include './libs/default.php';
ob_start();
/** * Подключаем меню * Includes the menu */ include './skins/tpl/menu.tpl';
/** * The switch of modules * Переключатель страниц */ switch($page) { /** * Подключаем модуль приветствия * Includes the greeting module */ case 'main': include './modules/main/index.php'; include './skins/tpl/main/show.tpl'; break; /** * Подключаем модуль второй страницы * Includes the module of the second page */ case 'second': include './modules/second/index.php'; include './skins/tpl/second/show.tpl'; break; /** * Подключаем модуль приветствия по умолчанию * Includes the greeting module */ default: include './modules/main/index.php'; include './skins/tpl/main/show.tpl'; break; }
$content = ob_get_contents(); ob_end_clean(); /** * Подключаем главный шаблон * Includes the basic template */ include './skins/tpl/index.tpl';
|
и запустим.
Работает? Славно.
Но что мы видим? А видим мы логику в шаблоне вывода. Это предательство и нативе-синтаксис. Не пойдет.
|