Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37

Указать на php, что скрипты из массива должны загружаться асинхронно

13.09.2015, 09:55. Показов 2237. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно подгружать скрипты на сайте асинхронно (много и все задействованы в работе сайта).
Проблемы бы не было, если бы выводились скрипты просто на странице, например, так:
HTML5
1
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" async></script>
- все замечательно работает.
Но скрипты подгружаются вот этим куском кода из php файла.

PHP
1
2
3
4
5
6
7
8
9
10
private $_mootoolsScripts = array(
        '/media/system/js/core.js',
        '/media/system/js/core-uncompressed.js',
        '/media/system/js/mootools-core.js',
        '/media/system/js/mootools-core-uncompressed.js',
        '/media/system/js/caption.js',
        '/media/system/js/caption-uncompressed.js',
        '/media/system/js/mootools-more.js',
        '/media/system/js/mootools-more-uncompressed.js'
    );
Как здесь прописать этот async ?
Помогите, пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.09.2015, 09:55
Ответы с готовыми решениями:

Почему мы должны использовать XMLHttpRequest асинхронно
Блокирует поток UI или что? Кто Знает подскажите. За ранее спасибо.

Следует дать конкретную постановку, т.е. указать, какие классы должны быть реализованы, какие должны быть в ни
Задание: Перечень классов: квитанция, накладная, документ, чек; Порядок выполнения работы 1. Определить иерархию классов (в...

Как зашифровать серверные php скрипты что бы их не смог прочитать даже хостер?
Как зашифровать серверные php скрипты что бы их не смог прочитать даже хостер? Именно не конечный пользователь(посетитель), а хостер у...

24
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
13.09.2015, 11:08
Цитата Сообщение от juleczka Посмотреть сообщение
Но скрипты подгружаются вот этим куском кода из php файла.
PHP никакие javascript'ы не подгружает, их подгружает браузер. PHP может лишь вывести html-разметку, из которой браузер поймет, какие скрипты и откуда можно подгружать. То есть вот эту строку
HTML5
1
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" async></script>
Вам нужно вывести столько раз, сколько скриптов нужно подгрузить. Например циклом foreach по массиву $_mootoolsScripts.
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
13.09.2015, 11:48
Цитата Сообщение от juleczka Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
10
private $_mootoolsScripts = array(
 '/media/system/js/core.js',
 '/media/system/js/core-uncompressed.js',
 '/media/system/js/mootools-core.js',
 '/media/system/js/mootools-core-uncompressed.js',
 '/media/system/js/caption.js',
 '/media/system/js/caption-uncompressed.js',
 '/media/system/js/mootools-more.js',
 '/media/system/js/mootools-more-uncompressed.js'
 );

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
33
34
private $_mootoolsScripts = array(
    0 => array(
        'script' => '/media/system/js/core.js',
        'async' => false,
    ),
    1 => array(
        'script' => '/media/system/js/core-uncompressed.js',
        'async' => true,
    ),
    2 => array(
        'script' => '/media/system/js/mootools-core.js',
        'async' => true,
    ),
    3 => array(
        'script' => '/media/system/js/mootools-core-uncompressed.js',
        'async' => true,
    ),
    4 => array(
        '/media/system/js/caption.js',
        'async' => true,
    ),
    5 => array(
        '/media/system/js/caption-uncompressed.js',
        'async' => false,
    ),
    6 => array(
        '/media/system/js/mootools-more.js',
        'async' => false,
    ),
    7 => array(
        '/media/system/js/mootools-more-uncompressed.js',
        'async' => false,
    ),
)
Ну а дальше надо переписать вывод этих скриптов:

PHP
1
2
3
<?php foreach($_mootoolsScripts as $script): ?>
    <script type="text/javascript" src="<?php echo $script['script']; ?>" <?php echo $script['async'] ? 'async' : ''; ?>></script>
<?php endforeach; ?>
это я так, несколько утрировал, я видел, что массив $_mootoolsScripts приватный, но общий принцип думаю понятен
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
13.09.2015, 12:11  [ТС]
Спасибо за ответ и поправку выраженных мыслей, pav1uxa. Все верно. Вывести html-разметку, где будут не только сами скрипты, но и параметр async. (скрипты выводятся прекрасно).
Смотрю foreach и array_walk Но как-то не получается никак, а может неправильно делаю. Выводится за </script> А нужно внутри <script async>
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
13.09.2015, 12:27
Цитата Сообщение от juleczka Посмотреть сообщение
Смотрю foreach и array_walk Но как-то не получается никак, а может неправильно делаю. Выводится за </script> А нужно внутри <script async>
Так я же вам уже написал рабочий вариант
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
13.09.2015, 12:30  [ТС]
mack_91, спасибо, прояснили ситуацию)
Единственное, никак не пойму, куда вставлять теперь foreach

