-
Notifications
You must be signed in to change notification settings - Fork 7
/
bx_cn_autoload.sublime-snippet
119 lines (110 loc) · 3.72 KB
/
bx_cn_autoload.sublime-snippet
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
<snippet>
<content><![CDATA[
<?php
/*
* CNAutoLoad
*
* Автозагрузка js и css скриптов из указанной папки в шаблон сайта,
* через стандартные функции битрикса AddHeadScript и SetAdditionalCSS
* Сделано для облегчения работы с сайтом, имеющим вагон шаблонов.
* @version 0.0.2 2013-11-28
* @author sallee AT info-expert.ru
* ---------------------------------------
* Использование:
* Положить скрипт в папку /bitirx/php_interface/
* Подключить в init.php:
* require_once ('cn_autoloader.php');
* В шаблоне в том месте, где должны выводиться скрипты пишем:
* <?CNAutoLoad(array('/res/js/', '/res/css/'), array('main', '--', 'ololo_'));?>
*/
/**
* Функция автозагрузки файлов
* @param array \$srcs - Массив с путями к папкам от корня сайта
* @param array \$arRemarks - Массив с префиксами
*/
function CNAutoLoad(\$srcs=array(), \$arRemarks=array()) {
if (!is_array(\$arRemarks)) {
\$arRemarks = array();
}
// Добавляем '_' и '-' не зависимо от настроек вызова.
\$arRemarksM = array_merge(\$arRemarks, array('_', '-'));
foreach(\$srcs as \$src) {
CNAddHeadElement(\$src, \$arRemarksM);
}
}
/**
* Основная функция CNAddHeadElement
* @param string \$src - Путь к файлу или папке
* @param array \$arRemarks - Префиксы исключаемых файлов
* @return void
* @global \$APPLICATION
* @author sallee AT info-expert.ru
*/
function CNAddHeadElement(\$src, \$arRemarks) {
global \$APPLICATION;
\$arScriptExt = array('js', 'css');
if (empty(\$src))
return;
if (strpos(\$src, '/') !== 0)
\$src = '/'.\$src;
if (substr(\$src, -1) == '/') {
\$src = substr(\$src, 0, -1);
}
\$fullSrc = \$_SERVER['DOCUMENT_ROOT'].\$src;
if (file_exists(\$fullSrc) && is_readable(\$fullSrc)) {
if (is_dir(\$fullSrc)) {
if (substr(\$src, -1) != '/') {
\$src = \$src.'/';
}
if (\$dh = opendir(\$fullSrc)) {
while((\$file=readdir(\$dh)) !== false) {
if (in_array(\$file, array('.','..')) || is_dir(\$fullSrc.'/'.\$file))
continue;
\$ext = ToLower(end(explode('.', \$file)));
if (in_array(\$ext, \$arScriptExt) && !strposArr(\$file, \$arRemarks)) {
if (\$ext == 'js') {
\$APPLICATION->AddHeadScript(\$src.\$file);
}
if (\$ext == 'css') {
\$APPLICATION->SetAdditionalCSS(\$src.\$file);
}
}
}
closedir(\$dh);
}
}
else {
\$ext = ToLower(end(explode('.', \$src)));
if (in_array(\$ext, \$arScriptExt) && !strposArr(\$file, \$arRemarks)) {
if (\$ext == 'js') {
\$APPLICATION->AddHeadScript(\$src);
}
if (\$ext == 'css') {
\$APPLICATION->SetAdditionalCSS(\$src);
}
}
}
}
}
/**
* Небольшое улучшение strpos()
* @param string \$str - строка в кторой будем искать
* @param array \$arr - массив, совпадения с которым ищем.
* @return bool
* @author pafnuty <pb@info-expert.ru>
*/
function strposArr(\$str, \$arr) {
foreach(\$arr as \$v) {
if((\$pos = strpos(\$str, \$v)) !== false && \$pos == '0') {
return true;
}
}
return false;
}
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<tabTrigger>bx_cn_autoload</tabTrigger>
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<!-- <scope>source.python</scope> -->
<description>Автозагрузка js и css скриптов из папки</description>
</snippet>