CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
YuriBtr

Теряются теги во вложенных шаблонах

Recommended Posts

Ситуация такая, в main.tpl загружается шаблон правого меню right_menu.tpl через строку

{include file="modules/right_menu.tpl"}

в шаблоне правой строки идет подгрузка других шаблонов (боковое меню, банеры, информеры) также через строки типа

{include file="modules/informer.tpl"}

 

Проблема в том, что в первых двух шаблонах ( main.tpl, right_menu.tpl ) подгрузка шаблонных тегов происходит нормально.

Корректно  распознаются шаблонные теги [static=имя страницы] [/static] и [not-static=имя страницы] [/not-static]

 

Но в третьем шаблоне уже эти теги не распознаются и выводятся текстом. Это так и должно быть, ли все таки баг?

Версия DLE 13.0

 

 

Share this post


Link to post
Share on other sites
12 часов назад, YuriBtr сказал:

Но в третьем шаблоне уже эти теги не распознаются и выводятся текстом. Это так и должно быть, ли все таки баг?

Да так и должно быть. Вложенность подгружаемых шаблонов ограничена двумя ветками. Это сделано в целях защиты сайта от зацикливания. Например если подключить в шаблоне самого себя, это может привести к бесконечному зацикливанию, и как следствие падение сервера. Чтобы избежать этого, есть ограничения на количество подключений.

Share this post


Link to post
Share on other sites
4 часа назад, celsoft сказал:

Да так и должно быть. Вложенность подгружаемых шаблонов ограничена двумя ветками. Это сделано в целях защиты сайта от зацикливания. Например если подключить в шаблоне самого себя, это может привести к бесконечному зацикливанию, и как следствие падение сервера. Чтобы избежать этого, есть ограничения на количество подключений.

Странно, зацикливание может быть и в одном шаблоне, если как вы сами написали - вызвать себя же из него.

А про ограничение на уровень вложенностей я в документации не видел. Думаю это важный момент - предлагаю отразить его в документации.

Хотя в идеале такого ограничения не должно быть, но это конечно вам решать.

Share this post


Link to post
Share on other sites

А такой подход для решения можно использовать?

Внутри функции sub_load_template перед 

return $template;

Вставить

if (strpos($template, '{include file=') !== false) {
	$this->include_mode = 'tpl';
	preg_match("#\\{include file=['\"](.+?)['\"]\\}#i", $template, $checkInclude);

	if (strpos($templatefile, $checkInclude[1])) {
		$template = preg_replace("#\\{include file=['\"](.+?)['\"]\\}#i", '', $template);
	} else {
		$template = preg_replace_callback("#\\{include file=['\"](.+?)['\"]\\}#i", [&$this, 'load_file'], $template);
	}
}

Проверил с такой вложенностью

В main.tpl добавляем

{include file="tpl/test.tpl"}

Внутри него

[aviable=main]MAIN 0[/aviable]
{include file="tpl/test1.tpl"}

Внутри test1.tpl

[aviable=main]MAIN 1[/aviable]
{include file="tpl/test2.tpl"}

А внутри test2.tpl

[aviable=main]MAIN 2[/aviable]
{include file="tpl/test3.tpl"}

И в конце

[aviable=main]MAIN 3[/aviable]

Никаких ошибок пока не заметил, и test2.tpl и test3.tpl работает без проблем.

 

А если добавить внутри файла вызов самого себя то в итоге ничего не будет.

Edited by Gameer
  • Like 1
  • Upvote 1

Share this post


Link to post
Share on other sites
В 10.11.2018 в 12:32, celsoft сказал:

Это сделано в целях защиты сайта от зацикливания. Например

есть огромная куча примеров кода, который может привести к зацикливанию сайта. Надеюсь не нужно приводить примеры?

К чему это я? Да к тому, что ИМХО - пользы от такой защиты от зацикливания - ноль... А вред - налицо.

Хотя, пока на DLE будут единицы пользователей делать достаточно сложные шаблоны - большинству от  этой "защиты от зацикливания" - ни тепло, ни холодно...

 

