Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как устранить конфликт скриптов на Joomla3 (https://javascript.ru/forum/dom-window/78590-kak-ustranit-konflikt-skriptov-na-joomla3.html)

alex_chz 08.10.2019 08:42

Как устранить конфликт скриптов на Joomla3
 
Здравствуйте, сайт на последней версии джумлы 3.7.... На некоторых страницах поставил калькулятор на основе библиотеке ui. На всех страницах с калькулятором подключил скрипты, прямо в материале
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js"></script>

Они конфликтуют с со скриптами от самой джумлы и слайдер(ползунок не работает). Как решить этот конфликт?
Поставил временно плагин System - jQuery Easy и отключил при помощи него эти страницы (теперь слайдер там работает, ноглавное меню не хочет открываться и в мобильной версии тоже не корректно работает(меню)
Пример страницы https://4zaim.kz/mfo/kredit-7

Побывал это тоже,
- заменить все $ на jQuery
и ставил noConflict
Нечего не меняется, только ошибки начинают ссыпаться в консоле

Проблема с версиями jQuery - это понятно. Но если отключать версии джумлы, то меню вообще не работает, если отключать версию слайдера, то не работает слайдер

<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

Эти скрипты залил на хост и подключил их через плагин System - jQuery Easy как локальные. То есть он поменял все базовые скрипты на эти. Но ползунки так и не заработали. Помогите кто нибудь, у кого была проблема с этими скриптами, как их сдружить?

laimas 08.10.2019 09:23

Если нет возможности использовать плагины под новую версию jQuery, то вместо старой JQ используйте jQuery migrate.

alex_chz 08.10.2019 09:27

Цитата:

Сообщение от alex_chz
Если нет возможности использовать плагины под новую версию jQuery, то вместо старой JQ используйте jQuery migrate.

А где её подключить не подскажите? В индекс пхп шаблона, или где то в другом месте. И какую именно версию миграт подключать?

laimas 08.10.2019 09:32

Сначала подключается JQ, затем JQ migrate, затем все что использует JQ, типа:

<script src="....../jquery-2.0.min.js"></script>
<script src="....../jquery-migrate-1.2.1.min.js"></script>
<script src="....../jquery-ui.min.js"></script>
.... и т.д.

рони 08.10.2019 09:35

alex_chz,
jquery грузят один раз!!! (желательно выше версию!!!)
jquery-ui грузят один раз!!!
порядок загрузки
1.jquery
2.jquery-ui
3.плагины на основе jquery и jquery-ui
4. все скрипты использующие 1,2,3
5.все остальные скрипты.

alex_chz 08.10.2019 10:13

Цитата:

Сообщение от laimas (Сообщение 513629)
Сначала подключается JQ, затем JQ migrate, затем все что использует JQ, типа:

<script src="....../jquery-2.0.min.js"></script>
<script src="....../jquery-migrate-1.2.1.min.js"></script>
<script src="....../jquery-ui.min.js"></script>
.... и т.д.

Это прописал в материале, не работает

Цитата:

Сообщение от рони (Сообщение 513630)
alex_chz,
jquery грузят один раз!!! (желательно выше версию!!!)
jquery-ui грузят один раз!!!
порядок загрузки
1.jquery
2.jquery-ui
3.плагины на основе jquery и jquery-ui
4. все скрипты использующие 1,2,3
5.все остальные скрипты.

Я бы и рад , но я так и не нашел в джумле где прописывается порядок этих скриптов. Подскажите файл. В шаблоне их нет

laimas 08.10.2019 10:20

Цитата:

Сообщение от alex_chz
где прописывается порядок этих скриптов

В CMS, в частности Джумле, подключение файлов определяется правилами, все это описано в сети, просто сделайте поиск.

alex_chz 08.10.2019 10:41

Да я уже всё перерыл, не где не могу найти. Все пишут что в шаблоне (в некотрых, от разных вебстудий, они там есть), у меня там нет. А вот файлы типо head.php - не понятно где. Те что находил похожие, нечего по скриптам в них нет.

laimas 08.10.2019 10:51

Цитата:

Сообщение от alex_chz
Да я уже всё перерыл, не где не могу найти.

Вряд ли, если сразу же, например https://zaurmag.ru/joomla/podklyuche...-v-joomla.html

alex_chz 08.10.2019 11:19

))Да я там читал. То же шаблон индекс. Который у меня уже есть и там подключаются откудато скрипты и совсем не так как в статье. Что по статье, я уже вставлял эти скрипты в хеад в шаблоне и через пхп и просто через скрипт, они появляются в хеде и что?? Как отключить уже подключенные до меня? Вот это найдите)

