Здоров Александр

Здоров Александр

С нами с 31 октября 2015; Место в рейтинге пользователей: #76
Александр
18 июня 2016, 13:26
1
+2
Вы у самого модефикатора то условие не описали, точнее условие у вас сейчас такое что, ваше тв не чего не выдает если имеет значение «пусто;» и во всех других выдает свое значение, а надо примерно так:
[[+tv.add:is=``:then=`пусто;`:else=`[[+tv.add]]`]]
Павел Романов
30 мая 2016, 11:38
2
+1
В первом случае Вы просто указываете конкретную TV-шку, которую брать в качестве основы для вывода (привязывать к шаблонам ее не обязательно). Удобно, если используется отдельный источник файлов.
Во втором случае вы указываете только тип TV, который использовать. В данном случае источник файлов будет умолчальным.

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

Идете в MIGX и создаете новую конфигурацию:



Указываете название:



Добавляете форму:



и поле нужного типа:



Можете указать свой источник файлов:



Сохраняете форму и добавляете нужные колонки и настройки:



Рендер для поля:



Если нужно, редактор:


Сохраняете все.

Ну а в TV просто прописываете имя конфигурации:



Для копирования конфигураций можно использовать импорт/экспорт:


Николай Загумённов
28 мая 2016, 23:40
4
+3
Выяснил, что можно использовать для этих целей UserFiles.
Надо только добавить плагин, который буде срабатывать после сохранения комментария (событие — OnCommentSave). Вообще очень много открыл для себя с этими плагинами =) В таблице компонента меняю поле parent на id созданного комментария.
<?php
// TicketCommentSave
switch ($modx->event->name) {
    case 'OnCommentSave':
        // $modx->log(1, print_r(array_keys($scriptProperties), 1));
        if ($mode == 'new') {
        	// >> Подключаем UserFiles
			$corePath = $modx->getOption('userfiles_core_path', null, $modx->getOption('core_path', null, MODX_CORE_PATH) . 'components/userfiles/');
			$UserFiles = $modx->getService('UserFiles', 'UserFiles', $corePath . 'model/userfiles/', array('core_path' => $corePath));
			// << Подключаем UserFiles
			
			$user_id = $modx->user->id; // id Авторизованного пользователя
			
			$files = $modx->getCollection('UserFile', array('parent' => $user_id));
			foreach ($files as $file) {
				$file->set('parent', $id);
				$file->save();
				if ($children = $file->getMany('Children')) {
					foreach ($children as $child) {
						$child->remove();
					}
					$file->generateThumbnails();
				}
			}
        }
    break;
}
В чанке формы добавления комментария надо добавить сам сниппет ufForm:
[[!ufForm?
	&class=`modUser`
	&list=`comment`
	&dropzone=`{"maxFilesize":2,"maxFiles":5,"acceptedFiles":".jpg, .jpeg, .gif, .png","template":"edit"}`
]]
В чанке одного комментария(tpl.Tickets.comment.one.auth) добавить:
Должна быть включена поддержка fenom в настройках pdotools.
{$_modx->runSnippet('!pdoResources', [
	'limit' 			=> 10,
	'showLog'			=> 1,
	'class' 			=> 'UserFile',
	'loadModels' 		=> 'UserFiles',
	'sortby' 			=> '{"rank":"ASC"}',
	'tpl' 				=> '@INLINE <div class="item pull-left>
						        <a href="{$url}" rel="fancybox"><img src="{$thumb}" alt=""></a>
						    </div>',
	'where' 			=> '{
						        "UserFile.parent": ' ~ $id ~ ',
						        "UserFile.createdby": '~ $createdby ~'
						        
						    }',
	'leftJoin' 			=> '{
								"Thumb": {
									"class": "UserFile",
									"on": "Thumb.parent = UserFile.id AND Thumb.properties LIKE \'%w\":120,\"h\":90%\'"
								}
						    }',
	'select' 			=> '{
								"UserFile": "url",
								"Thumb": "Thumb.url as thumb"
						    }',
])}
Будет работать только для авторизованных пользователей, так как их id мы заполняем в parent таблицы компонента UserFiles.
Максим Кузнецов
25 мая 2016, 02:32
1
+1
Зачем pdoParser/сниппет, если есть leftJoin?

'leftJoin' => '{
	"Parent": { 
		"class": "modResource",
		"alias": "Parent",
		"on": "Parent.id=modResource.parent"
	}
}',
'select' => '
	"Parent": "Parent.alias as parent_alias",
	//...
