Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 10 Ответов
  • 2208 Просмотров
*

M1tt

  • Новичок
  • 8
  • 0 / 0
Проблема с выводом script
« : 15.08.2013, 10:45:24 »
Прежде всего хочу сказать, что в программировании я практически полный ноль. Так общие сведения и не более. Поэтому прошу "помидорами не закидывать" если пишу что-то совсем нелепое и неправильное.

Есть сайт на Joomla 2.5. Шаблон сделанный в Arteester 4.0. Знаю, что косяков там много, но уже ничего не поделаешь. Проблема такого рода. При вставке тегов script в любой материал на сайте они автоматически перемещаются в head. Получается, что любая контекстная реклама выводиться не в тексте статьи, а в самом верху странички. Пример такого безобразия http://www.vse-dlya-detey.ru/shkolnye-uchebniki/matematika/628-olimpiada-po-matematike-4-klass.html.

Если же код со скриптом вставлять в других блоках сайта (левый сайдбар, футер), то все нормально и они выводятся там где положено.

Помогите пожалуйста разобраться в чем проблема.

Файл index.php этого шаблона

Код
<?php
defined('_JEXEC') or die;

/**
 * Template for Joomla! CMS, created with Artisteer.
 * See readme.txt for more details on how to use the template.
 */

require_once dirname(__FILE__). DIRECTORY_SEPARATOR . 'functions.php';

// Create alias for $this object reference:
$document = $this;

// Shortcut for template base url:
$templateUrl = $document->baseurl . '/templates/' . $document->template;

Artx::load("Artx_Page");

// Initialize $view:
$view = $this->artx = new ArtxPage($this);

// Decorate component with Artisteer style:
$view->componentWrapper();

JHtml::_('behavior.framework', true);

?>
<!DOCTYPE html>
<html dir="ltr" lang="<?php echo $document->language; ?>">
<head>
    <jdoc:include type="head" />
    <link rel="stylesheet" href="<?php echo $document->baseurl; ?>/templates/system/css/system.css" />
    <link rel="stylesheet" href="<?php echo $document->baseurl; ?>/templates/system/css/general.css" />

    <!-- Created by Artisteer v4.1.0.59688 -->
    
    
    <meta name="viewport" content="initial-scale = 1.0, maximum-scale = 1.0, user-scalable = no, width = device-width">

    <!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <link rel="stylesheet" href="<?php echo $templateUrl; ?>/css/template.css" media="screen">
    <!--[if lte IE 7]><link rel="stylesheet" href="<?php echo $templateUrl; ?>/css/template.ie7.css" media="screen" /><![endif]-->
    <link rel="stylesheet" href="<?php echo $templateUrl; ?>/css/template.responsive.css" media="all">

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    <script>if ('undefined' != typeof jQuery) document._artxJQueryBackup = jQuery;</script>
    <script src="<?php echo $templateUrl; ?>/jquery.js"></script>
    <script>jQuery.noConflict();</script>

    <script src="<?php echo $templateUrl; ?>/script.js"></script>
    <?php $view->includeInlineScripts()?>
    <script>if (document._artxJQueryBackup) jQuery = document._artxJQueryBackup;</script>
    <script src="<?php echo $templateUrl; ?>/script.responsive.js"></script>
</head>
<body>

<div id="main">
    <div class="sheet clearfix">
<header class="header clearfix"><?php echo $view->position('header', 'nostyle'); ?>


    <div class="shapes">
<p class="headline" data-left="12.15%">
    <a href="<?php echo $document->baseurl; ?>/"><?php echo $this->params->get('siteTitle'); ?></a>
</p>
<p class="slogan" data-left="12.15%"><?php echo $this->params->get('siteSlogan'); ?></p>



            </div>

                
                    
</header>
<?php echo $view->position('banner1', 'nostyle'); ?>
<?php echo $view->positions(array('top1' => 33, 'top2' => 33, 'top3' => 34), 'block'); ?>
<div class="layout-wrapper clearfix">
                <div class="content-layout">
                    <div class="content-layout-row">
                        <?php if ($view->containsModules('left')) : ?>
