Как правильно выводить тв-поля?
        Всем здравствуйте. Не получается вывести значения тв-полей через феном. Чанк-шаблон для открытой работы выглядит так:
    
    
                                                                                
            <div class="col">
  <div class="image-block">
	{'!Gallery'|snippet:['album'=>$_modx->resource.pagetitle]}
  </div>
</div>
<div class="col">
  <div class="description-block">
  	<p><b>Описание: </b>{$_modx->resource.description}</p>
	<p><b>Дата выполнения работы: </b>{$_pls['$_modx->resource.portfolio-date']}</p>
	<p><b>Список выполненных работ: </b>{$_pls['$_modx->resource.portfolio-completed_tasks']}</p>
	<p><b>Комментарий к работе: </b>{$_pls['$_modx->resource.portfolio-comment']}</p>
	<p><b>О клиенте: </b>{$_pls['$_modx->resource.portfolio-about']}</p>
	<a href="{$_pls['$_modx->resource.portfolio-url']}" class="btn btn-primary">Перейти на сайт заказчика</a>
  </div>
</div>Вроде бы код верный, читал документацию, но почему то не выводит. Что я упустил? Через теги наподобие [[*portfolio-date]] всё выводит. Также пробовал через getPlaceholder(), но не помогло. Пробовал и без $_pls — тоже не вышло    Комментарии: 20
                А так если попробовать:
                    {$_pls['portfolio-date']}            
                попробовал — не вышло. ну если что — этот чанк вызывается в шаблоне таким кодом:
                    <div class="content-color">
	  <h1>{$_modx->resource.pagetitle}</h1>
	  <div class="row">
	  {$_modx->getChunk('portfolio-item-description_template')}
	  </div>
	  </div>Проверил — не влияет ли тире в названии чанка на работоспособность. Вроде не влияет.            {$_modx->resource.tv_name}или{$_modx->resource.portfolio-date} — в вашем случае            
                Для плейсхолдеров с точкой или тире нужно использовать $_pls.            
                    
                ну я пробовал с $_pls — не сработало. Может дело в чём-то другом? пробовал ещё через переменную — тоже не вышло. К примеру, такой код:
                    {var $portfolio_date = $_pls['portfolio-date']}
{$portfolio_date}            
                Да, проверил, не работает. 
Тогда почему бы не использовать верный синтаксис и переименовать переменные в соответствии с правилами?
                    Тогда почему бы не использовать верный синтаксис и переименовать переменные в соответствии с правилами?
Во многих местах MODX используются плейсхолдеры, которые нельзя указывать в Fenom, так как они не соотвествуют правилам наименования переменных PHP. Например, плейсхолдеры с точкой (MODX обычно выставляет так данные массивов) или с тире (ТВ параметры).
                Ну раз есть способ обойти, то почему бы его не использовать. Но, видимо, придётся переименовать. Попробую.            
                    
                ну да, переименование тв-полей в духе portfolio_date решило проблему, но теперь в чанке-шаблоне не срабатывает вывод ссылки. точнее, ссылка не выводит куда надо.
                    <div class="col">
  <div class="card portfolio-item {$cls}">
	<a href="{$_modx->makeUrl($id)}">
	{'!Gallery'|snippet:[
	'thumbTpl'=>'portfolio-image-thumb',
	'album'=> $pagetitle,
	'limit'=>'1'
	]}</a>
	<div class="card-body">
	  <a href={$_modx->makeUrl($id)}><h5 class="card-title">{$pagetitle}</h5></a>
	  <p class="card-text">{$introtext}</p>
	  <a href="{$portfolio_url}" class="btn btn-primary">Перейти на сайт заказчика</a>
	</div>
  </div>
</div>по идее, теперь должно работать, но ни {$portfolio_url}, ни {$_modx->getPlaceholder('portfolio_url')} почему то не срабатывает. Он выводит только на главную страницу. в &includeTVs я исправил название тв-поля. До этого вроде срабатывал код {$_pls['portfolio-url']}. Может я забыл где то исправить значение тв?            
                Покажи вызов сниппета, который этот чанк выводит.            
                    <div class="row">
{'!pdoPage' | snippet:[
'parents' => '19',
'level' => '1',
'includeTVs' => 'portfolio_url',
'tpl' => 'portfolio-item',
'sortdir' => 'ASC' ]}
{$_modx->getPlaceholder('!page.nav')}
</div>Но в коде чанка открытой работы ссылка ведёт куда нужно:<div class="col">
  <div class="image-block">
	{'!Gallery'|snippet:['album'=>$_modx->resource.pagetitle]}
  </div>
</div>
<div class="col">
  <div class="description-block">
  	<p><b>Описание: </b>{$_modx->resource.description}</p>
	<p><b>Дата выполнения работы: </b>{$_modx->resource.portfolio_date}</p>
	<p><b>Список выполненных работ: </b>{$_modx->resource.portfolio_completedTasks}</p>
	<p><b>Комментарий к работе: </b>{$_modx->resource.portfolio_comment}</p>
	<p><b>О клиенте: </b>{$_modx->resource.portfolio_about}</p>
	<a href="{$_modx->resource.portfolio_url}" class="btn btn-primary">Перейти на сайт заказчика</a>
  </div>
