cotonti.com : Вставка JS на определенной странице https://www.cotonti.com Последние сообщения в теме Cotonti en Mon, 13 Oct 2025 05:29:18 -0000 Roffun Варианты разные бывают, в зависимости от ситуации. Часто используется переменная $env. А если это свой модуль или плагин, и хотите максимально кастомизировать вывод css js без привязок к другим переменным, сделайте свою переменную или функцию, которая будет видимая только в определенных местах, нужных вам, и уже через нее выводите c помощью Resources (linkFileFooter, linkFilе, embed, embedFooter) на выбор.

Если это переменная, то делаете ее видимой во всех нужных файлах, например $myvar = 'myvalue'. Если это функция, то в файле функций перечисляете нужные места видимости, например ($env['ext'], $env['location'])  и т.д, отдавая свой вариант $myvar = "myvalue" в нужном месте:


if ($myvar == 'myvalue'){   

    Resources::linkFilе($cfg['themes_dir'] . '/' . $usr['theme'] . '/css/my.css', 'css', '15');     

    Resources::linkFilе($cfg['themes_dir'] . '/' . $usr['theme'] . '/js/my.js', 'js', '20');

}

То же самое функция:

if (myfunction() == 'myvalue'){   

    Resources::linkFilе($cfg['themes_dir'] . '/' . $usr['theme'] . '/css/my.css', 'css', '15');     

    Resources::linkFilе($cfg['themes_dir'] . '/' . $usr['theme'] . '/js/my.js', 'js', '20');

}

]]>
вс, 30 сен 2018 10:58:27 -0000
Виктор а как прописать в самом плагине например в довольном плагине "plug" в файле plug.rc.php, условие, чтоб файлы css и js подключались только тогда когда используется плагин "plug"

 

if($_GET['e'] == 'в каком плагине или модуле')

if($_GET['e'] == 'page' || $_GET['e'] == 'plug'  || $_GET['e'] == 'еще в каком то расширении')

Это?

]]>
вс, 30 сен 2018 09:11:58 -0000
kushelbek #42619 Roffun:

И js и css попадают в один тег:  {HEADER_HEAD}

Если включить в админке Объединять ресурсы header/footer (JS/CSS):

То останется 2 файла в  {HEADER_HEAD} (если посмотреть в режиме кода):

<link href="https://www.cotonti.com/rc.php?rc=global.название шаблона.css&amp;nc=1485362013" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="https://www.cotonti.com/rc.php?rc=global.название шаблона.js&amp;nc=1485362013"></script>

Заменяете {HEADER_HEAD} в header.tpl на 

<link href="https://www.cotonti.com/rc.php?rc=global.название шаблона.css&amp;nc=1485362013" type="text/css" rel="stylesheet" />

А в футер переносите

<script type="text/javascript" src="https://www.cotonti.com/rc.php?rc=global.название шаблона.js&amp;nc=1485362013"></script>

Но это перенесет все скрипты, в том числе JQuery

Понял, спасибо, будем пробовать =)

]]>
вт, 31 янв 2017 14:43:43 -0000
Roffun И js и css попадают в один тег:  {HEADER_HEAD}

Если включить в админке Объединять ресурсы header/footer (JS/CSS):

То останется 2 файла в  {HEADER_HEAD} (если посмотреть в режиме кода):

<link href="https://www.cotonti.com/rc.php?rc=global.название шаблона.css&amp;nc=1485362013" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="https://www.cotonti.com/rc.php?rc=global.название шаблона.js&amp;nc=1485362013"></script>

Заменяете {HEADER_HEAD} в header.tpl на 

<link href="https://www.cotonti.com/rc.php?rc=global.название шаблона.css&amp;nc=1485362013" type="text/css" rel="stylesheet" />

А в футер переносите

<script type="text/javascript" src="https://www.cotonti.com/rc.php?rc=global.название шаблона.js&amp;nc=1485362013"></script>

Но это перенесет все скрипты, в том числе JQuery

]]>
вт, 31 янв 2017 12:51:28 -0000
kushelbek #42617 Roffun:
#42616 kushelbek:

Такой вопрос, а как плагины грузить в футере(со стилями по умолчанию)?

Чтобы в футере была ссылка на файл, то можно использовать функцию:

