Артём Мáлков

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

27 янв24 комм

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

Например, в 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=`Цена не указана!`]]

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

Рекомендуем к просмотру
Почему в pdoResources не выводится информация из поля «content» в MODX Revo?
Статьи и советы
Как создать и вывести пользовательское поле раздела в 1C-Bitrix?
Статьи и советы
Как с помощью своего сниппета получить данные определенного ресурса в MODX Revo?
Статьи и советы
24
комментария
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 0
    8
      •  Проверенный
    24 янв в 12:36

    Артём, могу ещё вопрос задать?...

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

    Ниже два примера. 1 - где всё, как надо, 2 - где меню всё время развёрнуто и мешает.

    Часть этого комментария скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.

    и тут тоже проблема та же:

    Часть этого комментария скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.

      • 0
      1066
        •  Команда Pandoge
      24 янв в 22:11

      Митя Иванов, у Вас много ошибок в консоли. Для начала исправьте их и если проблема не исчезнет - напишите еще раз, посмотрю в чем может быть дело.

      И на будущее - лучше задавать вопросы по теме статьи.

      • 0
      8
        •  Проверенный
      3 фев в 13:03

      Артём Мáлков, спасибо за ответ! Сам не справлюсь, не настолько профи....

      Куда Вам можно писать, чтобы не делать тематическую кашу?...

      • 0
      1066
        •  Команда Pandoge
      3 фев в 15:43

      Митя Иванов, через форму обратной связи или соц. сети.

    • 0
    8
      •  Проверенный
    24 июл в 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 руб.

      • 1
      1066
        •  Команда Pandoge
      изменено 24 янв в 22:18

      Митя Иванов, здравствуйте. Если правильно понял, то попробуйте так:

      [[*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 />
      `]]
      • 0
      8
        •  Проверенный
      25 июл в 14:19

      Артём, спасибо огромное! Работает! Изучу ваш код, разберусь, что и почему именно так :) Дабы уметь самому сии дела творить )))))))smiley

      • 1
      8
        •  Проверенный
      6 авг в 10:52

      Артём, большое спасибо за ваш ответ! Всё прекрасно работает!

      Можно вопрос не по этой теме? Я не нашёл на сайте такой темы, решил спросить тут..

      Про сортировку товаров. С плагинами getPage, getProducts, tagManager2. У меня странная проблема: в Управлении фильтрами у меня значится 4 фильтра. Есть несколько из них, где пунктов больше 4-х. В одном из них (размеры )показывается только два первых значения?!...... Представьте себе. В товарах заполнены все значения, но выводятся только два..... У других фильтров (например, форма изделия) такого нет.

      Очень странно, ибо и там, и там прописан просто текст. Поля везде заполнял по одному типу.... Всё одинаково было создано. Но фильтр размера показывает только два первых указанных значения, и всё............

      • 1
      8
        •  Проверенный
      6 авг в 10:56

      Добавление:

      Фильтр размер (иначе говоря, TV-поле одноимённое) имеет значения: 9х12 см.||13х18 см.||18х24 см.||24х35 см. Выводится только два первых!.......

      Фильтр форма имеет значения: овал||бочонок||прямоугольник со скругл. углами||прямоугольник с прямыми углами. Выводятся все...............

      • 1
      8
        •  Проверенный
      7 авг в 15:52

      Сам отвечаю. Вопрос решился очень просто: в настройках поля "размер" было указано, что тип данных - числовые. Но там присутствовали буквы (русская "х" в размере..), соответственно, обрабатывалось некорректно. Хотя странно то, что два первых значения всё-таки выводились!...

      Но зато не работает сам фильтр на странице сайта. Он сам выводится, можно ставить галочки, но от этого ничего не меняется и не фильтруется...

      • 0
      1066
        •  Команда Pandoge
      7 авг в 22:53

      Митя Иванов, как то упустил Ваши комментарии. Хорошо если проблема решилась. smiley

    • 0
    2
      •  Пользователь
    18 июл в 19:08

    Добрый день!

    Не совсем по теме, но ни как не могу решить проблему.

    Есть сайт, на нем ресурсы с карточками объектов. Есть сортировка по возрастанию и убыванию.

    Но ни как не могу сделать сортировку по 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
      1066
        •  Команда Pandoge
      18 июл в 19:15

      Андрей Иванов, так сразу не подскажу. Давно не работал с MODX. Но я точно помню, что сортировку однажды я делал через свой сниппет. Сниппетом выводит материалы и в него же передавал параметры для сортировки.

      • 0
      2
        •  Пользователь
      18 июл в 19:19

      Очень жаль! Но спасибо за отклик!

      А почему ушли с Modx'а?

      • 0
      1066
        •  Команда Pandoge
      18 июл в 19:30

      Помочь смогу, только есть предоставите доступы к сайту.

      • 0
      1066
        •  Команда Pandoge
      18 июл в 19:56

      Андрей Иванов, не ушел. Я работаю с 5 - 10 движками. На все время не хватает, поэтому комбинирую, то один, то другой.

    • 0
    3
      •  Пользователь
    2 мар в 01:44

    Добрый вечер, подскажите как тоже самое проделать с переменой из конфигуратора [[++prise]]

      • 0
      1066
        •  Команда Pandoge
      2 мар в 01:59

      Артем Соколов, Здравствуйте!

      Не совсем понял что за конфигуратор, поясните.

      • 0
      3
        •  Пользователь
      2 мар в 02:04

      Дополнение ClientConfig , создаю переменную . например img

      Вывожу в нужно месте в шаблоне [[++img]] и если пустое, то выводится битое изображение.

      вот как по подобию как с tv сделать чтобы оно выводилось только кода там значение было.

      • 0
      1066
        •  Команда Pandoge
      изменено 24 янв в 22:15

      Артем Соколов, раньше не имел дело с этим дополнением, но так, навскидку - создайте свой сниппет, передавайте в него значение [[++img]] и уже там проверяйте его содержимое.

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

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

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

      <?php
      
      	if($url != "") {
      
      		echo "Ссылка на файл: ".$url;
      
      	}
      • 0
      1066
        •  Команда Pandoge
      изменено 24 янв в 22:15

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

      <?php
      
      	if($url != "") {
      
      		echo '<img src="'.$url.'" />';
      
      	}
      • 1
      3
        •  Пользователь
      2 мар в 13:34

      Понял, большое спасибо, буду пробовать.

    • 2
    766
      •  Гости
    13 июн в 12:20

    Добрый день! Спасибо за Ваши уроки. Начинающим легче жить)))

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

    Заранее благодарю!

      • 0
      1066
        •  Команда Pandoge
      15 фев в 17:21

      Здравствуйте!

      Решили проблему? Почему-то ранее не видел вашего комментария confuse

Подняться наверх
«Pandoge» - помощник вебмастера