Структура следующая: index.php имеет строчку
PHP
1
2
3
defined('_JEXEC') or die('Restricted access');
require_once(dirname(__FILE__) . '/php/_code.php');
?><!doctype html>
/php/_code.php в свою очередь ссылается
PHP
1
2
// include helper classes
require_once(dirname(__FILE__) . DS . 'template.php');
а в template.php лежит только данный массив
PHP
1
2
3
4
5
6
7
8
9
10
 private $_mootoolsScripts = array(
        '/media/system/js/core.js',
        '/media/system/js/core-uncompressed.js',
        '/media/system/js/mootools-core.js',
        '/media/system/js/mootools-core-uncompressed.js',
        '/media/system/js/caption.js',
        '/media/system/js/caption-uncompressed.js',
        '/media/system/js/mootools-more.js',
        '/media/system/js/mootools-more-uncompressed.js'
    );
Добавлено через 52 секунды
mack_91, не видела вашего первого поста)
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
13.09.2015, 12:33
Цитата Сообщение от juleczka Посмотреть сообщение
Структура следующая: index.php имеет строчку
Вероятно перебор массива как-раз в index.php ищите по фразе $_mootoolsScripts
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
13.09.2015, 12:41  [ТС]
Я уже по всему сайту искала. Перепроверила еще раз. И так $_mootoolsScripts и так mootoolsScripts - только один файл template.php
Только в одном месте. Где массив.
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
13.09.2015, 12:47
Тогда пойдите от обратного.
1. Откройте в браузере исходный код страницы, посмотрите в каком месте эти скрипты (шапка или футер)
2. Откройте шаблон и найдите предполагаемое место. Посмотрите, что там написано

а итоге все равно найдется место, где будет формироваться этот список. Еще можно поискать по фразе "<script" или "script" (вторая плоха тем, что могут быть переменные названные таким же словом, и будет много мусора)
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
13.09.2015, 13:11  [ТС]
1. Исходный код страницы показывает, что в шапке:
HTML5
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
<!doctype html>
<head>
         <base href="" />
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="keywords" content="" />
  <meta name="description" content="" />
  <title></title>
  <link href="/templates/idiv/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />
  <link rel="stylesheet" href="/plugins/system/imagesizer/lbscripts/slimbox/slimbox.css" type="text/css" media="screen"  />
  <link rel="stylesheet" href="/modules/mod_ariimageslider/mod_ariimageslider/js/themes/nivo-slider.css" type="text/css" />
  <link rel="stylesheet" href="/modules/mod_ariimageslider/mod_ariimageslider/js/themes/default/style.css" type="text/css" />
  <link rel="stylesheet" href="/plugins/system/rokbox/themes/light/rokbox-style.css" type="text/css" />
  <link rel="stylesheet" href="/templates/idiv/css/template.css?1442119507" type="text/css" media="all"  />
  <link rel="stylesheet" href="/templates/idiv/css/typography.css?1431325917" type="text/css" media="all"  />
  [B]<script src="/media/system/js/mootools-core.js" type="text/javascript"></script>
  <script src="/media/system/js/core.js" type="text/javascript"></script>
  <script src="/media/system/js/caption.js" type="text/javascript"></script>
  <script src="/media/system/js/mootools-more.js" type="text/javascript"></script>
  <script src="/plugins/system/imagesizer/lbscripts/slimbox/slimbox.js" type="text/javascript"></script>
  <script src="/modules/mod_ariimageslider/mod_ariimageslider/js/jquery.min.js" type="text/javascript"></script>
  <script src="/modules/mod_ariimageslider/mod_ariimageslider/js/jquery.noconflict.js" type="text/javascript"></script>
  <script src="/modules/mod_ariimageslider/mod_ariimageslider/js/jquery.nivo.slider.js" type="text/javascript"></script>
  <script src="/plugins/system/rokbox/rokbox.js" type="text/javascript"></script>[/B]
 
