Cotonti / Open Source PHP Content Management FrameworkContent Management Framework

Foren / National / Russian / Тех. поддержка / Вставка JS на определенной странице

12NächsteLetzte

Вставка JS на определенной странице

kushelbek
#1 19. August 2016, 13:46

Добрый день, есть необходимость использовать js только на 1ой странице, имееться ввиду, что бы скрипт срабатывал на определенной странице, а на остальных он не работал. Не могу понять как это реализовать, заранее спасибо.


Dieser Beitrag wurde von kushelbek (am 19. August 2016, 14:40, vor 5 Jahre) bearbeitet
Виктор
#2 19. August 2016, 18:39

попрбуйте заключить скрипт в условие которое например будет срабатвать в определенном тпл

Wiper
#3 19. August 2016, 21:03

В 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 -->

 

kushelbek
#4 21. August 2016, 12:08
#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="myscript.js"></script>
 
<!-- ENDIF -->

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

Macik
#5 21. August 2016, 14:50

Да можно в футере. 

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

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

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

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

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

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
kushelbek
#6 21. August 2016, 16:42
#41998 Macik:

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

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

 

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

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

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

 

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


Dieser Beitrag wurde von kushelbek (am 21. August 2016, 17:48, vor 5 Jahre) bearbeitet
Roffun
#7 21. August 2016, 22:03
#41999 kushelbek:
Конкретно вывести js файл на mysite.ru/lab/stranica не получаеятся =(

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

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

<!-- IF {PHP.al} == "stranica" -->
  
<script src="myscript.js"></script>
  
<!-- ENDIF -->

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

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

 

Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
kushelbek
#8 22. August 2016, 06:34
#42001 Roffun:
#41999 kushelbek:
Конкретно вывести js файл на mysite.ru/lab/stranica не получаеятся =(

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

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

<!-- IF {PHP.al} == "stranica" -->
  
<script src="myscript.js"></script>
  
<!-- ENDIF -->

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

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

 

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

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

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

Macik
#9 25. August 2016, 23:16
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 страницы или ее псевдонима(альяса).

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F

Dieser Beitrag wurde von Macik (am 3. Oktober 2016, 23:33, vor 5 Jahre) bearbeitet
kushelbek
#10 29. August 2016, 11:02
#42006 Macik:

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

 

 

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

 

Denisbox
#11 16. September 2016, 07:14

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

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

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

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

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

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

contact: fonts (at) otlab . ru
Roffun
#12 16. September 2016, 08:25

В файле rc.php не видно $env, попробуйте такой вариант:

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

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

}

 

Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
Denisbox
#13 16. September 2016, 09:01

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

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

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

Спасибо!

contact: fonts (at) otlab . ru

Dieser Beitrag wurde von Denisbox (am 16. September 2016, 09:23, vor 5 Jahre) bearbeitet
Roffun
#14 16. September 2016, 09:33
#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');
​
}

 

Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts

Dieser Beitrag wurde von Roffun (am 16. September 2016, 09:52, vor 5 Jahre) bearbeitet
Denisbox
#15 16. September 2016, 10:41
#42082 Roffun:

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

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

contact: fonts (at) otlab . ru

12NächsteLetzte