alex_chz 08.10.2019 11:23

Вот мой индекс шаблона
<?php
/*
 * ------------------------------------------------------------------------
 * Copyright (C) 2009 - 2013 The YouTech JSC. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: The YouTech JSC
 * Websites: http://www.smartaddons.com - http://www.cmsportal.net
 * ------------------------------------------------------------------------
*/
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
header('X-UA-Compatible: IE=edge');

// Object of class YtTemplate
$doc     = JFactory::getDocument();
$app     = JFactory::getApplication();
$option = $app->input->get('option');

// Check yt plugin
if(!defined('YT_FRAMEWORK')) throw new Exception(JText::_('INSTALL_YT_PLUGIN'));
if(!defined('J_TEMPLATEDIR') )define('J_TEMPLATEDIR', JPATH_SITE.J_SEPARATOR.'templates'.J_SEPARATOR.$this->template);

// Include file: frame_inc.php
 include_once (J_TEMPLATEDIR.J_SEPARATOR.'includes'.J_SEPARATOR.'frame_inc.php');

// Check direction for html
$dir = ($doc->direction == 'rtl') ? ' dir="rtl"' : '';

/** @var YTFramework */
$responsive = $yt->getParam('layouttype');
$favicon     = $yt->getParam('favicon');
$layoutType    = $yt->getParam('layouttype');
$preloader    = $yt->getParam('preloader');
//Coming Soon
$this->baseUrl = JURI::base();
if($yt->getParam('comingsoon_mode')) header("Location: ".$this->baseUrl."?tmpl=comingsoon");

?>
<!DOCTYPE html>
<html <?php echo $dir; ?> lang="<?php echo $this->language; ?>">
<head>
    <jdoc:include type="head" />

    <meta name="HandheldFriendly" content="true"/>
    <meta name="format-detection" content="telephone=no">
    <meta name="apple-mobile-web-app-capable" content="YES" />

     <!-- META FOR IOS & HANDHELD -->
    <?php if($responsive=='res'): ?>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"/>
    <?php endif ?>

    <!-- LINK FOR FAVICON -->
    <?php if($favicon) : ?>
        <link rel="icon" type="image/x-icon" href="<?php echo $favicon?>" />
    <?php endif; ?>

    <?php
    // Include css, js
    include_once (J_TEMPLATEDIR.J_SEPARATOR.'includes'.J_SEPARATOR.'head.php');
    ?>

  <!-- Global site tag (gtag.js) - Google Ads: 706973679 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-706973679"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'AW-706973679');
</script>
  <!-- Event snippet for Кнопка перехода conversion page
In your html page, add the snippet and call gtag_report_conversion when someone clicks on the chosen link or button. -->
<script>
function gtag_report_conversion(url) {
  var callback = function () {
    if (typeof(url) != 'undefined') {
      window.location = url;
    }
  };
  gtag('event', 'conversion', {
      'send_to': 'AW-706973679/rYQfCIzkn6wBEO-fjtEC',
      'event_callback': callback
  });
  return false;
}
</script>
<script src="https://yastatic.net/pcode/adfox/loader.js" crossorigin="anonymous"></script>
<script data-ad-client="ca-pub-6943655653791297" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

  
  </head>


<?php
    //sub Menu Home page
    $menu = JFactory::getApplication()->getMenu();
    if (is_object( $menu->getActive() ) ) {
        $getMenu_route = $menu->getActive()->route;
        $subMenu_home = strpos($getMenu_route,'home/');
    }else{
        $subMenu_home ='';
    }


    //render a class for home page
    $cls_body = '';
    $cls_body .= $yt->isHomePage() || is_numeric($subMenu_home) ? 'homepage ' : '';

    //Add Layout
    $cls_body .= 'home-'.$layout. ' ';

    //For RTL direction
    $cls_body .= ($doc->direction == 'rtl') ? 'rtl' . ' ' : '';

    //add a class according to the template name
    $cls_body .= ($layoutType !='res') ? 'no-res'.'':'res';

    $type_layout = 'layout-'.$yt->getParam('typelayout');
    
    $app = JFactory::getApplication('site');
    $pageclass =  $app->getParams('com_content');
?>
<body id="bd" class="<?php echo $cls_body; ?>" >
    <jdoc:include type="modules" name="debug" />
    <?php if($preloader): ?>
        <div class="loader-content">
            <div class="cssload-loader">
                <div class="cssload-inner cssload-one"></div>
                <div class="cssload-inner cssload-two"></div>
                <div class="cssload-inner cssload-three"></div>
            </div>
       </div>
   <?php endif;?>
    <div id="yt_wrapper" class="<?php echo $type_layout; ?>">

        <?php
        /*render blocks. for positions of blocks, please refer layouts folder. */
        foreach($yt_render->arr_TB as $tagBD) {
            //BEGIN Check if position not empty
            if( $tagBD["countModules"] > 0 ) {

                // BEGIN: Content Area
                if( ($tagBD["name"] == 'content') ) {
                    //class for content area
                    $cls_content  = $tagBD['class_content'];
                    
                    $cls_content .= ' '.$pageclass->get('pageclass_sfx');
                    $cls_content  .= ' block '. $option ;
                    echo "<{$tagBD['html5tag']} id=\"{$tagBD['id']}\" class=\"{$cls_content}\">";
                    ?>

                        <div  class="container">
                            <div  class="row">
                                <?php
                                $countL = $countR = $countM = 0;
                                // BEGIN: foreach position of block content
                                $yt->_countPosGroup($tagBD['positions']);
                                foreach($tagBD['positions'] as $position):
                                    include(J_TEMPLATEDIR.J_SEPARATOR.'includes'.J_SEPARATOR.'block-content.php');
                                endforeach;
                                // END: foreach position of block content
                                ?>
                            </div >
                        </div >

                    <?php
                    echo "</{$tagBD['html5tag']}>";
                    ?>
                    <?php
                // END: Content Area

                // BEGIN: For other blocks
                } elseif ($tagBD["name"] != 'content'){
                    echo "<{$tagBD['html5tag']} id=\"{$tagBD['id']}\" class=\"block\">";
                    ?>
                        <div class="container">
                            <div class="row">
                            <?php
                            if( !empty($tagBD["hasGroup"]) && $tagBD["hasGroup"] == "1"){
                                // BEGIN: For Group attribute
                                $flag = '';
                                $openG = 0;
                                $c = 0;
                                foreach( $tagBD['positions'] as $posFG ):
                                    $c = $c + 1;
                               .......
</body>
</html>

alex_chz 08.10.2019 11:26

А вот файл, откуда якобы он берет скрипты, судя по этой записи:
<?php

    // Include css, js

    include_once (J_TEMPLATEDIR.J_SEPARATOR.'includes'.J_SEPARATOR.'head.php');

    ?>

Вот он
<?php
/*
 * ------------------------------------------------------------------------
 * Copyright (C) 2009 - 2013 The YouTech JSC. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: The YouTech JSC
 * Websites: http://www.smartaddons.com - http://www.cmsportal.net
 * ------------------------------------------------------------------------
*/

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
?>

<?php
if($yt->getParam('enableGoogleAnalytics')=='1' && $yt->getParam('googleAnalyticsTrackingID')!='' ){ ?>
    <!--For param enableGoogleAnalytics-->
    <script type="text/javascript">
        var _gaq = _gaq || [];
        _gaq.push(["_setAccount", "<?php echo $yt->getParam('googleAnalyticsTrackingID')?>"]);
        _gaq.push(["_trackPageview"]);
        (function() {
        var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true;
        ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
        var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ga, s);
        })();
    </script>

<?php
} ?>
Тупо тег от гугла и больше нечего

laimas 08.10.2019 11:26

Цитата:

Сообщение от alex_chz
Как отключить уже подключенные до меня?

Не указывать. Если скрипты подключаются глобально, то есть для всех страниц, значит они подключаются в шаблоне индексного файла. А как подключатся по ссылке и описано, откуда-то они ни как не возьмутся. Если есть какие либо изменения в конкретной версии CMS, то эти тонкости лучше узнать на форуме Джумлы.

laimas 08.10.2019 11:29

// Include css, js
 include_once (J_TEMPLATEDIR.J_SEPARATOR.'includes'.J_SEPARATOR. 'head.php');

Значит где можно увидеть что именно подключается как не в head.php?

alex_chz 08.10.2019 11:29

я скинул этот самый хеад выше)

laimas 08.10.2019 11:32

Ищите во всех подключаемых файлах, по щучьему велению они не появляются.

alex_chz 08.10.2019 11:36

Вот именно что нету, я проверил каждый файл этого проклятого шаблона, там нет) А во всех других форумах, я тоже спрашивал, там молчание ягнят, одно название. Так то я всегда нахожу ответы сам, но этот шаблон поставил в тупик с этим юи, поэтому и написал на все формумы. Может я конечно не знаю правил тех форумов, и ответы появятся через месяц, но смысл тогда )