<div class="layout-cell sidebar1 clearfix">
<?php echo $view->position('left', 'block'); ?>




                        </div>
<?php endif; ?>
                        <div class="layout-cell content clearfix">
<?php
  echo $view->position('banner2', 'nostyle');
  if ($view->containsModules('breadcrumb'))
    echo artxPost($view->position('breadcrumb'));
  echo $view->positions(array('user1' => 50, 'user2' => 50), 'article');
  echo $view->position('banner3', 'nostyle');
  echo artxPost(array('content' => '<jdoc:include type="message" />', 'classes' => ' messages'));
  echo '<jdoc:include type="component" />';
  echo $view->position('banner4', 'nostyle');
  echo $view->positions(array('user4' => 50, 'user5' => 50), 'article');
  echo $view->position('banner5', 'nostyle');
?>



                        </div>
                        <?php if ($view->containsModules('right')) : ?>
<div class="layout-cell sidebar2 clearfix">
<?php echo $view->position('right', 'block'); ?>


                        </div>
<?php endif; ?>
                    </div>
                </div>
            </div>
<?php echo $view->positions(array('bottom1' => 33, 'bottom2' => 33, 'bottom3' => 34), 'block'); ?>
<?php echo $view->position('banner6', 'nostyle'); ?>

<footer class="footer clearfix">
<?php if ($view->containsModules('copyright')) : ?>
    <?php echo $view->position('copyright', 'nostyle'); ?>
<?php else: ?>
<a title="RSS" class="rss-tag-icon" style="position: absolute; bottom: 5px; left: 6px; line-height: 32px;" href="#"></a><div style="position:relative;padding-left:10px;padding-right:10px"><p><br></p></div>
<?php endif; ?>
</footer>

    </div>
</div>



<?php echo $view->position('debug'); ?></body>
</html>
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Проблема с выводом script
« Ответ #1 : 15.08.2013, 11:20:40 »
Незнаком с Artisteer, но попробуйте найти в ее коде, где формируется блок head (что-то вроде head.php) и добавить условие вывода js script: запретить addScript для материала, например.
Это первое, что пришло в голову, а не решение.
« Последнее редактирование: 15.08.2013, 12:23:45 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

M1tt

  • Новичок
  • 8
  • 0 / 0
Re: Проблема с выводом script
« Ответ #2 : 15.08.2013, 11:52:51 »
Путем "тыка и удаления" выяснил что дело скорее всего в строке

Код
<?php $view->includeInlineScripts()?>

Но найти какую то информацию об Include Inline Scripts на русском пока не удалось. При удалении этой строки скрипт в материале вообще нигде не выводится.
*

M1tt

  • Новичок
  • 8
  • 0 / 0
Re: Проблема с выводом script
« Ответ #3 : 15.08.2013, 12:46:23 »
Вообщем порылся в коде файлов и в файле Page.php нашел такие строки

