Спасибо.
Вопрос был решен с помощью prepare: github.com/mnoskov/pagebuilder/issues/72, github.com/mnoskov/pagebuilder/issues/73
Похожая задача, выкрутился выводом нужных полей в родительском шаблоне но может есть решение лучше
return [
        'title' => 'Images',

        'templates' => [
            'owner' => '<div class="row row-in">[+images+]<div style="display:none;">[+bclass+] [+aclass+]</div></div>',			
            'images' => '
<div class="[+bclass+]">	
	<a class="[+aclass+]" href="[+image+]" data-fancybox="gallery" data-caption="[+title+]">
			<span class="gallery-item--image" style="background-image: url([+image+]);"></span>
			<span class="gallery-item--caption-pos">
					<span class="gallery-item--caption">
						<span class="caption--title">[+title+]</span>
						<span class="caption--text">[+desc+]</span>
					</span>
			</span>
	</a>
</div>',
      	
        ],
		
        'fields' => [
			'bclass' => [
                'caption' => 'Block Class',
                'type'    => 'text',
				'default' =>  'col-xs-6 col-sm-4 col-md-4',
            ],
            'aclass' => [
                'caption'  => 'Link Class',
                'type'     => 'radio',
                'layout'   => 'horizontal',
                'elements' => 'No==gallery-item||Border==gallery-item gallery-item_bordered',
                'default'  => 'gallery-item',
            ],				
            'images' => [
                'caption' => 'Список',
                'type'    => 'group',
                'fields'  => [
                    'image' => [
                        'caption' => 'Изображение',
                        'type'    => 'image',
                    ],
					'title' => [
                        'caption' => 'Заголовок',
                        'type'    => 'text',
                    ],					
					'desc' => [
                		'caption' => 'Описание',
                		'type'    => 'textarea',
            		],		
                ],
            ],
        ],
    ];
Смотрите логи апача, там всё есть
Честно я сам хз, на сайте установлен shopkeeper, вызываю сниппет как в примере, сраница выдает ошибку 500, установил последнюю версию модуля, версия модх 1.4.5
вангануть не получится, нужно больше информации
Доброго времени суток, поскажите почему сниппет может возвращать ошибку 500
  • avatar kasperg
  • 1
разобрался, спасибо Redduck за толчок в нужном направлении
  • avatar kasperg
  • 0
всё равно в конце 0 выходит, а в phpmyadmin пишет: Индекс не определен!
нашел подобную тему в инете там пишут что это решение:
ALTER TABLE table MODIFY COLUMN id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
но чего то не получается у меня применить к базе, может что то не так пишу?
  • avatar Redduck
  • 1
Если таких полей набралось немного то можно нули в ручную поменять и потом сделать
ALTER TABLE site_tmplvar_contentvalues AUTO_INCREMENT =Х;
где X последний ID + 1
Если много то надо поколдовать
set @n=0;
update site_tmplvar_contentvalues set id=(@n:=@n+1) where id=0;

И конечно проверить структуру базы данных, вдруг еще где такое-же
  • avatar dzh0n
  • 0
Спасибо всем кто откликнулся. Как оказалось все достаточно просто.
Работать можно с событием OnBeforeDocFormSave, данные о значениях tv можно получить и установить через global $tmplvars. Приблизительно так можно получить и поменять значение tv перед сохранением документа.

$e = &$modx->event; 
if($e->name == 'OnBeforeDocFormSave') {
	global $tmplvars;
        $subtotal = $tmplvars[27][1];
        $total = $subtotal + 500;
        $tmplvars[28][1] = $total;
}
так мы не про валидацию, а чтобы введенные данные сохранялись, если по каким-то причинам (в данном случае картинка не прошла валидацию)данные из формы не были отправлены по назначению.

Введенные данные сохраняются потому что мы пишем input value="[+field.value+]", а внешние (которые к форме отношения не имеют) сохраняются параметром keepDefaults.
  • avatar paic
  • 0
так и я о том же))только для случая, если данные не отправились по причине, что какое-то поле не прошло валидацию.
Т.е. если в Ваш вызов добавить картинку с максимальным разрешенным размером файла 0,5 мб, а пользователь будет пытаться загрузить 3 мб.
Во-первых зачем проверять на ManagerMode? У тебя плагин может как-то по-другому сработать?
Во-вторых, если у тебя ОДНО событие, то делать проверку на него НЕ нужно. Проверять событие нужно тогда, когда у тебя их несколько в одном плагине.
В-третьих вместо $tmplvars можно использовать банальный $_POST))

Ну и последнее.
MGR_DIR/processors/save_content.processor.php строки: 298,505 (1.4.5)
В них вызывается OnBeforeDocFormSave, но при этом оно ничего не возвращает!) поэтому $e->output($tmplvars); — абсолютно бесполезен.
При этом проверил, на всякий случай твой код — он не работает.
  • avatar webber
  • 0
Вполне возможно, что до каких-то пор это будет продолжать работать, но вот зачем применять заведомо устаревшие решения — мне не сильно понятно :)

[!FormLister?
&defaultsSources=`document:page`
&formTpl=`@CODE:
[+page.pagetitle.value+]
<form><input name="phone" value="[+phone.value+]"></form>
`
!]

Если эту форму отправить, то после отправки page.pagetitle потеряется. Если добавить keepDefaults=`1` или keepDefaults=`pagetitle`, то не потеряется. И даже останется прежним, если в форму добавить input name=«page.pagetitle».
  • avatar EGO
  • 0
Почему же не даст? Насколько я помню приведение типов в php, сравнение true=='true' даёт результат true, поэтому обратное != вполне верно. Вот если бы было !==, тогда да.
  • avatar webber
  • 0
Просто уже достаточно давно используется true, а не «true», что, очевидно, не даст сработать плагину :)
  • avatar EGO
  • 0
Это со старого проекта, а туда скопипастил с другого плагина.
  • avatar webber
  • 0
А зачем true в кавычках?