Артём Мáлков

Что делать, если DLE вырезает некоторые HTML-теги из новости?

12 мая23 комм

Когда я размещал на своем сайте одну из статей, была необходимость внедрить небольшой скрипт непосредственно в сам текст. Но как мне стало потом известно – DataLife Engine не дает возможность простой вставки HTML-тегов определенного типа, PHP- и JS-скриптов.

Я стал разбираться, в чем дело и как заставить DLE пропускать мой код в новости. Начну с того, что CMS не просто так запрещает вставки кода в текст материала, и если вы хотите поделиться исходным кодом ваших творений – воспользуйтесь конструкцией:

[codе]

	Необходимый код
	
[/codе]

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

Итак, что касается запрета на определенные теги. Если мы откроем файл parse.class.php в папке /engine/classes/ вашего сайта и посмотрим примерно на 46 строку (нумерация в разных версиях может отличаться – ищите строку по начальной фразе), увидим следующее:

var $tagBlacklist = array ('applet', 'body', 'bgsound', 'base', 'basefont', 'frame', 'frameset', 'head', 'html', 'id', 'ilayer', 'layer', 'link', 'meta', 'name', 'script', 'style', 'title', 'xml' ); 

Что именно здесь есть? В принципе, полный перечень того, что запрещает DLE вставлять в текст новостей. Теперь рассмотрим, как разрешить вставку кода, на примере тега <script>.

1. Первое, что вам необходимо сделать – это удалить 'script' из этой строки.

2. Затем ниже ищем все строки, содержащие:

$source = preg_replace( "#<script#i", "&lt;script", $source ); 

и закомментируем их, или же просто удалим.

3. Сохраняем все изменения и отправляем их на сайт.

Теперь вы можете проверить, работает ли вставка скриптов непосредственно в саму новость DataLife Engine. Для этого в поле ввода текста статьи вставьте:

<script>

	alert("Hello World!");
	
</script>

Публикуете статью и открываете ее на сайте. Если вы увидели всплывающее сообщение, значит, все сделано правильно.

По аналогии разблокируются и все остальные теги. Пробуйте, и если у вас возникнут какие-либо вопросы – задавайте их в комментариях к этой статье.

