Ури

Ури

Был в сети 14 октября 2020, 09:47
Заказы принимаю
Столкнулся с аналогичной проблемой. Если правильно понял, то тут пишут, что в конфигурации MIGX поля (во Вкладки формы) нужно правильно указать источник файлов. Пример:

[{"caption":"Image", "fields": 
  [
   {"field":"image","caption":"Изображение","inputTVtype":"image","sources":"[{\"MIGX_id\":\"1\",\"context\":\"web\",\"sourceid\":\"4\"}]"}
  ]
}]
Но что-то у меня с этим не срослось. Если sourceid меняю на нужный, то все равно пути правильные не отображаются. А что значит MIGX_id я что-то пока не понимаю. Видимо, и тут что-то нужно изменить. Если кто знает, подскажите, пожалуйста, что означает MIGX_id в этом коде. Про контекст и айди источника файлов, вроде понятно.
Все верно, проект совсем не обязательно должен быть сложным. Просто хочется иметь возможность разнообразно оформлять информацию на странице с помощью понятного билдера.
При этом, чтобы можно было самостоятельно добавлять свои блоки в билдер с нужной структурой (версткой).
Да какие обиды ) Просто я не профи, много чего не умею. Ковыряю всего понемногу в силу возможностей. Делаю простенькие сайты-визитки за пару-тройку тысяч рублей. При таких доходах покупка таких компонентов себя не оправдывает )
За ссылки на другие решения спасибо, буду изучать!
Да, чем-то похоже ) Но цена в 79 евро за сайт останавливает от его использования… А для Evolution CMS это расширение Page Builder является бесплатным. Почувствуйте разницу ))) Я был бы за покупку подобного расширения для сайта, но за вменяемые деньги ))
Не могу ответить на ваш вопрос. Пользуюсь MODX с версии 2.4.2. Обновления всегда проходили хорошо. После новой установки создается необходимая структура в таблицах базы данных. Возможно, что правильнее было бы в пятом шаге не очищать таблицу полностью, а накатить свой дамп поверх созданной структуры.
Вы про это
&resources=`[[+tv.sklad-id]]`
?
Если да, то изначально так и пробовал делать, но так не работает.
По аналогии запись
[[+id]]
в выборке складов формирует айдишники складов.
Таким образом сейчас запись
&resources=`[[+tv.sklad-id]]`
в выборке складов будет искать значения дополнительных полей 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
Спасибо! Для текущего ресурса такой вариант отрабатывает хорошо. Значение TV попадает в плейсхолдер skladID.
А как быть, если сниппет

[[!sklady]]

должен вызываться внутри выборки pdoResources? Например, если это страница категории? В этом случае конструкция

$modx->setPlaceholder('skladID', $idskladov);

вставляет в плейсхолдер skladID значение TV самой страницы категории, а нужно вставлять значения TV элементов выборки pdoResources
Если просто записать в шаблоне [[+nn7]], то на странице сайта ничего не выводится (пустое место), т.к. на момент загрузки страницы форма еще не заполнена, следовательно плейсхолдер [[+nn7]] и ему подобные еще не сформированы. А отправляется форма через Ajax компонентом AjaxForm. Следовательно страница не перезагружается. В общем, на момент загрузки страницы этому плейсхолдеру неоткуда взяться, чтобы он выводился в шаблоне.
Быть может, в чанке sentEmailTpl, формирующем отправляемое письмо, сниппет pdoResources отрабатывает еще до того, как он вызывается через AjaxForm? Тогда получается, что плейсхолдеры еще не были сформированы…
Есть предположение, что сниппет отрабатывает раньше, чем плейсхолдеры инициализируются. Поэтому вместо значения сниппета выводится сам текст, сниппет задающий.
Но так ли это, я понятия не имею ) А быть может, плейсхолдеры в сниппетах надо выводить как-то особым образом…
На сколько я понимаю, при использовании AjaxForm плейсхолдеры сами формируются исходя из параметров name тегов input и заполняются автоматически теми значениями, что были введены пользователем в форме (если инпуты не заполнялись, то плейсхолдеры пустые).

Например, если в чанке форме мы делаем поле
<input type="text" class="form-control" name="email" id="af_email" value="">
, то плейсхолдер [[+email]] сам создается автоматически (из параметра name поля) и заполняется введенным значением в соответствующий input.

При этом в чанке sentEmailTpl, формирующем отправляемое письмо, для отправки заполненного поля email мы пишем:
Email: [[+email]]
Т.е. плейсхолдеры создаются и заполняются автоматически. Как-то специально я их не заполняю.