Профессиональная поддержка сайтов: разработка, дизайн, тексты, SEO и прочее от 500 Р   •   Реклама
6 249 просм
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
комментариев
Гостям запрещено участвовать в обсуждениях сайта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.

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

  • 0

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

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

  • 1

Добавление:

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

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

  • 1

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

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

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

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

  • 1
25.07 в 14:19

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

  • 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
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

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

  • 0

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

  • 0

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

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

  • 0

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

  • 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

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

  • 0

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

<?php

if($url != "") {

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

}

  • 0

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

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

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

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

<?php

if($url != "") {

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

}

  • 0

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

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

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

  • 0

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

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

  • 0

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

  • 0

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

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

  • 0
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
Подняться наверх
«Pandoge» - помощник веб-мастера