Resources::linkFileFooter($cfg['themes_dir'] . '/' . $usr['theme'] . '/css/mycss.css','css','2');

 Саму функцию можно посмотреть в /system/resources.php  строка ~ 639

Чтобы в футере было само тело файла:

($cfg['themes_dir'] . '/' . $usr['theme'] . '/css/mycss.css','css','2');

Но css с точки зрения валидации нужно грузить в head, а в футере их можно через js подгружать, тогда второй параметр изменяете на js, а сам код css нужно сконвертировать в js.

я имел ввиду вот эти скрипты по умолчанию и скрипты плагинов.

где нужно поправить что бы они грузились в футере? Заранее спасибо.

 

]]>
вт, 31 янв 2017 06:57:02 -0000
Roffun #42616 kushelbek:

Такой вопрос, а как плагины грузить в футере(со стилями по умолчанию)?

Чтобы в футере была ссылка на файл, то можно использовать функцию:

Resources::linkFileFooter($cfg['themes_dir'] . '/' . $usr['theme'] . '/css/mycss.css','css','2');

 Саму функцию можно посмотреть в /system/resources.php  строка ~ 639

Чтобы в футере было само тело файла:

($cfg['themes_dir'] . '/' . $usr['theme'] . '/css/mycss.css','css','2');

Но css с точки зрения валидации нужно грузить в head, а в футере их можно через js подгружать, тогда второй параметр изменяете на js, а сам код css нужно сконвертировать в js.

]]>
пн, 30 янв 2017 17:56:04 -0000
kushelbek Такой вопрос, а как плагины грузить в футере(со стилями по умолчанию)?

]]>
пн, 30 янв 2017 14:34:43 -0000
Leshkens Я на самом деле так и не понял как грамотно проверять условия подключения в файле theme.rc.php. Ведь переменная $env там не работает. Проверять по URL как предложил Roffun?

Добавлено 3 дня спустя:

Разобрался. Разделы в theme.rc.php можно проверять например вот так:

if ($_GET['с'] == 'portfolio') {
  Resources::linkFile($cfg['themes_dir'].'/'.$usr['theme'].'/css/portfolio.css');
}

Здесь в разделе "porfolio" (и корневых страницах) грузим файл стилей portfolio.css. В подразделах работать не будет, потому что подразделы нужно проверять непосредственно.

 

Модули или плагины можно проверять так:

if ($_GET['e'] == 'page') {
  Resources::linkFile($cfg['themes_dir'].'/'.$usr['theme'].'/css/page.css');
}

Здесь во всех разделах и страницах модуля page будет грузиться файл page.css.

 

Проверять по URI (например если нужно загружать файл стилей и в подразделах) можно вот так:

if (mb_strpos($sys['uri_curr'], 'studio') !== false) {
  Resources::linkFile($cfg['themes_dir'].'/'.$usr['theme'].'/js/studio.js');
}

Здесь везде, когда в URI есть "studio", будет подгружаться файл studio.js. Например http://test.dev/studio/portfolio/sites

 

По алиасу страницы:

if ($_GET['al'] == 'big-hall') {
  Resources::linkFile($cfg['themes_dir'].'/'.$usr['theme'].'/css/big-hall.css');
}

 

]]>
чт, 24 ноя 2016 18:12:11 -0000
kushelbek #42207 Leshkens:

Проверять имя категории еще можно вот так: 

<!-- IF {PHP.c} == "portfolio" -->
<script src="https://www.cotonti.com/portfolio.js"></script>
<!-- ENDIF -->

 

#42205 Roffun:

<!-- IF {PHP.env.location} == 'list' -->

<script src="https://www.cotonti.com/simple.js"></script>

<!-- ENDIF -->

Спасибо и так и так работает!
]]>
пт, 21 окт 2016 06:38:02 -0000
Leshkens Проверять имя категории еще можно вот так: 

<!-- IF {PHP.c} == "portfolio" -->
<script src="https://www.cotonti.com/portfolio.js"></script>
<!-- ENDIF -->

 

]]>
чт, 20 окт 2016 19:18:42 -0000
Roffun <!-- IF {PHP.env.location} == 'list' -->

<script src="https://www.cotonti.com/simple.js"></script>