</head>
в самом шаблоне шапка выглядит вот так;
<?php
defined('_JEXEC') or die('Restricted access');
require_once(dirname(__FILE__) . '/php/_code.php');
?><!doctype html>
<html class="no-js" lang="<?php echo $tpl->lang;?>"> <!--<![endif]-->
<head>
<?php unset($this->_generator); ?>
<jdoc:include type="head" />
</head>

Кажется, нашла по <script опять в template.php
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
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
 public function includeJS($filename, $prefix = '')
    {
        $mdate  = $this->params->get('files_mdate', self::PARAM_DEFAULT_FILES_MDATE);
        $prefix = (strlen($prefix) ? $prefix . '_' : '');
        $JSPath = $this->jsFull . DS . $prefix . $filename;
 
        if ($filemtime = $this->_checkFile($JSPath)) {
            $filePath = $this->js . '/' . $prefix . $filename;
            if ($mdate == '1' || $mdate == '3') {
                $filePath .= '?' . $filemtime;
            }
            $this->_addScript($filePath);
            return true;
        }
 
        return false;
    }
 
 
    public function renderJS()
    {
        $output = array();
        foreach ($this->_scriptList as $path=> $script) {
            $output[] = '<script src="' . $path . '" type="text/javascript"></script>';
        }
 
        $lnEnd  = $this->_document->_getLineEnd();
        $tab    = $this->_document->_getTab();
        $tagEnd = ' />';
        $buffer = '';
 
        // Generate script file links
        foreach ($this->_scriptList as $strSrc => $strAttr) {
            $buffer .= $tab . '<script src="' . $strSrc . '"';
            if (!is_null($strAttr['mime'])) {
                $buffer .= ' type="' . $strAttr['mime'] . '"';
            }
            if ($strAttr['defer']) {
                $buffer .= ' defer="defer"';
            }
            if ($strAttr['async']) {
                $buffer .= ' async="async"';
            }
            $buffer .= '></script>' . $lnEnd;
        }
 
        // Generate script declarations
        foreach ($this->_scriptDeclarationsList as $type => $content) {
 
            $buffer .= $tab . '<script type="' . $type . '">' . $lnEnd;
 
            if ($this->_document->_mime != 'text/html') {
                $buffer .= $tab . $tab . '<![CDATA[' . $lnEnd;
            }
 
            $buffer .= $content . $lnEnd;
 
            if ($this->_document->_mime != 'text/html') {
                $buffer .= $tab . $tab . ']]>' . $lnEnd;
            }
            $buffer .= $tab . '</script>' . $lnEnd;
        }
 
        return $buffer;
    }
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
13.09.2015, 13:25
Попробуйте таким образом:

PHP
1
2
3
4
5
6
$_mootoolsScripts = array(
    '/media/system/js/core.js' => array(
        'async' => false,
    )
    //И так далее
)
должно заработать

Добавлено через 2 минуты
Джумла... брррр

Добавлено через 7 минут
точнее, не 'async' => false а 'async' => true
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
13.09.2015, 13:44  [ТС]
Поставила для одного скрипта
PHP
1
2
3
4
5
6
7
8
9
10
11
12
private $_mootoolsScripts = array(
        '/media/system/js/core.js'=> array(
        'async' => true,
    ),
        '/media/system/js/core-uncompressed.js',
        '/media/system/js/mootools-core.js',
        '/media/system/js/mootools-core-uncompressed.js',
        '/media/system/js/caption.js',
        '/media/system/js/caption-uncompressed.js',
        '/media/system/js/mootools-more.js',
        '/media/system/js/mootools-more-uncompressed.js'
    );
не работает - ничего не изменилось по отношению к core.js
Joomla бррр, согласна)
Как было без async так и осталось
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
13.09.2015, 13:46
Посмотрите, какие данные содержатся в
PHP
1
$this->_scriptList
и как они туда попадают
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
13.09.2015, 14:49  [ТС]
Для меня пока загадка, как они туда попадают. На всякий случай, вот сам файл template.php
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
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
<?php
defined('_JEXEC') or die('Restricted access');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
class JBlankTemplate
{    const FILE_SIZE_MIN     = 10;
    const JS_JQUERY_VERSION = '1.7.1';
    const PARAM_DEFAULT_FILES_MDATE    = 3;
    const PARAM_DEFAULT_META_GENERATOR = 'J!Blank Template by Joomla-book.ru';
 