Share this post


Link to post
Share on other sites
2 минуты назад, IgorA100 сказал:

есть огромная куча примеров кода, который может привести к зацикливанию сайта. Надеюсь не нужно приводить примеры?

К чему это я? Да к тому, что ИМХО - пользы от такой защиты от зацикливания - ноль... А вред - налицо.

Хотя, пока на DLE будут единицы пользователей делать достаточно сложные шаблоны - большинству от  этой "защиты от зацикливания" - ни тепло, ни холодно...

 

Ну на самом деле нет, идет рекурсия и сервер ложиться от нагрузки. К примеру мой плагин решает проблему с вложенным подключением, в нем нельзя подключить файл который будет подключать себя же.

Share this post


Link to post
Share on other sites

А такой код не положит сервер? :)

while ( 1 != 2 ) { ++$a ;} 

 

8 минут назад, Gameer сказал:

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

А если так?

 

В main.tpl добавляем

{include file="tpl/test.tpl"}

Внутри него

[aviable=main]MAIN 0[/aviable]
{include file="tpl/test1.tpl"}

Внутри test1.tpl

[aviable=main]MAIN 1[/aviable]
{include file="tpl/test2.tpl"}

А внутри test2.tpl (ВАЖНО!)

[aviable=main]MAIN 2[/aviable]
{include file="tpl/test.tpl"}

Да и вообще, человек, который что-то делает, он должен думать и анализировать!!!

Share this post


Link to post
Share on other sites
6 минут назад, IgorA100 сказал:

А такой код не положит сервер? :)


while ( 1 != 2 ) { ++$a ;} 

 

А если так?

 

В main.tpl добавляем


{include file="tpl/test.tpl"}

Внутри него


[aviable=main]MAIN 0[/aviable]
{include file="tpl/test1.tpl"}

Внутри test1.tpl


[aviable=main]MAIN 1[/aviable]
{include file="tpl/test2.tpl"}

А внутри test2.tpl (ВАЖНО!)


[aviable=main]MAIN 2[/aviable]
{include file="tpl/test.tpl"}

Да и вообще, человек, который что-то делает, он должен думать и анализировать!!!

Хм, этого не проверял, нужно будет.

Share this post


Link to post
Share on other sites
14 часов назад, IgorA100 сказал:

есть огромная куча примеров кода, который может привести к зацикливанию сайта. Надеюсь не нужно приводить примеры?

К чему это я? Да к тому, что ИМХО - пользы от такой защиты от зацикливания - ноль... А вред - налицо.

Нет нужно. Приведите пример, когда стандартный DLE можно привести к зацикливанию.

Share this post


Link to post
Share on other sites
4 часа назад, celsoft сказал:

Приведите пример, когда стандартный DLE можно привести к зацикливанию.

Ох.....

Точно так-же стандартный DLE (со стандартными шаблонами) - не приведет к зацикливанию, даже при отсутствии защиты по уровням вложенности шаблонов!!! Разве не так?

Далее:

- шаблоны может править каждый, верно? Верно...

- плагины может писать каждый, верно? Верно...

 

Или наверное не так? Да, наверное...

Плагины может писать только дипломированный программист по 10 языкам программирования с 20 летним стажем работы, что не позволит ему написать говнокод вешающий сервер?

Шаблоны может писать школьник 2го класса незнающий еще вообще ничего, и его надо как-то защитить от ошибок....

Такая логика что-ли ?

 

ЗЫ: А на JS разве нельзя написать говнокод и вставить его в шаблон, который завесит в усмерть браузер? Можно....

 

Но ведь мы о другом, да ?

 

Share this post


Link to post
Share on other sites
10 минут назад, IgorA100 сказал:

Точно так-же стандартный DLE (со стандартными шаблонами) - не приведет к зацикливанию, даже при отсутствии защиты по уровням вложенности шаблонов!!! Разве не так?