<!-- ENDIF -->

]]>
чт, 20 окт 2016 18:20:20 -0000
kushelbek #42001 Roffun:
#41999 kushelbek:
Конкретно вывести js файл на mysite.ru/lab/stranica не получаеятся =(

Заранее спасибо.

Попробуйте {PHP.pag.page_alias} или  {PHP.al}

<!-- IF {PHP.al} == "stranica" -->
  
<script src="https://www.cotonti.com/myscript.js"></script>
  
<!-- ENDIF -->

также можно по ID страницы {PHP.pag.page_id}  

<!-- IF {PHP.pag.page_id} == 222 -->
  
<script src="https://www.cotonti.com/myscript.js"></script>
  
<!-- ENDIF -->

 

День добрый, на другом сайте делаю все точно так же, но нужно вывести скрипт только в page.list.tpl

<!-- IF {PHP.list} == "category" -->
<script src="https://www.cotonti.com/simple.js"></script>
<!-- ENDIF -->

Что - то мне подсказывает, что я сделал что то не так...

]]>
чт, 20 окт 2016 14:53:55 -0000
Denisbox Спасибо! Я именно так и хочу реализовать. css слайдера буду подгружать в футере, так как он используется только на главной и то можно сказать в середине сайта, а основная часть css кода будет в внедрена в шапку.

]]>
пт, 16 сен 2016 12:34:59 -0000
Roffun #42083 Denisbox:
 

Понимаю, но я больше ориентируюсь на Google Page Speed :) Валидатор бонусов никаких не даёт, кроме самой валидации.

Лучше сделать и скорость и валидность. Css в таком случае в верхней части страницы подгружается основной, участвующий в рендеринге, а остальной подгружается в футере через js , такой вариант правильный с точки зрения рекомендации Google, только нужно учесть ситуацию с отключенным JS. 

]]>
пт, 16 сен 2016 11:40:54 -0000
Denisbox #42082 Roffun:

p.s. Css файлы рекомендуется размещать в head а не в body (спецификация W3C). Работать они будут в любом месте, но валидатору не нравится.

Понимаю, но я больше ориентируюсь на Google Page Speed :) Валидатор бонусов никаких не даёт, кроме самой валидации.

]]>
пт, 16 сен 2016 10:41:41 -0000
Roffun #42081 Denisbox:

Спасибо! сейчас буду пробовать!

P.S. работает, но мне кажется, что дольше идёт загрузка страницы...

P.S.2 Нет, всё работает отлично! Забыл тем же способом прикрепить ещё и js.

Спасибо!

p.s. Css файлы рекомендуется размещать в head а не в body (спецификация W3C). Работать они будут в любом месте, но валидатору не нравится.

Добавлено 10 минут спустя:

Размещайте файл css в head, а js в footer, например так:

if($cfg['mainurl'].'/' == $sys['canonical_url']){

    Resources::linkFile($cfg['themes_dir'].'/'.$usr['theme'] .'/slider/slider.css','css');
    Resources::linkFileFooter($cfg['themes_dir'].'/'.$usr['theme'].'/slider/slider.js');
​
}

 

]]>
пт, 16 сен 2016 09:33:10 -0000
Denisbox Спасибо! сейчас буду пробовать!

P.S. работает, но мне кажется, что дольше идёт загрузка страницы...

P.S.2 Нет, всё работает отлично! Забыл тем же способом прикрепить ещё и js.

Спасибо!

]]>
пт, 16 сен 2016 09:01:52 -0000
Roffun В файле rc.php не видно $env, попробуйте такой вариант:

if($cfg['mainurl'].'/' == $sys['canonical_url']){

Resources::linkFileFooter($cfg['themes_dir'].'/'.$usr['theme'].'/slider/slider.css');

}

 

]]>
пт, 16 сен 2016 08:25:53 -0000
Denisbox Что-то никак не пойму как правильно подключить файл только для главной.

В * rc.php прописываю конструкцию для слайдера: Resources::linkFileFooter($cfg['themes_dir'].'/'.$usr['theme'].'/slider/slider.css');

Это для вывода в футере.

А вот как подключить в футере и только на главной - никак не пойму.

Помогите пожалуйста.

P.S. сильно не пинайте я с програмной логикой на "ВЫ".

]]>
пт, 16 сен 2016 07:14:57 -0000
kushelbek #42006 Macik:

