Вывод ресурсов только с заполненными TV
Добрый день!
У шаблона есть TV-параметр video, в котором код видео с ютуба. Планирую выводить с помощью pdoPage только те ресурсы, у которых заполнены соответствующие TV. Вот так не выводит:
tpl-video
Как модификатор вывода прикрутить не пойму. Может кто знает как сделать?
У шаблона есть TV-параметр video, в котором код видео с ютуба. Планирую выводить с помощью pdoPage только те ресурсы, у которых заполнены соответствующие TV. Вот так не выводит:
[[!pdoPage?
&ajaxMode=`button`
&parents=`3-100`
&element=`pdoResources`
&limit=`6` &tpl=`tpl-video`
&includeTVs=`video`
&sortby=`{"publishedon":"desc"}`
&where=`{"video":"1"}`]]
[[!+page.nav]]
tpl-video
<div class="col-md-4">
<div class="vendor">
<iframe src="https://www.youtube.com/embed/[[+tv.video]]" frameborder="0" width="100%" height="227"></iframe>
<h3>[[+pagetitle]]</h3>
<p>[[+introtext]]</p>
</div>
</div>
Как модификатор вывода прикрутить не пойму. Может кто знает как сделать?
Комментарии: 18
попробуйте так:
&where=`{"video:!=":""}
к сожалению, не работает
как вариант в tpl в первом div:
Но это конечно так себе решение.
<div class="col-md-4" style="[[+tv.video:default=`display:none;`]]">
Но это конечно так себе решение.
Тогда уж
[[+tv.video:notempty=`<div>...</div>`]]
Супер! Это лучшее решение, все работает, спасибо! В чанке так:
[[+tv.video:notempty=`
<div class="col-md-4">
<div class="video-media">
<div class="vendor"><iframe src="https://www.youtube.com/embed/[[+tv.video]]" frameborder="0" width="100%" height="227"></iframe></div>
<div class="video-text">
<div style="padding:0px 10px">
<h3>[[+pagetitle]]</h3>
<p>[[+introtext]]</p>
</div>
</div>
</div>
</div>`]]
Это лучшее решение
Это ответ скорее на бред про сокрытие с помощью стилей. А вам надо было глянуть общие параметры pdotools. Там для работы с тв отдельные настройки. Нужно вот так:[[pdoResources?
&includeTVs=`myTV`
&processTVs=`1`
&tvFilters=`myTV!=0`
...
А pdoPage как будет вызов?
Так же точно.
На самом деле, лишнего написал. &includeTVs и &processTVs не нужны. Достаточно указать только &tvFilters=`video!==`, как вам вчера тут подсказали. Если не работает – ищите неточности у себя какие-либо.
не сработало почему-то
Это решение так себе, т.к. при пагинации скрытые элементы просто не будут отображены пользователю, но все равно будут учитываться при подсчете — в итоге на каждой странице будет отображено разное количество видео.
Вообще, конкретно в вашем случае, самый правильный вариант будет примерно таким:
UPD: как альтернатива — нужно проверять тв-поле на то, чтобы оно было !=NULL и !="", т.к. до первого заполнения тв-поля его не существует в принципе в таблице, а после первого заполнения и очищения значения поле уже есть, но оно пустое.
Вообще, конкретно в вашем случае, самый правильный вариант будет примерно таким:
&where=`{"video:LIKE": "%youtube%"}
— при условии, что в тв-поле «video» у вас хранится полная ссылка до видео.UPD: как альтернатива — нужно проверять тв-поле на то, чтобы оно было !=NULL и !="", т.к. до первого заполнения тв-поля его не существует в принципе в таблице, а после первого заполнения и очищения значения поле уже есть, но оно пустое.
полный код видео скорее всего не вариант вставлять — тогда верстку и стили придется дописывать, чтобы масштабировалось.
Я скорее имел ввиду, что если у вас хранится ссылка до видео не только в виде id, а в формате:
https://www.youtube.com/watch?v=айди
или любом другом, где есть единая фраза (youtube, https, /, и тд), то вышеописанный способ вам подойдет.
Работает, но страница грузится 15 секунд и на код без слез не взглянешь) За идею спасибо!
да, согласен. Вариант Григория логичнее, если реализовывать таким путем. Но и это не совсем верно. Все таки лучше фильтровать через where
А если не через where, а tvFilters?
&tvFilters=`video!==`
Так можно еще
&where=`{"video:!=":NULL}
не сработало…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.