Рекомендуем к просмотру
Как удалить все HTML-теги из строки на PHP/JavaScript?
Статьи и советы
Комментарии в HTML-, CSS-, JS- и PHP-коде
Статьи и советы
Вывод материалов в DLE, начиная с n-го номера
Статьи и советы
23
комментария
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 2
    3
      •  Пользователь
    28 апр в 07:00

    Здравствуйте не могу найти

    var $tagBlacklist = array ('applet', 'body', 'bgsound', 'base', 'basefont', 'frame', 'frameset', 'head', 'html', 'id', 'ilayer', 'layer', 'link', 'meta', 'name', 'script', 'style', 'title', 'xml' )

    Версия 14

      • 1
      1066
        •  Команда Pandoge
      28 апр в 14:27

      Антон, здравствуйте!

      В новых версиях поменялся принцип обработки тегов.

      Возможно в комментариях есть инструкция для свежих релизов.

      • 2
      3
        •  Пользователь
      29 апр в 03:09

      Решено .

       47 var $allowed_domains = array("drive.google.com",
    • 3
    1
      •  Пользователь
    29 мар в 18:47

    Нужно

    Заменить 2 строки

    в файлах editnews и addnews

    $full_story = $parse->process( $_POST['full_story'] );

    На

    $full_story = $_POST['full_story'];

    Файлы в папке /engine/inc/

    • 1
    766
      •  Гости
    27 апр в 08:45

    Здравствуйте Артем. Есть такая проблема, добавил форму для текста, на которой обработчик события выполняет текст. Но при сохранении DLE удаляет обработчик события, не трогая остальной код формы. По вашей статье зашел в parse.class.php, нашел искомый обработчик и закоментировал его, но все равно при сохранении страницы обработчик удаляется. Не подскажете, в каком направлении копать?

      • 1
      1066
        •  Команда Pandoge
      28 апр в 01:59

      Сергей, какая версия движка?

      Как вариант - обработчик перенести просто в дизайн полной новости.

    • 2
    766
      •  Гости
    5 фев в 16:26

    Спасибо вам огромное! Очень долго искал такую информацию

    • 2
    766
      •  Гости
    3 фев в 14:46

    Здравствуйте Артем. Не подскажешь в чем может быть проблема <!--noindex-->

    в исходном коде не отображается.

      • 11
      1066
        •  Команда Pandoge
      3 фев в 16:23

      Вячеслав, в исходном коде шаблона или новости?

    • 1
    766
      •  Гости
    14 дек в 19:35

    Здравствуйте у меня проблема с тегом [code] как только я вставляю тег [code] в новость у меня перестает отображаться логотип, кнопка настройки, кнопка выхода и перестает разворачиваться меню

      • 11
      1066
        •  Команда Pandoge
      14 дек в 20:14

      Артём, а вы тег этот закрываете?

      Структура его такая:

      [code] Ваш код [/code]

      • 1
      766
        •  Гости
      14 дек в 20:25

      конечно закрываю

      • 1
      766
        •  Гости
      14 дек в 20:38

      решение нашел удалил с main.tpl {AJAX}

      • 1
      766
        •  Гости
      14 дек в 20:44

      удалил {AJAX} теперь все модули перестали работать DDD

      • 1
      766
        •  Гости
      14 дек в 20:50

      просто переместил {AJAX} в самый конец

      </script>

      {AJAX}

      </body>

      </html>

      и все заработало)))

    • 2
    766
      •  Гости
    10 окт в 18:48

    Артем, приветствую!

    У меня 2 сайта на 11.3 и 12 версии движка. Так вот в обоих файлах parse.class отсутствуют даже примерные строчки из Вашего примера.

    Возможно в новых версиях как-то по-другому реализовано?

      • 6
      1066
        •  Команда Pandoge
      11 окт в 13:41

      Андрей, к сожалению под рукой нет DLE этих версий. Если у вас есть тестовый сайт или можете скинуть доступы к рабочему - пришлите их в комментариях, во «ВКонтакте» или через форму обратной связи.

      Постараюсь вам помочь

      • 2
      766
        •  Гости
      14 окт в 12:26

      Артем, привет, та же проблема, что и у человека выше, отписал тебе в вк, может поможешь

      • 2
      766
        •  Гости
      23 окт в 09:02

      Дмитрий, решил проблему с вырезанием тега option так:

      /engine/classes/parse.class.php

      Найди:

      $def->addElement('section', 'Block', 'Flow', 'Common');

      Ниже:

      $def->addElement('option', 'Inline', 'Flow', 'Common');

      Найди:

      $def->addAttribute('img', 'sizes', 'Text' );

      Ниже:

      $def->addAttribute('option', 'value', 'Text' );

      • 2
      766
        •  Гости
      25 ноя в 13:57

      Привет. тоже такая проблема нет этих строчек

      У меня версия dle 12

      Пробовал /engine/classes/parse.class.php

      Найди:

      $def->addElement('section', 'Block', 'Flow', 'Common');

      Ниже:

      $def->addElement('option', 'Inline', 'Flow', 'Common');

      Найди:

      $def->addAttribute('img', 'sizes', 'Text' );

      Ниже:

      $def->addAttribute('option', 'value', 'Text' );

      1

      не помогло

      Помогите пожалуйста , срочно нужно)

      • 6
      1066
        •  Команда Pandoge
      25 ноя в 17:52

      Алексей, а визуальный редактор при этом Вы отключили?

      • 1
      766
        •  Гости
      25 ноя в 21:14

      Артем, я пробовал все 3 вида визуального редактора переключать, все равно не помогает.

      Ps: кеш чистил

      • 10
      1066
        •  Команда Pandoge
      25 ноя в 23:11

      Алексей, тогда пишите нам вконтакте - попробуем помочь. (нужно будет предоставить доступы к сайту).

Подняться наверх
«Pandoge» - помощник вебмастера