Супербыстрый хостинг на SSD от 115р в месяц   •   Реклама
5 600 просм
20 комм
Поделиться:

Выводим TV-поле ресурса только в том случае, если оно заполнено в MODX Revo

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

Например, в MODX Revolution существуют так называемые TV-поля, поэтому на примере простого поля «цены» давайте рассмотрим способы его вывода.

Начинающий пользователь (а может, и не только начинающий) сделает вывод поля таким образом:

Цена: [[*price]]

Где «price» – соответственно идентификатор (имя) поля.

На что здесь стоит обратить внимание? На то, что если поле не обязательное и не заполнено, то вы получите нечто следующее:

Цена:

Что, по идее, является некой ошибкой. Покажу, как это можно исправить.

Если вы хотите выводить поле только в том случае, когда оно заполнено – первый вариант кода вы заменяете на:

[[*price:!empty=`Цена: [[*price]]`]]

Все названия вы заменяете на свои соответственно.

Если вы хотите вывести сообщение о том, что цена (или другая информация о ресурсе отсутствует), то добавьте следующий код в шаблон вашего сайта:

[[*price:empty=`Цена не указана!`]]

Где «price» – соответственно имя поля.

При использовании двух последних конструкций вместе, то есть:

[[*price:!empty=`Цена: [[*price]]`]]
[[*price:empty=`Цена не указана!`]]

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

Помимо этого, есть еще два варианта совмещенного вывода необходимой информации.

Первый - это:

[[*price:is=``:then=`Цена не указана!`:else=`Цена: [[*price]]`]]

И второй:

[[If? &subject=`[[*price]]` &operator=`notempty` &then=`Цена: [[*price]]` &else=`Цена не указана!`]]

Какой из перечисленных способов использовать - решать вам.

20
комментариев
Навигация:
1 2
13.06 в 12:20
Добрый день! Спасибо за Ваши уроки. Начинающим легче жить)))

Возник вот такой вопрос. Я вывожу на странице 5 разных слайдеров при помощи migx. В одном из слайдеров есть указатели (controls), которые реализованы при помощи fa fa-angle-up и fa fa-angle-down (из Font Awesome), это такие стрелочки вверх и вниз. Если любой из слайдеров (или все) не заполнен, то он не отображается на странице. Это работает на всех слайдерах, кроме этого (с fa fa-angle-up и fa fa-angle-down). У него отображаются именно эти стрелочки. Не могу понять, почему.. Может быть, подскажете, можно ли скрыть эти указатели, если слайдер не заполнен?
Заранее благодарю!
  • 1
Здравствуйте!

Решили проблему? Почему-то ранее не видел вашего комментария confuse
  • 0
Добрый вечер, подскажите как тоже самое проделать с переменой из конфигуратора [[++prise]]
  • 0
Артем Соколов, Здравствуйте!

Не совсем понял что за конфигуратор, поясните.
  • 0
Дополнение ClientConfig , создаю переменную . например img
Вывожу в нужно месте в шаблоне [[++img]] и если пустое, то выводится битое изображение.
вот как по подобию как с tv сделать чтобы оно выводилось только кода там значение было.
  • 0
Артем Соколов, раньше не имел дело с этим дополнением, но так, навскидку - создайте свой сниппет, передавайте в него значение [[++img]] и уже там проверяйте его содержимое.

Простой пример:

[[!my_script? &url=`[[++img]]`]]

Содержимое сниппета my_script:

<?php

if($url != "") {

echo "Ссылка на файл: ".$url;

}
  • 0
Либо, если Вы выводите изображение, то тег <img> помещайте в сниппет:

<?php

if($url != "") {

echo '<img src="'.$url.'" />';

}
  • 0
Понял, большое спасибо, буду пробовать.
  • 0
Добрый день!

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

Подскажите куда капать?!
Заранее благодарю!

Вывод сниппета:
[[!pdoPage?
&element=`pdoResources`
&resources=`-4,-6,-8,-10`
&limit=`6`
&tpl=`NEW_OBJECT`
&includeTVs=`images,price,numberAP`
&tplPageActive=`@INLINE <li class="current"><a href="[[+href]]">[[+pageNo]]</a></li>`
[[!Sort? &defsort=`createdon` &defdir=`DESC`]]
]]
<nav role="navigation">
<ul class="cd-pagination no-space" style="padding-left: 0px;">
[[!+page.nav]]
  • 0
Андрей Иванов, так сразу не подскажу. Давно не работал с MODX. Но я точно помню, что сортировку однажды я делал через свой сниппет. Сниппетом выводит материалы и в него же передавал параметры для сортировки.
  • 0
Очень жаль! Но спасибо за отклик!
А почему ушли с Modx'а?
  • 0
Помочь смогу, только есть предоставите доступы к сайту.
  • 0
Андрей Иванов, не ушел. Я работаю с 5 - 10 движками. На все время не хватает, поэтому комбинирую, то один, то другой.
  • 0
24.07 в 16:21
Здравствуйте!
А вот такой вопрос.

Нужно, чтобы строка "старая цена" выводилась только если это поле заполнено или не ноль.

Что есть:

Есть чанк под названием oldPrice. Его содержание:
<p class="special-price">

<span class="price" style="font-size: 10pt;">Старая цена</span>  

<span class="price" style="font-size: 10pt; text-decoration: line-through;"> [[+old_price]] [[%ms2_frontend_currency]] </span> </p></br></br>

И в шаблоне страницы товара вставлен чанк [[$oldPrice]].

Всё работает, но я никак не могу сделать вывод этого поля/строки, только если оно заполнено. Соответственно, часто выводится, что старая цена: 0 руб.
  • 0
Митя Иванов, здравствуйте. Если правильно понял, то попробуйте так:

[[*old_price:ne=`0`:and:if=`[[*old_price]]`:ne=``:then=`<p class="special-price">

<span class="price" style="font-size: 10pt;">Старая цена</span>

<span class="price" style="font-size: 10pt; text-decoration: line-through;"> [[+old_price]] [[%ms2_frontend_currency]] </span>

</p>

<br />
<br />`]]
  • 1
Гостям запрещено учавствовать в обсуждениях сайта. Авторизуйтесь, чтобы иметь возможность оставить свое мнение о материале или задать вопрос.
Подняться наверх