dmlogv
@dmlogv
Универсальный человек

Ditto теряет плэйсхолдеры при выводе

Сразу пример из жизни.
Есть MODx Evo, есть такой вызов Ditto:
<section class="news">
	<header>
		<h1>{{resource-title}}</h1>
	</header>
	[[Ditto? 
		&tpl=`ditto-news-item` 
		&dateFormat=`%d.%m.%Y`
		&hiddenFileds=`pagetitle,longtitle,content,introtext,readmore,news-image,date`
		&debug=1
	]]
</section>


Чанк ditto-news-item:
<article class="news-item">
	<header>
		[+news-image+]
		<date class="date">
			[+date+]
		</date>
		<h2>
			{{resource-title-tpl}}
		</h2>
	</header>
	{{if-intro-tpl}}
	{{if-readmore-tpl}}
	{{if-main-tpl}}
</article>


Чанк if-intro-tpl:
[+introtext:ne=``:then=`<section class="pre"><p>[+introtext+]</p></section>`:else=``+]


Если запустить все это дело, то в странице ресурс-тайтла и интротекста мы не увидем — от них останется только окружающая разметка. Но если взять код из последнего чанка и сделать как-то так:
<article class="news-item">
	<header>
		[+news-image+]
		<date class="date">
			[+date+]
		</date>
		<h2>
			<!--{{resource-title-tpl}}--> [+longtitle:ne=``:then=`[+longtitle+]`:else=`[+pagetitle+]`+]
		</h2>
	</header>
	<!--{{if-intro-tpl}}-->[+introtext:ne=``:then=`<section class="pre"><p>[+introtext+]</p></section>`:else=``+]
	{{if-readmore-tpl}}
	{{if-main-tpl}}
</article>


соответствующие строки отобразятся. При этом, как видно, вызов чанка из другого чанка поддерживается (HTML вставился), теряются только плейсхолдеры
  • Вопрос задан
  • 3008 просмотров
Пригласить эксперта
Ответы на вопрос 3
dmlogv
@dmlogv Автор вопроса
Универсальный человек
Не путаете, но не помогает, так же как и снятие галки кэширования у ресурса. Так же, как и очистка кэша MODx полностью.
Ответ написан
Комментировать
ertaquo
@ertaquo
Насколько помню, Ditto не обрабатывает вложенные чанки, и они обрабатываются парсером modx после вызова сниппета.
Попробуйте в assets/snippets/ditto/classes/ditto.inc.php возле 259 строки переписать так:
	function render($resource, $template, $removeChunk,$dateSource,$dateFormat,$ph=array(),$phx=1,$x=0) {
Ответ написан
dmlogv
@dmlogv Автор вопроса
Универсальный человек
Что-то я ничего не понял: закомментировал в темплейте дитто вызов чанка и рядом вписал плэйсхолдер с phx. Смотрю в код — всё генерируется, в комментариях тоже! Как так-то?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы