Засунуть TV в плейсхолдер
Приветствую, друзья! Помогите, пожалуйста, разобраться, как запихнуть значение TV в плейсхолдер?
Задача: требуется запихнуть значение TV с названием sklad-id (тип ввода — текст) в плейсхолдер skladID
Что было сделано:
1) TV с именем sklad-id заполнено значением: 45,39 (просто через запятую перечисляются id нужных складов)
2) Для заполнения плейсхолдера нужным значением был создан сниппет sklady со следующим содержимым:
Перед тем, как вызывать плейсхолдер skladID, делаю вызов сниппета [[sklady]] для инициализации плейсхолдера. Далее когда вызываю
вместо ожидаемого значения 45,39, введенного ранее в тв, получаю:
А мне нужно в плейсхолдере вывести точно такое же значение, какое было в твшке…
Задача: требуется запихнуть значение TV с названием sklad-id (тип ввода — текст) в плейсхолдер skladID
Что было сделано:
1) TV с именем sklad-id заполнено значением: 45,39 (просто через запятую перечисляются id нужных складов)
2) Для заполнения плейсхолдера нужным значением был создан сниппет sklady со следующим содержимым:
// в переменную idskladov получаем значение из твешки sklad-id
$idskladov = $modx->resource->get('sklad-id');
// в плейсхолдер skladID запихиваем полученную переменную
$modx->setPlaceholder('skladID', '$idskladov');
Перед тем, как вызывать плейсхолдер skladID, делаю вызов сниппета [[sklady]] для инициализации плейсхолдера. Далее когда вызываю
[[+skladID]]
вместо ожидаемого значения 45,39, введенного ранее в тв, получаю:
Array ( [0] => sklad-id [1] => [2] => default [3] => [4] => text )
А мне нужно в плейсхолдере вывести точно такое же значение, какое было в твшке…
Комментарии: 18
$modx->resource->getTVValue('tvvalue')
Михаил, правильно ли я понимаю, что приведенная вами запись будет работать для текущего ресурса? Подскажите, пожалуйста, как будет выглядеть запись для использования в чанке?
1.
$idskladov = $modx->resource->getTVValue('sklad-id');
2. Кавычки возможно не те, уберите$modx->setPlaceholder('skladID', $idskladov);
3. Думаю, что сниппет нужно вызывать не кешированным (не факт, что обязательно):[!sklady!]
На evo заработался:) 3 — так
[[!sklady]]
Спасибо! Для текущего ресурса такой вариант отрабатывает хорошо. Значение TV попадает в плейсхолдер skladID.
А как быть, если сниппет
должен вызываться внутри выборки pdoResources? Например, если это страница категории? В этом случае конструкция
вставляет в плейсхолдер skladID значение TV самой страницы категории, а нужно вставлять значения TV элементов выборки pdoResources
А как быть, если сниппет
[[!sklady]]
должен вызываться внутри выборки pdoResources? Например, если это страница категории? В этом случае конструкция
$modx->setPlaceholder('skladID', $idskladov);
вставляет в плейсхолдер skladID значение TV самой страницы категории, а нужно вставлять значения TV элементов выборки pdoResources
Немного поменять архитектуру, — в сниппете должны приниматься параметры, и он должен принимать параметры, как то так:
[[!sklady? &id=`[[*id]]`]]
внутри выборки так:[[!sklady? &id=`[[+id]]`]]
или типа того… А лучше продумайте архитектуру
Да, архитектура получилась запутанная )
Андрей, помогите, пожалуйста переписать этот кусочек кода
так, чтобы он вытягивал ТВ sklad-id' с учетом полученного
Андрей, помогите, пожалуйста переписать этот кусочек кода
$idskladov = $modx->resource->getTVValue('sklad-id');
так, чтобы он вытягивал ТВ sklad-id' с учетом полученного
[[+id]]
resource->getTVValue
понятно что getTVValue получает тв из ресурса. если вам нужен другой ресурс, получите его например с помощью getObject, а затем получите из него нужный вам твif ($resource = $modx->getObject('modResource', $id)) {
$idskladov = resource->getTVValue('sklad-id');
}
Владимир, на ваш код появляется синтаксическая ошибка unexpected t_object_operator — в чем может быть проблема?
Знак $ пропустил перед resource наверно оттого. Учитесь проверять код…
Стараюсь ) Просто уже второй день затык с этой задачей, голову сломал, туплю уже жестко )
Может вопрос поставлен неверно? Зачем вам запихивать sklad-id в skladID, чем не устраивает нативный плейсхолдер sklad-id? Приведите код
Андрей, сейчас постараюсь обрисовать ситуацию. Код приведу ниже.
Стоит задача вывести таблицу продукции, где столбцы это: Наименование товара, Спецификация, Склад, Цена с НДС, Цена без НДС. Соответственно строки это отдельный вид продукции.
Решил виды продукции сделать отдельными ресурсами с дополнительными полями.
В ячейке продукции «Склад» нужно будет указать склады (дополнительное поле sklad-id, где через запятую перечисляю айдишники нужных складов — склады тоже отдельные ресурсы). Каждый склад будет отображаться в таблице в виде ссылки, щелкая по которой будут отображаться контакты менеджеров выбранного склада, отвечающих за выбранный тип продукции во всплывающем окне.
В основном таблицу продукции получается вывести без проблем, кроме ячеек со складами. Для вывода ресурсов продукции (строк таблицы) использую pdoResources. Для вывода складов в ячейке «Склад» тоже использую выборку pdoResources, где в параметр
Итого у меня получается ситуация, когда я внутри одной выборки pdoResources (когда формирую виды продукции в строках таблицы) использую еще одну выборку pdoResources (для формирования нужного списка складов).
Проблема заключается в том, что я во внутреннюю выборку pdoResources, формирующую склады в ячейке, не могу в параметр
Поэтому я решил при формировании строки с видом продукции (во внешней выборке pdoResources) в плейсхолдер skladID запихнуть значение дополнительного поля sklad-id ресурса продукции. А далее я этот плейсхолдер хочу использовать уже во внутренней выборке pdoResources, формирующей склады, засунув его в параметр
Надеюсь, получилось пояснить задумку.
Для вывода таблицы продукции получил такой код:
Код сниппета sklady по подсказке Владимира сейчас имеет вид:
Но почему-то данный сниппет не отлавливает значение дополнительного поля sklad-id
Стоит задача вывести таблицу продукции, где столбцы это: Наименование товара, Спецификация, Склад, Цена с НДС, Цена без НДС. Соответственно строки это отдельный вид продукции.
Решил виды продукции сделать отдельными ресурсами с дополнительными полями.
В ячейке продукции «Склад» нужно будет указать склады (дополнительное поле sklad-id, где через запятую перечисляю айдишники нужных складов — склады тоже отдельные ресурсы). Каждый склад будет отображаться в таблице в виде ссылки, щелкая по которой будут отображаться контакты менеджеров выбранного склада, отвечающих за выбранный тип продукции во всплывающем окне.
В основном таблицу продукции получается вывести без проблем, кроме ячеек со складами. Для вывода ресурсов продукции (строк таблицы) использую pdoResources. Для вывода складов в ячейке «Склад» тоже использую выборку pdoResources, где в параметр
&resources
хочу передать значения из дополнительного поля sklad-id ресурса вида продукции (чтобы из всего множества складов в ячейке вывести только те, где есть данная продукция).Итого у меня получается ситуация, когда я внутри одной выборки pdoResources (когда формирую виды продукции в строках таблицы) использую еще одну выборку pdoResources (для формирования нужного списка складов).
Проблема заключается в том, что я во внутреннюю выборку pdoResources, формирующую склады в ячейке, не могу в параметр
&resources
запихнуть значение дополнительного поля sklad-id ресурса с видом продукции.Поэтому я решил при формировании строки с видом продукции (во внешней выборке pdoResources) в плейсхолдер skladID запихнуть значение дополнительного поля sklad-id ресурса продукции. А далее я этот плейсхолдер хочу использовать уже во внутренней выборке pdoResources, формирующей склады, засунув его в параметр
&resources
.Надеюсь, получилось пояснить задумку.
Для вывода таблицы продукции получил такой код:
<div class="divtable"> <!-- Вывожу заголовки таблицы -->
<div class="divtable-row divtable-row__title">
<div class="divtable-col divtable-col__name">Наименование товара</div>
<div class="divtable-col divtable-col__spec">Спецификация</div>
<div class="divtable-col divtable-col__adr">Склад</div>
<div class="divtable-col divtable-col__nds">Цена с НДС за тонну СРТ*</div>
<div class="divtable-col divtable-col__nonds">Цена без НДС за тонну</div>
</div>
<!-- Первая выборка формирует строки таблицы с видами продукции -->
[[!pdoResources?
&tpl=`@INLINE
<div class="divtable-row">
<div class="divtable-col divtable-col__name">[[+pagetitle]]</div>
<div class="divtable-col divtable-col__spec">[[#[[+id]].specifikaciya]]</div>
<div class="divtable-col divtable-col__adr">
<!-- Вызываю сниппет, где должен формироваться плейсхолдер со значением из дополнительного поля sklad-id -->
[[!sklady? &id=`[[+id]]`]]
<!-- Запускаю выборку нужных складов в ячейке Склад, где в параметр &resources хочу подсунуть полученный плейсхолдер skladID, который должен содержать нужные айдишники складов из дополнительного поля ресурса продукции sklad-id -->
[[!pdoResources?
&parents=`28`
&tplWrapper=`@INLINE <ol> [[+output]]</ol>`
&tpl=`@INLINE <li><a class="popup-modal" href="#[[+id]]">[[#[[+id]].pagetitle]]</a></li>`
&sortby=`publishedon`
&sortdir=`DESC`
&depth=`0`
&includeTVs=`sklad-id`
&resources=`[[+skladID]]`
]]
</div>
<div class="divtable-col divtable-col__nds">[[#[[+id]].nds]]</div>
<div class="divtable-col divtable-col__nonds">[[#[[+id]].nonds]]</div>
</div>
`
&sortby=`menuindex`
&sortdir=`ASC`
&parents=`21`
&depth=`0`
&includeTVs=`specifikaciya,sklad,sklad-id,nds,nonds`
]]
</div>
Код сниппета sklady по подсказке Владимира сейчас имеет вид:
if ($resource = $modx->getObject('modResource', $id)) {
$idskladov = $resource->getTVValue('sklad-id');
}
$modx->setPlaceholder('skladID', $idskladov);
Но почему-то данный сниппет не отлавливает значение дополнительного поля sklad-id
бедный сервер:(… Как писал выше, все это полностью нужно переписать… На сейчас думаю поможет следующее:
Копируете сниппет sklady например в sklady1, содержание:
Копируете сниппет sklady например в sklady1, содержание:
$idskladov = "";
if ($resource = $modx->getObject('modResource', $id)) {
$idskladov = $resource->getTVValue('sklad-id');
}
return $idskladov;
Убираете вызов[[!sklady? &id=`[[+id]]`]]
И вместо&resources=`[[+skladID]]`
вставляете&resources=`[[!sklady1? &id=`[[+id]]`]]`
не уверен, правда, что парсер это переварит
Пока знаний не хватает сделать правильнее )
Сделал, как вы написали, но вместо нужных складов (указанных в дополнительном поле), выводятся все. Кажется, сниппет не отлавливает значение тв…
Андрей, если я вам доступы дам к сайту, а вы бы там пошаманили, сколько бы стоили ваши услуги, чтобы разобраться с такой логикой?
Сделал, как вы написали, но вместо нужных складов (указанных в дополнительном поле), выводятся все. Кажется, сниппет не отлавливает значение тв…
Андрей, если я вам доступы дам к сайту, а вы бы там пошаманили, сколько бы стоили ваши услуги, чтобы разобраться с такой логикой?
Тупанул слегка… Хотя работать должно… Почему не используете плейсходеры
напоминает чем то анекдот, как текст распечатали, потом отсканировали, картинку вставили в ворд и отправили
<div class="divtable"> <!-- Вывожу заголовки таблицы -->
<div class="divtable-row divtable-row__title">
<div class="divtable-col divtable-col__name">Наименование товара</div>
<div class="divtable-col divtable-col__spec">Спецификация</div>
<div class="divtable-col divtable-col__adr">Склад</div>
<div class="divtable-col divtable-col__nds">Цена с НДС за тонну СРТ*</div>
<div class="divtable-col divtable-col__nonds">Цена без НДС за тонну</div>
</div>
<!-- Первая выборка формирует строки таблицы с видами продукции -->
[[!pdoResources?
&tpl=`@INLINE
<div class="divtable-row">
<div class="divtable-col divtable-col__name">[[+pagetitle]]</div>
<div class="divtable-col divtable-col__spec">[[+tv.specifikaciya]]</div>
<div class="divtable-col divtable-col__adr">
<!-- Запускаю выборку нужных складов в ячейке Склад, где в параметр &resources хочу подсунуть полученный плейсхолдер skladID, который должен содержать нужные айдишники складов из дополнительного поля ресурса продукции sklad-id -->
[[!pdoResources?
&parents=`28`
&tplWrapper=`@INLINE <ol> [[+output]]</ol>`
&tpl=`@INLINE <li><a class="popup-modal" href="#[[+id]]">[[+pagetitle]]</a></li>`
&sortby=`publishedon`
&sortdir=`DESC`
&depth=`0`
&includeTVs=`sklad-id`
&resources=`[[+tv.sklad-id]]`
]]
</div>
<div class="divtable-col divtable-col__nds">[[+tv.nds]]</div>
<div class="divtable-col divtable-col__nonds">[[+tv.nonds]]</div>
</div>
`
&sortby=`menuindex`
&sortdir=`ASC`
&parents=`21`
&depth=`0`
&includeTVs=`specifikaciya,sklad,sklad-id,nds,nonds`
]]
</div>
напоминает чем то анекдот, как текст распечатали, потом отсканировали, картинку вставили в ворд и отправили
Вы про это
Если да, то изначально так и пробовал делать, но так не работает.
По аналогии запись
Таким образом сейчас запись
&resources=`[[+tv.sklad-id]]`
?Если да, то изначально так и пробовал делать, но так не работает.
По аналогии запись
[[+id]]
в выборке складов формирует айдишники складов.Таким образом сейчас запись
&resources=`[[+tv.sklad-id]]`
в выборке складов будет искать значения дополнительных полей sklad-id у складов, хотя нужные дополнительные поля заполняются для видов продукции
tpl попробуйте перенести в чанк (вместо @INCLUDE)
и
во вложенном pdoResources
и
<!-- Запускаю выборку нужных складов в ячейке Склад.....
перед ним проверку нужно сделать, что tv.sklad-id не пустойво вложенном pdoResources
&includeTVs=`sklad-id`
лишнее — не используется
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.