    /**
     * Joomla mootools scripts that need to be disabled
     */
    private $_mootoolsScripts = array(
        '/media/system/js/core.js'=> array(
        'async' => true,
    ),
        '/media/system/js/core-uncompressed.js',
        '/media/system/js/mootools-core.js',
        '/media/system/js/mootools-core-uncompressed.js',
        '/media/system/js/caption.js',
        '/media/system/js/caption-uncompressed.js',
        '/media/system/js/mootools-more.js',
        '/media/system/js/mootools-more-uncompressed.js'
    );
    /**
     * @var JDocumentHTML
     */
    public $_document = null;
    /**
     * @var JRegistry
     */
    public $config = null;
    /**
     * @var JURI
     */
    public $url;
    /**
     * @var JApplication
     */
    public $app;
    /**
     * @var JMenu
     */
    public $menu;
    /**
     * @var JRegistry
     */
    public $params;
    /**
     * @var JUser
     */
    public $user;
    public $path;
    public $flash;
    public $img;
    public $css;
    public $js;
    public $pathFull;
    public $flashFull;
    public $imgFull;
    public $cssFull;
    public $jsFull;
    public $date;
    public $langDefault;
    public $lang;
    public $itemidDefault;
    public $itemidCurrent;
    public $isFront;
    public $title;
    public $sitename;
    public $req;
    public $isError;
    public $baseurl;
    public $dir;
    public $positionData = array();
    /**
     * @var array
     */
    private $_scriptList = array();
    /**
     * @var array
     */
    private $_scriptDeclarationsList = array();
    /**
     * JBlankTemplate constructor
     * Initialization internal vars
     * @param JDocument $thisTemplate
     */
    public function __construct(JDocument $thisTemplate)
    {
        // get links to global vars
        $this->_document = $thisTemplate;
        $this->config    = JFactory::getConfig();
        $this->url       = JFactory::getURI();
        $this->app       = JFactory::getApplication();
        $this->menu      = $this->app->getMenu();
        $this->params    = $this->app->getTemplate(true)->params;
        $this->user      = JFactory::getUser();
 
        // relative paths
        $this->path  = $this->_getTemplatePath();
        $this->flash = $this->path . '/flash';
        $this->img   = $this->path . '/images';
        $this->css   = $this->path . '/css';
        $this->js    = $this->path . '/js';
 
        // absolute paths
        $this->pathFull  = $this->_getTemplatePathFull();
        $this->flashFull = $this->pathFull . DS . 'flash';
        $this->imgFull   = $this->pathFull . DS . 'images';
        $this->cssFull   = $this->pathFull . DS . 'css';
        $this->jsFull    = $this->pathFull . DS . 'js';
 
        // init template vars
        $this->langDefault   = $this->_getLangDefault();
        $this->lang          = $this->_getLangCurrent();
        $this->itemidDefault = $this->_getItemidDefault();
        $this->itemidCurrent = $this->_getItemidCurrent();
        $this->isFront       = $this->_isFront();
        $this->title         = $this->_getTitle();
        $this->sitename      = $this->_getSitename();
        $this->req           = $this->_getRequest();
        $this->isError       = $this->_isErrors();
        $this->baseurl       = $this->_document->baseurl;
        $this->dir           = $this->_document->getDirection();
    }
    /**
     * Include JS in Top
     * @param $jsPath
     */
    public function includeTopJS($jsPath)
    {
        $this->_document->_scripts = $this->_array_unshift_assoc(
            $this->_document->_scripts, $jsPath, array(
                'mime'  => 'text/javascript',
                'defer' => false,
                'async' => false,
            )
        );
 
    }
 