'
Alexey T
18 мая 2016, 14:40
2
+1
Если fenom включен — то можно так
{if $_modx->resource.price > '3499'}Бесплатно
{else}Платно
{/if}
Алексей Федоров
30 апреля 2016, 19:37
2
+1
Как гласит народная мудрость, «Велосипед изобретать — время терять». Путь истинный
Андрей
25 апреля 2016, 16:20
2
0
Сергей, решил проблему «в лоб». Так как окно несет чисто информационный характер и никакого сложного функционала не выполняет, то было решено передать нужные параметры через data- атрибуты.
Подписываем к кнопке «В корзину»:
data-pname="[[+pagetitle:stripString=`"`]]" data-pimg="[[+thumb]]" data-pprice="[[+price]]"
А снизу такой скрипт и разметка.
Стили на свой вкус.
<script>
$(document).on('click','button.btn-submit',function(e){
	var pid = $(this).data('pid') || 0;
	var pname = $(this).data('pname');
	var pimg = $(this).data('pimg');
	var pprice = $(this).data('pprice');
	$('#pname').empty();
	$('#pprice').empty();
	$('#modal_img').empty();
	$('#pname').prepend(pname);
	$('#pprice').prepend(pprice);
	$('#modal_img').prepend('<img src="'+pimg+'" id="modal-img" width="100"/>')
	$('.modal_cart').fadeIn("normal");
});
</script>
<div class="modal_cart" style="display: none;">
    <div class="modal_content">
        <div class="closebox"><a href="#" class="close-btn deletemodal"></a></div>
        <h3><i class="fa fa-check"></i> Товар добавлен в корзину</h3>
        <div class="modal_info">
        	<div id="modal_img"></div>
            <strong id="pname"></strong>
            <div class="mod_price">Цена: <span class="price" id="pprice"></span> <i class="fa fa-rub"></i></div>
            <div class="clearfix"></div>
        <div class="buttons_modals">
            <a class="button_stay" href="javascript:;" onclick="jQuery('.modal_cart').hide()">Продолжить покупки</a>
            <a class="btn btn-default" href="/cart.html" style="padding: 15px 20px;">Оформить заказ</a>
        </div>
        </div>
    </div>
</div>
Знаю, что костылями пахнет)))
Кто поможет все упростить и сделать по фен-шую, буду благодарен))
Константин
04 марта 2016, 15:30
7
+1
Недавно делал на сайте вот так:

Вызов сниппета через AjaxForm
[[!AjaxForm?
	&snippet=`QuickOrder`
	&form=`order.form`
]]

И вот сам сниппет QuickOrder
<?php
$errors = array();

if ( empty( trim( $_POST['total'] ) ) OR !is_numeric( trim( $_POST['total'] ) ) ) {
    $errors['total'] = 'Вы не заполнили кол-во человек';
}

if ( empty( trim( $_POST['phone'] ) ) ) {
    $errors['phone'] = 'Вы не заполнили телефон';
}

if ( !empty( $errors ) ) {
    return $AjaxForm->error( 'В форме содержатся ошибки!', $errors );
} else {
    $miniShop2 = $modx->getService( 'minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties );

    if ( !( $miniShop2 instanceof miniShop2 ) ) {
        return $AjaxForm->error( 'Ошибка скрипта!' );
    }
    
    $miniShop2->initialize($modx->context->key, $scriptProperties);
    
    $miniShop2->order->add( 'receiver', trim( $_POST['receiver'] )  );
    $miniShop2->order->add( 'email', trim( $_POST['email'] ) );
    $miniShop2->order->add( 'delivery', 1 ); // id метода доставки
    $miniShop2->order->add( 'payment', 1 ); // id метода оплаты
    
    $miniShop2->cart->add($_POST['id'], $modx->getOption('count', $_POST, 1), $modx->getOption('options', $_POST, array()));
    
    return $AjaxForm->success( 'Форма успешно отправлена. Сейчас вы перейдете на страницу оплаты.' );
}

JS Callback для отправки формы:
$( document ).on('af_complete', function( event, response ) {
    if( response.success ) {
        response.form[0].submit();
    }
})
Дмитрий Кондаков
05 января 2016, 12:25
1
+2
Попробуй так:
[[!pdoResources? 
  &tpl=`tpl-news` 
  &parents=`2,3`
  &limit=`8`
  &tplCondition=`parent`
  &conditionalTpls=`{ "3":"tpl-news-2" }`
]]
Воеводский Михаил
28 декабря 2015, 22:54
1
+1
Тогда уж так:

[[[[*id:ne=`id ресурса на котором не показывать`:then=`$чанк с новостями`:else=`-`]]]]