Каких-то особых «функций для страниц нет». Есть API у модуля `Page`, но там именно для работы со страницами (добавить/удалить и т.п.). 

 

 

Огромное спасибо, буду изучать и пробовать писать свои плагины для таких нужд. Объяснили все доступно и понятно =)

 

]]>
пн, 29 авг 2016 11:02:46 -0000
Macik dFooter#42002 kushelbek:
Такой вопрос, а где можо почитать про функции для страниц и про условия в файле name.rc.php?

Каких-то особых «функций для страниц нет». Есть API у модуля `Page`, но там именно для работы со страницами (добавить/удалить и т.п.). 

Про условия в файлах `*.rc.php` — общие правила примерно таковы:

1. этап — выбрать правильную функцию:

Файлы (js/css) подключаются через специальные функции. (Использовать жесткие ссылки прямо в TPL файлах, кроме случаев «сайт на коленке|быстро правлю чужой код» — не рекомендуется.)
Функции подключения файлов сейчас (версия >= 0.9.18) они убраны в отдельный класс Resources, вот тут есть их список с описанием (на англ.)). Суть их разнообразия сводится к следующему:
1. загружать ли указанный ресурс в заголовке (Resources::addFile или Resources::linkFile) страницы или в футере (Resources::linkFileFooter). Для CSS как правило используется заголовок, для JS зависит отзадач (может быть заголовок/футер/или прямо в код), см.ниже;
2. есть ли необходимость и возможность объединять данный файл в один пул при включенном режиме консолидации: если скрипт предполагается к загрузке на всех страницах — он может быть консолидирован (объединен с остальными такими же скриптами в один файл для ускорения загрузки). В этом случае используем Resources::addFile, ф-я обеспечит нам (по возможности) консолидированную загрузку. Если мы не хотим включать файл в консолидацию (например он грузится не на всех страницах) — используем Resources::linkFile (причем ее особенности таковы, что она по возможности попытается воткнуть ваш файл в заголовок страницы, а если он уже сформирован, то отправит его в футер). Если мы хотим грузить файл принудительно в футере (в некоторых случаях это ускаряет отображение страницы), используем уже указанный ранее Resources::linkFileFooter.
3. отдельным видом и для специфических задач служат функции Resources::embed и Resources::embedFooter. Они вставляют указанный код в вашу страницу прямо в виде скрипта.

2 этап — выбрать в каком файле эти ф-и вызывать. Об этом я писал выше. Для большинства случаев достаточно (и рекомендуется) использовать файлы *.rc.php (в конкретном расширении или теме оформления).

3 этап — определить непосредственно условия подключения (т.е. вызова указанных выше функций), если скрипт должен подключаться только в определенном случае/на определенных страницах. Тут нет однозначных правил. Просто используем системные переменные для определения «где мы, и что мы». Например:

$env['ext']; // содержит название текущего расширения
$env['location']; // условное название раздела сайта

// примеры...
// для админки
$env['location'] = 'administration';
$env['ext'] = 'admin';

// для плагинов
$env['location'] = 'plugins';

//для любых расширений
$env['ext'] = 'имя_расширения';

//страница логина
$env['location'] = 'users';
$env['ext'] = 'users';

// для главной страницы
$env['location'] = 'home';
$env['ext'] = 'index';

Кроме этого никто не мешает использовать переменные определенные в расширениях, как это было показано выше в примере для определения id страницы или ее псевдонима(альяса).

 

]]>
чт, 25 авг 2016 23:16:29 -0000
kushelbek #42001 Roffun:
#41999 kushelbek:
Конкретно вывести js файл на mysite.ru/lab/stranica не получаеятся =(

Заранее спасибо.

Попробуйте {PHP.pag.page_alias} или  {PHP.al}

<!-- IF {PHP.al} == "stranica" -->
  
<script src="https://www.cotonti.com/myscript.js"></script>
  
<!-- ENDIF -->

также можно по ID страницы {PHP.pag.page_id}  

<!-- IF {PHP.pag.page_id} == 222 -->
  
<script src="https://www.cotonti.com/myscript.js"></script>
  
<!-- ENDIF -->

 

Спасибо, все получилось.

Такой вопрос, а где можо почитать про функции для страниц и про условия в файле name.rc.php?

Заранее спасибо =)

]]>
пн, 22 авг 2016 06:34:21 -0000
Roffun #41999 kushelbek:
Конкретно вывести js файл на mysite.ru/lab/stranica не получаеятся =(

Заранее спасибо.

Попробуйте {PHP.pag.page_alias} или  {PHP.al}

<!-- IF {PHP.al} == "stranica" -->
  
<script src="https://www.cotonti.com/myscript.js"></script>
  
<!-- ENDIF -->

также можно по ID страницы {PHP.pag.page_id}  

<!-- IF {PHP.pag.page_id} == 222 -->
  
<script src="https://www.cotonti.com/myscript.js"></script>
  
<!-- ENDIF -->

 

]]>
вс, 21 авг 2016 22:03:47 -0000
kushelbek #41998 Macik:

если скрипт грузить в .rc файле, то лучше использовать класс `Resources`, который пришел на замену отдельным функциям `cot_rc_*`.

Кроме того (например если включена консолидация, или в зависимости от задач), возможно имеет смысл (при условии что код не большой) — использовать метод `Resources::addEmbed` или `Resources::embedFooter` для включения его в виде исходника прямо в текст страницы.

 

Спасибо за помощь, а можно пример того как это реализовать? Заранее спасибо

Добавлено 1 час спустя:

Задача впринципе стоит следующая есть json файл с данными, javascript выводит из него данные(отдельнога модуля или плагина не писалось). Это  все работает только на одной странице (mysite.ru/lab/stranica), так же есть отдельный tpl шаблон страницы. Конкретно вывести js файл на mysite.ru/lab/stranica не получаеятся =(

 

Заранее спасибо.

]]>
вс, 21 авг 2016 16:42:39 -0000
Macik Да можно в футере. 

Добавлю подробностей...

Вообще лучше размещать там где это более логично с точки зрения к какой области относится ваш скрипт (что он делает) .

Если он связан только с удобством отображения данных или юзеринтерфейсом в целом — можно и в футер. 
Если он связан с работой конкрентного расширения и влияет только на него — лучше в шаблон конкретного расширения.
Если это не просто «фикс/доработка», а функционал вашего расширения, то лучше в extname.rc.php, как писали выше.

Еще момент —
если скрипт грузить в .rc файле, то лучше использовать класс `Resources`, который пришел на замену отдельным функциям `cot_rc_*`.

Кроме того (например если включена консолидация, или в зависимости от задач), возможно имеет смысл (при условии что код не большой) — использовать метод `Resources::addEmbed` или `Resources::embedFooter` для включения его в виде исходника прямо в текст страницы.

 

]]>
вс, 21 авг 2016 14:50:53 -0000
kushelbek #41994 Wiper:

В name.rc.php

if(empty($_GET['e'])) // для того чтобы скрипты подключались только для главной страницы.
{
    cot_rc_add_file($cfg['themes_dir'].'/'.$usr['theme'].'/js/name.js');
}

В foter.tpl

 <!-- IF  {PHP.env.ext} == "index" -->

СКРИПТ

<!-- ENDIF -->

 

Спасибо, буду дома попробую.

А если не для главной странице то в footer.tpl прописать типа такого:

<!-- IF  {PHP.env.ext} == "my_page" -->
 
<script src="https://www.cotonti.com/myscript.js"></script>
 
<!-- ENDIF -->

или я не так понял?

]]>
вс, 21 авг 2016 12:08:16 -0000
Wiper В name.rc.php

if(empty($_GET['e'])) // для того чтобы скрипты подключались только для главной страницы.
{
    cot_rc_add_file($cfg['themes_dir'].'/'.$usr['theme'].'/js/name.js');
}

В foter.tpl

 <!-- IF  {PHP.env.ext} == "index" -->

СКРИПТ

<!-- ENDIF -->

 

]]>
пт, 19 авг 2016 21:03:47 -0000
Виктор попрбуйте заключить скрипт в условие которое например будет срабатвать в определенном тпл

]]>
пт, 19 авг 2016 18:39:29 -0000
kushelbek Добрый день, есть необходимость использовать js только на 1ой странице, имееться ввиду, что бы скрипт срабатывал на определенной странице, а на остальных он не работал. Не могу понять как это реализовать, заранее спасибо.

]]>
пт, 19 авг 2016 13:46:58 -0000