Код
private function parseInlineScripts($matches) {
        ArtxPage::$inlineScripts[] = $matches[0];
        return "";
    }
   
    public function includeInlineScripts() {
        foreach(ArtxPage::$inlineScripts as $script)
            echo $script;

И ниже

Код
Wraps component content into article style unless it is not already wrapped.
     *
     * The componentWrapper method gets the content of the 'component' buffer and searches for the '<div class="post">' string in it.
     * Then it wraps the content of the buffer with the post.
     */
    public function componentWrapper()
    {
        if ($this->page->getType()!= 'html')
            return;
        $option = JRequest::getCmd('option');
        $view = JRequest::getCmd('view');
        $layout = JRequest::getCmd('layout');
        $content = $this->page->getBuffer('component');
        // Workarounds for Joomla bugs and inconsistencies:
        switch ($option) {
            case "com_content":
                switch ($view) {
                    case "form":
                        if ("edit" == $layout)
                            $content = str_replace('<button type="button" onclick="', '<button type="button" class="button" onclick="', $content);
                        break;
                    case "article":
                        $content = preg_replace_callback('/<script[^>]*>([\s\S]+?)<\/script>/', array( &$this, 'parseInlineScripts'), $content);
                        break;

Исходя из комментариев на английском понял, что в коде материала ищутся теги script, после код между этими тегами присваивается function includeInlineScripts() и выводиться в шапке сайта. Сделано это для предотвращения возникновения ошибок.

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

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Проблема с выводом script
« Ответ #4 : 15.08.2013, 13:04:05 »
Попробуйте изменить функцию parseInlineScripts($matches):
Код
private function parseInlineScripts($matches) {
        $option = JRequest::getVar('option');
        if($option!=='com_content'){
          ArtxPage::$inlineScripts[] = $matches[0];
          return "";
        }
    }
Не будь паразитом, сделай что-нибудь самостоятельно!
*

M1tt

  • Новичок
  • 8
  • 0 / 0
Re: Проблема с выводом script
« Ответ #5 : 15.08.2013, 13:27:24 »
Цитировать
Попробуйте изменить функцию parseInlineScripts($matches)
Попробовал. В шапке скрипт не выводиться, но и в материале тоже его нет.
*

M1tt

  • Новичок
  • 8
  • 0 / 0
Re: Проблема с выводом script
« Ответ #6 : 15.08.2013, 13:29:11 »
А можно просто удалить код?

Код
private function parseInlineScripts($matches) {
        ArtxPage::$inlineScripts[] = $matches[0];
        return "";
    }
   
    public function includeInlineScripts() {
        foreach(ArtxPage::$inlineScripts as $script)
            echo $script;

Код
 case "article":
                        $content = preg_replace_callback('/<script[^>]*>([\s\S]+?)<\/script>/', array( &$this, 'parseInlineScripts'), $content);
                        break;

и

Код
 <?php $view->includeInlineScripts()?> 

*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Проблема с выводом script
« Ответ #7 : 15.08.2013, 13:34:25 »
Попробуйте удалить (закомментировать) этот код
Код
case "article":
                        $content = preg_replace_callback('/<script[^>]*>([\s\S]+?)<\/script>/', array( &$this, 'parseInlineScripts'), $content);
                        break;
Не будь паразитом, сделай что-нибудь самостоятельно!
*

M1tt

  • Новичок
  • 8
  • 0 / 0
Re: Проблема с выводом script
« Ответ #8 : 15.08.2013, 13:38:06 »
Помогло. Спасибо большое.
*

M1tt

  • Новичок
  • 8
  • 0 / 0
Re: Проблема с выводом script
« Ответ #9 : 15.08.2013, 13:40:17 »
Я так понял теперь получается постоянный пустой массив, который просто не отображается?

Код
public static $inlineScripts = array();
(в начале файла переменная пустой массив)



*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Проблема с выводом script
« Ответ #10 : 15.08.2013, 13:41:52 »
Нет, не выводятся в head только скрипты от com_content.
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблема с доступом к шаблону сайта

Автор thas

Ответов: 4
Просмотров: 4136
Последний ответ 08.11.2019, 19:55:23
от stendapuss
Проблема с шаблоном

Автор yura.yushkevich

Ответов: 2
Просмотров: 1533
Последний ответ 07.02.2017, 19:14:43
от istraweb
Проблема после переноса шаблон с версии Joomla 1.5 на 2.5

Автор Berkin09

Ответов: 3
Просмотров: 1477
Последний ответ 24.10.2016, 13:08:27
от Berkin09
Проблема с миграцией шаблона Joomla! 1.5 Ja_Purity на Joomla 2.5

Автор Invictus

Ответов: 6
Просмотров: 1859
Последний ответ 16.05.2016, 06:45:27
от Invictus
Проблема отображения шаблона на моб.устройствах

Автор tomas_morgam

Ответов: 1
Просмотров: 1308
Последний ответ 29.04.2016, 11:54:17
от tomas_morgam