Причем здесь стандартный шаблон? Речь идет о DLE а не шаблонах. DLE не позволяет зациклить его, при использовании любого шаблона. Потому как обладает соответствующей защитой. Вы написали:

19 часов назад, IgorA100 сказал:

есть огромная куча примеров кода, который может привести к зацикливанию сайта. К чему это я? Да к тому, что ИМХО - пользы от такой защиты от зацикливания - ноль...

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

10 минут назад, IgorA100 сказал:

ЗЫ: А на JS разве нельзя написать говнокод и вставить его в шаблон, который завесит в усмерть браузер? Можно....

Мы не разработчики браузера. Мы разработчики DLE, и для нас важно чтобы DLE не мог "повесить" и аварийно остановить сервер.

10 минут назад, IgorA100 сказал:

Но ведь мы о другом, да ?

Да о другом. А именно о DLE и только о нем.

 

  • Upvote 1

Share this post


Link to post
Share on other sites
26 минут назад, celsoft сказал:

Причем здесь стандартный шаблон? Речь идет о DLE а не шаблонах

Т.е. Вы разделяете DLE и шаблоны ? Странно, но Вам, как разработчику виднее.....

27 минут назад, celsoft сказал:

Да о другом. А именно о DLE и только о нем.

Так причем тут тогда вообще шаблоны? Если:

28 минут назад, celsoft сказал:

Речь идет о DLE а не шаблонах.

Понятно, что к браузеру Вы не имеете отношения.

29 минут назад, celsoft сказал:

Мы не разработчики браузера. Мы разработчики DLE, и для нас важно чтобы DLE не мог "повесить" и аварийно остановить сервер.

Но, ведь если шаблон повесит сервер, а не DLE, то это же уже не Ваша проблема, ведь (еще раз процитирую Вас):

31 минуту назад, celsoft сказал:

Причем здесь стандартный шаблон? Речь идет о DLE а не шаблонах.

 

И ответьте мне, пожалуйста на пару вопросов:

- Почему у Вас система плагинов позволяет "положить сервер" при условии некорректного плагина ?

- Почему защита от зависания сервера реализована только в рамках вложенности шаблонов и не работает при написании плагинов?

 

 

 

Share this post


Link to post
Share on other sites
16 минут назад, IgorA100 сказал:

Т.е. Вы разделяете DLE и шаблоны ? Странно, но Вам, как разработчику виднее.....

В смысле? Я если честно вообще сейчас не понял, что вы имеете ввиду, о чем речь. Мне кажется что мы с вами вообще говорим о каких то разных вещах. Я об одном, а вы о другом.

 

16 минут назад, IgorA100 сказал:

Но, ведь если шаблон повесит сервер, а не DLE, то это же уже не Ваша проблема, ведь (еще раз процитирую Вас):

На текущий момент шаблон, не может повесить DLE, благодаря тому что в DLE есть защита от этого. Которая работает и эффективно. Вы же написали, что может, и якобы есть примеры. На что я вам написал, чтобы вы эти примеры вы привели. Но вы их не привели. Вот о чем я писал вам и в чем собственно суть.

 

16 минут назад, IgorA100 сказал:

- Почему у Вас система плагинов позволяет "положить сервер" при условии некорректного плагина ?

Плагин это PHP код, PHP это язык программирования, на котором можно сделать все что угодно. И плохо написанный PHP код, может сделать все что угодно: повесить сервер, создать уязвимость и т.д. И это касается любой CMS и любой системы плагинов, а не только DLE. Плагин для любой без исключения CMS, если он "кривой" может это сделать. Потому как плагины это обычный PHP код. И то что вы перепрограммировали эту функциональность, не делает CMS какой либо неправильной. Возможность перепрограммировать, для этого и присутствует, чтобы добавлять свои возможности, или менять стандартные.

 

16 минут назад, IgorA100 сказал:

- Почему защита от зависания сервера реализована только в рамках вложенности шаблонов и не работает при написании плагинов?