laimas 08.10.2019 11:41

Цитата:

Сообщение от alex_chz
Вот именно что нету

Уверены? В редакторе выбираем поиск, вводим имя файла и указываем папку поиска, отмечая поиск и в подпаках. Результатом будет список файлов шаблонов, конфигураций и т.п., где имя этого файла упоминается. А далее анализ, думаем.

alex_chz 08.10.2019 11:50

Вы наверно плохо знаете джумлу - у неё в админке видны все файлы шаблона. То есть вся папка откуда он может подключаться со всеми подпапками. Вот там и нет. Только в системе, а система джумла это мильон файлов. Да и что там искать собственно? Все подключения в индекс шаблона ведут к папкам самого шаблона как видите, и их я смотрел.

laimas 08.10.2019 11:55

Цитата:

Сообщение от alex_chz
Вы наверно плохо знаете джумлу

Я могу сегодня выполнять заказ касаемый джумлы, а через неделю вордперсс. Если я бы заучивал наизусть и запомнил все CMS, самопальные движки и прочее с чем приходилось мне работать, я давно бы был пациентом дурдома. Если я что-то забываю, а мне на текущий момент требуется, то я просто "обновляю" познание документации. Но что я могу сказать и это точно, из ничего что-то не появится, не надо пороть чепухи, имена файлов подключаемых обязательно где-то прописаны, это либо файлы, либо в базе.

alex_chz 08.10.2019 12:24

Хз, где они там прописаны. Вот для тех кому интересно как переопределить базовые скрипты в джумле, прописав это в индексе шаблона
<?php
$doc = JFactory::getDocument();
$scr = '/media/jui/js/jquery.min.js';
$repl_scr = '//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js';
$key = array_keys($doc->_scripts);
$value = array_values($doc->_scripts);
$key = str_replace($scr, $repl_scr, $key);
$doc->_scripts = array_combine($key, $value);
?>


То есть он заменил исходный jquery.min.js. Стал на его место. Но что в итоге, не х.. НЕ ЗАРАБОТАЛ. И в самой джумле если что с коробки подключен миграт, на 3 подключена версия 1.4.1, что вроде последняя.

Вообщем тупик становиться уже(

laimas 08.10.2019 12:29

Точно не помню, но до версии 2.0, фай миграции имеет версию 1.2, вроде бы так.
Если все нужные файлы подключены, но не работает, то уже нужно смотреть логи в отладчике браузера.

alex_chz 08.10.2019 12:30

Цитата:

Сообщение от laimas (Сообщение 513672)
Точно не помню, то до версии 2.0, фай миграции имеет версию 1.2.
Если все нужные файлы подключены, но не работает, то уже нужно смотреть логи в отладчике браузера.

Опа, щяс проверю и переопределю

alex_chz 08.10.2019 12:39

Не не пашет. Логи пишут вот что, в меню у меня подключается еще и библеотека 2.1.1. То есть конфилкта с джумловским скриптом нет, а с меню есть

alex_chz 08.10.2019 12:43

походу придется меня другое искать


Часовой пояс GMT +3, время: 05:02.