</div>            
                Задать в вызове пустой префикс и будет работать:
Также можно сократить:
                    'tvPrefix' => ' '
Либо если не обнулять, то будет работать так - {$_pls['tv.portfolio_url']}Также можно сократить:
{$_modx->makeUrl($id)} до {$id | url}            
                да, tvPrefix помог. Спасибо большое =) только я не пойму — почему так? Вроде и без префикса работало. Значит в аналогичных вызовах придётся тоже добавлять 'tvPrefix'=>' '?            
                    
                Все эти моменты можно прочитать в документации:
                    &tvPrefix — tv. у pdoResources и пусто у других сниппетовИсходя из того что в element pdoPage по дефолту стоит pdoResources, нужно обнулять префикс.
                аа… понял. Буду знать            
                    
                теперь какая то другая ошибка выскочила. Не отображаются картинки из галереи в списке работ. Вот код элемента работы.
В консоли браузера пишет следующее:
1. вставить этот код напрямую:
3. пробовал написать тупо {$thumbnail}
Как правильно вызывать плейсхолдер [[+thumbnail]]? Попробовал ещё добавить 'toPlaceholder'=>'thumbnail', но тоже ничего не вышло
                    <div class="col">
  <div class="card portfolio-item {$cls}">
	<a href="{$_modx->makeUrl($id)}">
	{'!Gallery'|snippet:[
	'thumbTpl'=>'portfolio-image-thumb',
	'album'=> $pagetitle,
	'limit'=>'1'
	]}</a>
	<div class="card-body">
	  <a href={$_modx->makeUrl($id)}><h5 class="card-title">{$pagetitle}</h5></a>
	  <p class="card-text">{$introtext}</p>
	  <a href="{$portfolio_url}" class="btn btn-primary">Перейти на сайт заказчика</a>
	</div>
  </div>
</div>А вот код чанка-шаблона.<img src="{$_modx->getPlaceholder('thumbnail')}" class="card-img-top img-fluid img-thumbnail"/>[[+thumbnail]] работает исправно. Вроде до этого {$_modx->getPlaceholder('thumbnail')} у меня нормально работал.В консоли браузера пишет следующее:
Failed to load resource: the server responded with a status of 403 (Forbidden)А в самом исходном коде страницы выводит это:<img src="{$_modx->getPlaceholder('thumbnail')}" class="card-img-top img-fluid img-thumbnail"/></a>Что я пробовал:1. вставить этот код напрямую:
'thumbTpl'=>'<img src="{$_modx->getPlaceholder('thumbnail')}" class="card-img-top img-fluid img-thumbnail"/>'2. пробовал написать {'thumbnail'|placeholder}3. пробовал написать тупо {$thumbnail}
Как правильно вызывать плейсхолдер [[+thumbnail]]? Попробовал ещё добавить 'toPlaceholder'=>'thumbnail', но тоже ничего не вышло
                Тут как бы всё элементарно, Gallery просто не умеет работать с Fenom, потому надо использовать стандартный синтаксис. Далеко не все дополнения, тем более старые, умеют работать с Fenom.
Если это так важно, то можно использовать ms2Gallery или UserFiles,
                    Если это так важно, то можно использовать ms2Gallery или UserFiles,
                ну не критично, просто я думал, что если оставлять стандартные теги modx, то сайт будет работать чуть медленнее, чем если бы он полностью состоял из тегов фенома. Ну и я почему то думал что все сниппеты умеют работать с феномом и поэтому хотел перевести все страницы и теги на феном. Или это не обязательно?            
                    
                Можно воспользоваться решениями вроде — https://modx.pro/help/13824#comment-90537. 
Можно джойнить в pdoResources, примерно как то так:
Или же как писал выше пользоваться решениями которые умеют в fenom из коробки.
А насчёт скорости, можно сделать два шаблона с нужными вызовами и сравнить с помощью — debugParser. Ну и раздел с тестированием производительности есть в документации — https://docs.modx.pro/komponentyi/pdotools/parser
                    Можно джойнить в pdoResources, примерно как то так:
&class=`galAlbumItem`
&loadModels=`gallery`
&select=`{
    "galAlbumItem": "*",
    "galItem": "*"
}`
&leftJoin=`{
    "galItem":{"class":"galItem", "on":"galItem.id = galAlbumItem.item"}
}`Или же как писал выше пользоваться решениями которые умеют в fenom из коробки.
А насчёт скорости, можно сделать два шаблона с нужными вызовами и сравнить с помощью — debugParser. Ну и раздел с тестированием производительности есть в документации — https://docs.modx.pro/komponentyi/pdotools/parser
                хорошо, спасибо. Ну и хотелось бы узнать — а обязательно переводить ВСЕ чанки сниппетов на феном? или оставить стандартные теги modx? Как вы обычно делаете?            
                    
                Ничего не обязательно. Просто использование fenom существенно облегчает процесс разработке. Многие вещи делать в разы удобнее и быстрее. Плюс сам сайт начинает работать быстрее.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.