    /**
     * Load all enabled JS files
     */
    public function loadJS()
    {
        if ((int)$this->params->get('js_modernizr', 0)) {
            $this->includeJS('libs/modernizr.min.js');
        }
 
        // jQuery Framework
        $jqueryCore   = false;
        $jsJqueryCore = (int)$this->params->get('js_jquery_core', 0);
        if ($jsJqueryCore != '0') {
            if ($jsJqueryCore == '1') {
                $jqueryCore = $this->js . '/libs/jquery.core.min.js?v=' . self::JS_JQUERY_VERSION;
 
            } elseif ($jsJqueryCore == '2') {
                $jqueryCore = 'http://yandex.st/jquery/' . self::JS_JQUERY_VERSION . '/jquery.min.js';
 
            } elseif ($jsJqueryCore == '3') {
                $jqueryCore =
                    'http://ajax.googleapis.com/ajax/libs/jquery/' . self::JS_JQUERY_VERSION . '/jquery.min.js';
            }
 
            if ((int)$this->params->get('js_jquery_tools', 0)) {
                $this->includeJS('libs/jquery.tools.js');
            }
 
            if ((int)$this->params->get('js_jquery_validate', 0)) {
                $this->includeJS('libs/jquery.validate.min.js');
                $this->includeJS('libs/jquery.validate-methods.min.js');
            }
 
            if ((int)$this->params->get('js_jquery_meiomask', 0)) {
                $this->includeJS('libs/jquery.meiomask.min.js');
            }
 
        }
 
        if ((int)$this->params->get('js_script', 1)) {
            $this->includeJS('functions.js');
            $this->includeJS('application.js');
        }
 
        if ((int)$this->params->get('js_bottom', 1)) {
            $this->_scriptList             = $this->_document->_scripts;
            $this->_scriptDeclarationsList = $this->_document->_script;
            $this->_document->_scripts     = array();
            $this->_document->_script      = array();
        }
 
        $jqueryCore && $this->includeTopJS($jqueryCore);
    }
 
     /**
     * Don't load Mootools framework (experimental!)
     * @param $force
     */
    public function removeMootools($force = false)
    {
        if (!(int)$this->params->get('js_joomla', 1) || $force) {
 
            foreach ($this->_mootoolsScripts as $path) {
                if (isset($this->_document->_scripts[$path])) {
                    unset($this->_document->_scripts[$path]);
                }
            }
 
            // experimental remove "JCaption init"
            $reg = "#window\.addEvent\('load',\s*function\(\)\s*\{\s*new\s*JCaption\(.*\);\s*}\)\s*;#ius";
            foreach ($this->_document->_script as $key=> $script) {
 
                $script = preg_replace($reg, " ", $script);
                if (!JString::trim($script)) {
                    unset($this->_document->_script[$key]);
                } else {
                    $this->_document->_script[$key] = $script;
                }
            }
 
        }
    }
 
    /**
     * Load template language files
     * @return bool
     */
    public function loadLanguages()
    {
        return JFactory::getLanguage()->load('tpl_jblank', JPATH_THEMES . '/jblank/language');
    }
 
    /**
     * Internal method for add Custom tag in <head />
     * @param $metaHTML
     * @return mixed
     */
    private function _addCustomTag($metaHTML)
    {
        return $this->_document->addCustomTag($metaHTML);
    }
 
    /**
     * Are there any errors on this page?
     * @return bool
     */
    private function _isErrors()
    {
        $buffer = $this->_document->getBuffer('message');
 
        if (is_array($buffer)) {
            $bufferWords = JString::trim(strip_tags(current($buffer['message'])));
        } else {
            $bufferWords = JString::trim(strip_tags($buffer));
        }
 
        return !empty($bufferWords);
    }
    /**
     * Include JS file in Joomla template
     * @param string $filename JS file name
     * @param string $prefix   JS prefix file name
     * @return bool
     */
    public function includeJS($filename, $prefix = '')
    {
        $mdate  = $this->params->get('files_mdate', self::PARAM_DEFAULT_FILES_MDATE);
        $prefix = (strlen($prefix) ? $prefix . '_' : '');
        $JSPath = $this->jsFull . DS . $prefix . $filename;
 
        if ($filemtime = $this->_checkFile($JSPath)) {
            $filePath = $this->js . '/' . $prefix . $filename;
            if ($mdate == '1' || $mdate == '3') {
                $filePath .= '?' . $filemtime;
            }
            $this->_addScript($filePath);
            return true;
        }
 
        return false;
    }
 
 
    public function renderJS()
    {
        $output = array();
        foreach ($this->_scriptList as $path=> $script) {
            $output[] = '<script src="' . $path . '" type="text/javascript"></script>';
        }
 
        $lnEnd  = $this->_document->_getLineEnd();
        $tab    = $this->_document->_getTab();
        $tagEnd = ' />';
        $buffer = '';
 
        // Generate script file links
        foreach ($this->_scriptList as $strSrc => $strAttr) {
            $buffer .= $tab . '<script src="' . $strSrc . '"';
            if (!is_null($strAttr['mime'])) {
                $buffer .= ' type="' . $strAttr['mime'] . '"';
            }
            if ($strAttr['defer']) {
                $buffer .= ' defer="defer"';
            }
            if ($strAttr['async']) {
                $buffer .= ' async="async"';
            }
            $buffer .= '></script>' . $lnEnd;
        }
 
        // Generate script declarations
        foreach ($this->_scriptDeclarationsList as $type => $content) {
 
            $buffer .= $tab . '<script type="' . $type . '">' . $lnEnd;
 
            if ($this->_document->_mime != 'text/html') {
                $buffer .= $tab . $tab . '<![CDATA[' . $lnEnd;
            }
 
            $buffer .= $content . $lnEnd;
 
            if ($this->_document->_mime != 'text/html') {
                $buffer .= $tab . $tab . ']]>' . $lnEnd;
            }
            $buffer .= $tab . '</script>' . $lnEnd;
        }
 
        return $buffer;
    }
 
    /**
     * Get the site name from configuration.php
     * @return string
     */
    private function _getSitename()
    {
        $sitename = $this->config->get('sitename', '');
        return $sitename;
    }
 
    /**
     * Get vars from request
     * @return stdClass
     */
    private function _getRequest()
    {
        $request         = new stdClass();
        $request->option = JRequest::getVar('option', '');
        $request->view   = JRequest::getVar('view', '');
        $request->layout = JRequest::getVar('layout', '');
        $request->tmpl   = JRequest::getVar('tmpl', 'index');
        $request->lang   = $this->lang;
        $request->Itemid = $this->itemidCurrent;
        return $request;
    }
 
    /**
     * Get relative template path (for browser)
     * @return string
     */
    private function _getTemplatePath()
    {
        $path = 'templates/' . $this->_document->template;
        return $path;
    }
 
    /**
     * Get absolute template path (filesystem)
     * @return string
     */
    private function _getTemplatePathFull()
    {
        $path = JPATH_THEMES . DS . $this->_document->template;
        return $path;
    }
 
    /**
     * Get default menu item
     * @return int
     */
    private function _getItemidDefault()
    {
        return $this->menu->getDefault()->id;
    }
 
    /**
     * Get current menu itemId
     * @return int
     */
    private function _getItemidCurrent()
    {
        if (isset($this->menu->getActive()->id)) {
            return $this->menu->getActive()->id;
        }
 
        return 0;
    }
 
    /**
     * Add JavaScript in document head
     * @param $src
     * @return JDocument
     */
    private function _addScript($src)
    {
        return $this->_document->addScript($src);
    }
 
    /**
     * Is current url homepage
     * @return bool
     */
    private function _isFront()
    {
        $isFront = ($this->itemidDefault == $this->itemidCurrent) ? true : false;
        return $isFront;
    }
 
    /**
     * Get current date
     * @param string $format
     * @return string
     */
    private function _getDateCurrent($format)
    {
        return $this->getDate($format);
    }
 
    /**
     * Get a date for a given format
     * @param string $format
     * @param string $time
     * @return string
     */
    public function getDate($format, $time = 'now')
    {
        $date       = JFactory::getDate('now', $this->config->get('offset'));
        $dateString = $date->toFormat($format);
        return $dateString;
    }
 
    /**
     * Get site language
     * @return string
     */
    private function _getLangDefault()
    {
        $lang = explode('-', $this->_document->getLanguage());
        return $lang[0];
    }
 
    /**
     * Get current site language
     * @return string
     */
    private function _getLangCurrent()
    {
        $lang = JRequest::getVar('lang', $this->langDefault);
        return $lang;
    }
 
    /**
     * Get current document title
     * @return string
     */
    private function _getTitle()
    {
        $title = $this->_document->getTitle();
        return $title;
    }
 
    /**
     * Check file exists and return last modified
     * @param $path
     * @return int|null
     */
    private function _checkFile($path)
    {
        if (JFile::exists($path) && filesize($path) > self::FILE_SIZE_MIN) {
            $mdate = filemtime($path);
            return $mdate;
        }
 
        return null;
    }
 