Потому что я написал об этом выше. PHP коды, если они разрешены могут делать что угодно, на то они и PHP коды. В этом их суть. Для этого они присутствуют в любой CMS. Это основа собственно программирования. Не зависимо где программируется, в DLE или в любой другой CMS. А ставить себе на сайт "криво" написанный плагин, это решение уже пользователя сайта, и ему решать, пользоваться им или нет. Как например решаете пользоваться ли вам DLE или другой CMS.

  • Thanks 1

Share this post


Link to post
Share on other sites
46 минут назад, celsoft сказал:

В смысле? Я если честно вообще сейчас не понял, что вы имеете ввиду, о чем речь.

Ох, кажется Вы сами стали путаться...

Я написал:

Цитата

Точно так-же стандартный DLE (со стандартными шаблонами) - не приведет к зацикливанию, даже при отсутствии защиты по уровням вложенности шаблонов!!! Разве не так?

Вы ответили:

Цитата

Причем здесь стандартный шаблон? Речь идет о DLE а не шаблонах.

Вы уж определитесь то, о чем мы тут с Вами вообще разговариваем....

А если уж Вы так уверены, что:

Цитата

На текущий момент шаблон, не может повесить DLE ...... Вы же написали, что может, и якобы есть примеры.

Т.е. Вы не знаете как на  JavaScript можно повесить систему? Да неважно какую систему, серверную часть или клиентскую... Для пользователя системы (не для разработчика, не для верстальщика, ни для кодера, а для пользователя, который зашел на сайт) без разницы где там, чего, в каком канале зависло/упало..... Факт - не работает, висит....

 

54 минуты назад, celsoft сказал:

Плагин это PHP код, PHP это язык программирования, на котором можно сделать все что угодно.

Оооохххх..... Да, я понял, наконец-то понял, PHP - это язык программирования, а HTML и JS - это НЕ язык программирования. Спасибо что разъяснили, не знал....

 

Ладно, возможно, когда-то, Вы поймете что были сейчас не правы. А возможно и я пойму, что был не прав... Посмотрим.....

 

В любом случае можно легко подвесить как серверную часть, так и клиентскую часть системы при использовании DLE и написании определенного кода (не важно на каком языке). И при этом не спасет никакая защита от зацикливания в шаблонах. С этим то Вы хоть не поспорите? :)

Share this post


Link to post
Share on other sites
57 минут назад, IgorA100 сказал:

Вы уж определитесь то, о чем мы тут с Вами вообще разговариваем....

Я говорил о вашей фразе:

23 часа назад, IgorA100 сказал:

есть огромная куча примеров кода, который может привести к зацикливанию сайта. Надеюсь не нужно приводить примеры?

К чему это я? Да к тому, что ИМХО - пользы от такой защиты от зацикливания - ноль... А вред - налицо.

Из которой для меня следует, что защита в DLE от бесконечного зацикливания не работает, и есть какие то шаблонные комбинации, которая приведет к неработоспособности этой защиты. И я вам написал, что: Приведите эти коды и комбинации, и если это так, то будет признано багом и эта защита будет улучшена. Все. Больше я ничего не имел ввиду, и ни про что не писал. А вы меня куда то увели дебри рассуждений. Если есть такие шаблонные комбинации, то приводите. Если нет, то собственно обсуждать больше нечего.

 

57 минут назад, IgorA100 сказал:

Т.е. Вы не знаете как на  JavaScript можно повесить систему? Да неважно какую систему, серверную часть или клиентскую... Для пользователя системы (не для разработчика, не для верстальщика, ни для кодера, а для пользователя, который зашел на сайт) без разницы где там, чего, в каком канале зависло/упало..... Факт - не работает, висит....

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

 

57 минут назад, IgorA100 сказал:

Для пользователя системы (не для разработчика, не для верстальщика, ни для кодера, а для пользователя, который зашел на сайт) без разницы где там, чего, в каком канале зависло/упало..... Факт - не работает, висит....

Вы путаете поддержку DLE, с абстрактным собеседником, которые ведут дискуссии ни о чем. Нас интересуют только проблемы DLE, нас интересует только то что в DLE может неверно работать, по причинам, связанным с DLE, т.к. мы поддержка DLE. Нас совершенно никак не интересует абстракционизм, о том что кто то написал кривой или неработающий JS в шаблоне. Вас попросили привести комбинации шаблонных тегов DLE, которые могут привести стандартный DLE к зацикливанию, все я больше ни о чем не спрашивал. О этих комбинациях я и спросил вас, и больше ни о чем. Если такового вам привести нечего, то и наша дискуссия по этому вопросу также бессмысленна. Если вы имели в этой фразе что то иное, и такие комбинации из шаблонных тегов DLE вам неизвестны, то так и напишите, и для этот вопрос закрыт, а других вопросов у меня и не было.

 

57 минут назад, IgorA100 сказал:

Ладно, возможно, когда-то, Вы поймете что были сейчас не правы. А возможно и я пойму, что был не прав... Посмотрим.....

Я не писал ничего по поводу того кто прав, кто нет. Я вас просил только об одном. Привести примеры шаблонных тегов DLE, которые могут привести к зацикливанию в стандартом DLE. Все и больше ничего. Мне как поддержки интересовало только то имеет ли место баг в защите от бесконечного зацикливания. А вы пошли в какие то непонятные дебри, в которых я просто уже запутался. Я так понимаю таких тегов и комбинаций нет, а вы той своей фразой имели ввиду абстракционизм, что кто то напишет плагин или JS код, который будет что то делать. Но это уже не сфера багов DLE, а значит не сфера интересов поддержки DLE, а значит у меня больше никаких вопросов нет.

Share this post


Link to post
Share on other sites
2 часа назад, celsoft сказал:

Из которой для меня следует, что защита в DLE от бесконечного зацикливания не работает

НЕТ, я этого никогда не говорил!!! Вероятно, Вы не совсем внимательно читали мои сообщения. Где Вы такое увидели? В моем этом сообщении?

Цитата

есть огромная куча примеров кода, который может привести к зацикливанию сайта.

Здесь я нигде не упоминаю защиту от зацикливания с помощью ограничения вложенности шаблонов....

2 часа назад, celsoft сказал:

Приведите эти коды и комбинации, и если это так, то будет признано багом и эта защита будет улучшена.

Да пожалуйста:

<script>
while (1 < 3) { console.log( "Кирдык" );}
</script>

Вставьте в шаблон и наслаждайтесь...

Код - это код, это НЕ тег для шаблона, это программный код.....

 

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

Share this post


Link to post
Share on other sites
5 часов назад, IgorA100 сказал:

<script> while (1 < 3) { console.log( "Кирдык" );} </script>

:D Насмешили.

9 часов назад, IgorA100 сказал:

Оооохххх..... Да, я понял, наконец-то понял, PHP - это язык программирования, а HTML и JS - это НЕ язык программирования. Спасибо что разъяснили, не знал....

Это был бесплатный курс обучения для Вас ;)

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

Прочитал всю ветку и только время потратил.

  • Upvote 1

Share this post


Link to post
Share on other sites
3 часа назад, proba сказал:

:D Насмешили.

Я очень рад! Ведь смеяться полезно!!!

3 часа назад, proba сказал:

Вас попросили привести пример,

Я привел пример. Я очень рад, что в Вашем шаблоне данный код никак не работает!!! И что любой посетитель зашедший на сайт будет прекрасно его просматривать...

3 часа назад, proba сказал:

Это был бесплатный курс обучения для Вас ;)

Жаль, что диплом не выдается. А то повесил бы на стену и гордился ;)

Share this post


Link to post
Share on other sites
1 час назад, IgorA100 сказал:

Я привел пример.

Какой именно? Если пример с вложенностью шаблонов test1.tpl, test2.tpl (ВАЖНО!), то у меня на 11.1 Ваш вариант не прокатил. Может быть, чтобы воочию увидеть факт

В 19.11.2018 в 03:04, IgorA100 сказал:

зацикливанию сайта

и написал

22 часа назад, celsoft сказал:

Приведите пример, когда стандартный DLE можно привести к зацикливанию.

То, что в шаблон вносите подобное

11 часов назад, IgorA100 сказал:

<script> while (1 < 3) { console.log( "Кирдык" );} </script>

не обязывает движок каким-то образом пресекать выполнение. Или всё же по Вашему он должен анализировать к чему это приводит и предпринимать какие-то действия?

По поводу сарказма с плагинами, то Вы не правы! Чтобы не лезть в код, проще работать через плагины. А если обезопасить от Вас, то лучше вернуться к тому времени, когда плагинов не было.

 

Share this post


Link to post
Share on other sites
1 час назад, proba сказал:

Если пример с вложенностью шаблонов test1.tpl, test2.tpl (ВАЖНО!), то

Вы хоть читайте уж тогда тему и попробуйте понять к чему я это писал ;)

1 час назад, proba сказал:

Или всё же по Вашему он должен анализировать к чему это приводит и предпринимать какие-то действия?

Вот именно, по моему мнению - НЕ обязан. НЕ обязан движок ограничивать возможности.

 

1 час назад, proba сказал:

По поводу сарказма с плагинами, то Вы не правы! Чтобы не лезть в код, проще работать через плагины.

И где Вы мой сарказм по поводу плагинов нашли? Я говорил что это плохо и неправильно? Где ??? Конечно проще, и я только ЗА....

 

Вы что, вообще ничего не поняли? Персонально для Вас выскажусь, что я против ограничений на вложенность шаблонов, которое спасает от зацикливания. Я же говорю, что кривыми руками можно чего угодно наворотить (и в шаблонах, и в PHP файлах), и не спасут никакие защиты в видео ограничений на вложенность шаблонов....

Share this post


Link to post
Share on other sites

Здравствуйте, интересует пару вопросов. Что отвечает за вывод тегов в dle, и как настроить вывод новостей когда кликаешь на любой из тегов? 
Как я понял tagscloud.tpl отвечает за переменную {tags}, она у меня отображается на сайте. Но когда кликаю по любому из тегов, то мне не показывается новости которые соответствуют этому тегу. И так по разному, в каких-то шаблонах новости по тегам выводятся, в каких-то нет.

Share this post


Link to post
Share on other sites
3 минуты назад, Mark456 сказал:

Здравствуйте, интересует пару вопросов. Что отвечает за вывод тегов в dle, и как настроить вывод новостей когда кликаешь на любой из тегов? 
Как я понял tagscloud.tpl отвечает за переменную {tags}, она у меня отображается на сайте. Но когда кликаю по любому из тегов, то мне не показывается новости которые соответствуют этому тегу. И так по разному, в каких-то шаблонах новости по тегам выводятся, в каких-то нет.

Во-первых, не надо писать чужих ветках, да еще и не по теме. Создать свою тему не так и сложно.

Во-вторых, надо выполнять правила форума

Цитата

Внимание !!!

На данном форуме существуют достаточно жесткие правила, поэтому прежде чем создавать свою тему убедитесь, что вы внимательно их прочитали и поняли.

 

1. Если ваша тема начинается с вопроса и вам нужна какая либо помощь, то в самой теме в обязательном порядке вы должны указывать ссылку на ваш сайт. Если ваш сайт находится в локальной сети и вы не можете предоставить ссылку, или вы не хотите публиковать открытой ссылки на ваш сайт, то отправляйте персональное сообщение с вопросом в службу поддержки непосредственно с сайта http://dle-news.ru/, вам ответят на ваш вопрос в персональном порядке, в случае если пользуетесь платной версией скрипта и обладаете лицензией на скрипт. Если вы пользуетесь демоверсией, то вам необходимо разместить сайт в сети интернет, и только потом обращаться за помощью. По находящимся на локальных компьютерах демоверсиям никакой помощи и поддержки на форуме не оказывается. Если вы не указали сайт, то ваша тема будет закрыта, а аккаунт на форуме заблокирован.

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this