    /**
     * Unshift assoc array
     * @param array  $arr
     * @param string $key
     * @param mixed  $val
     * @return array
     */
    private function _array_unshift_assoc($arr, $key, $val)
    {
        $arr       = array_reverse($arr, true);
        $arr[$key] = $val;
        $arr       = array_reverse($arr, true);
        return $arr;
    }
}
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
13.09.2015, 15:02
Ну блин... А это для кого написано?

/**
* Joomla mootools scripts that need to be disabled
*/

Комментарий гласит, что скрипты, указанные в $_mootoolsScripts будут отключены на странице

Добавлено через 4 минуты
А вот тут вероятно следует заменить 'async' => false, на 'async' => true,

PHP
1
2
3
4
5
6
7
8
9
10
11
public function includeTopJS($jsPath)
    {
        $this->_document->_scripts = $this->_array_unshift_assoc(
            $this->_document->_scripts, $jsPath, array(
                'mime'  => 'text/javascript',
                'defer' => false,
                'async' => false,
            )
        );
 
    }
Добавлено через 4 минуты
А еще лучше (для более гибкой настройки) следует узнать что за класс находится в
PHP
1
$thisTemplate
(в конструкторе). И вот в нем точно есть список скриптов, которые подключаются. Узнать можно через var_dump например
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
13.09.2015, 15:41  [ТС]
Цитата Сообщение от mack_91 Посмотреть сообщение
mootools scripts that need to be disabled
увы, если убрать один из скриптов, то сайт перестает работать
Цитата Сообщение от mack_91 Посмотреть сообщение
А вот тут вероятно следует заменить 'async' => false, на 'async' => true,
уже заменяла. Не помогло.
Поиск через Total $thisTemplate или thisTemplate видит только в template.php
var_dump($thisTemplate); выводит NULL
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
13.09.2015, 15:49
А в методе includeTopJS() что выводит, если сделать
PHP
1
2
var_dump($this->_document);
var_dump($this->_document->_scripts);
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
14.09.2015, 07:37  [ТС]
Цитата Сообщение от mack_91 Посмотреть сообщение
А в методе includeTopJS() что выводит, если сделать
PHP
1
2
var_dump($this->_document);
var_dump($this->_document->_scripts);
Parse error: syntax error, unexpected '$this' (T_VARIABLE) in /.../php/template.php on line 217
Parse error: syntax error, unexpected '$this' (T_VARIABLE) in /.../php/template.php on line 218
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
14.09.2015, 12:46
Странно, вы когда прислали исходник файла, то метод был на строках 134 - 134. А тут ругается на строки 217 и 218. Вы точно в нужные места вставили вардамп? попробуйте еще после вардампа дописать exit;
0
4 / 4 / 1
Регистрация: 25.06.2015
Сообщений: 37
14.09.2015, 20:18  [ТС]
Просто сам файл намного больше и сюда никак не хотел вставляться - пришлось удалить все, что касается стилей, вот файл и похудел.
PHP
1
2
3
4
5
6
7
8
9
10
public function includeTopJS($jsPath)
    {
        var_dump $this->_document->_scripts = $this->_array_unshift_assoc(
            $this->_document->_scripts, $jsPath, array(
                'mime'  => 'text/javascript',
                'defer' => false,
                'async' => false,
            )
        ); 
    }
Parse error и все тут и exit добавляет еще один Parse error
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.09.2015, 20:18
Помогаю со студенческими работами здесь

Апач и PHP (не работают PHP скрипты)
Пожалуйста помогите разобраться... Только начал изучать PHP? столкнулся вот с такой проблемой: При просмотре локальной страницы first.php...

Файл php, который будет загружаться
Возникла проблема. Хочу сделать файл, например, moipoisk.php, чтобы он при вводе в адресную строку , например, urlsite.com/moipoisk.php ,...

инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций.
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. 2 У...

Что делать, если комп не загружается чрез винт и привод, а пишет, что будет загружаться чрез флопи
поставил новый dvd привод и добавил оперативки, теперь комп не хочет загружаться через винчестер или dvd привод. Из-за чего?

Php скрипты
Вот сайт, на котором реализованны php скрипты. Вот: http://user014.dtc.tsput.ru/PHP.html Мне нужны скрипты с лабораторной работы №17:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru