Василий Столейков

Василий Столейков

С нами с 19 декабря 2012; Место в рейтинге пользователей: #25
Отправить деньги
Василий Наумкин
15 марта 2015, 12:34
2
+1
А ведь и правда, работает. Нужно только отключить вывод "… назад":
[[!dateAgo?
	&input=`2015-03-16 12:45:00`
	&dateHours=`0`
	&dateMinutes=`0`
	&dateNow=`0`
]]
Выводит
Завтра в 12:45

Сам себя иногда удивляю =)
Пётр Молчанов
12 марта 2015, 12:24
1
+1
вдруг кому-то поможет (с использованием пэйдж):
[[!pdoPage?
        &element=`pdoUsers`
        &groups=`4`
        &tpl=`userCardPro`
        &select=`{"modUserSetting":"key, value as photop_add_date"}`
        &innerJoin=`{
    		"modUserSetting":{"class":"modUserSetting","on":"modUser.id=modUserSetting.user"}
    	}`
    	&where=`{"modUserSetting.key":"photop_add_date"}`
        &sortby=`photop_add_date`
        &limit=`9`
        &sortdir=`asc`
    ]]
Василий Наумкин
09 марта 2015, 14:45
1
0
Ты подключаешь комменты к ветке, а саму ветку не подключаешь — об этом и ошибка.
[[!getTickets?
	&parents=`0`
	&sortdir=`DESC`
	&sortby=`comments`
	&select=`{"Comment":"COUNT(DISTINCT Comment.id) as comments"}`
	&leftJoin=`{
		"Thread":{"class":"TicketThread","on":"Thread.resource=Ticket.id"},
		"Comment":{"class":"TicketComment","on":"Comment.thread=Thread.id"}
	}`
	&showLog=`1`
]]
Василий Наумкин
01 марта 2015, 21:17
2
0
А есть вообще смысл использовать объекты xPDO?

Гораздо проще и быстрее будет использовать:
if ($c->prepare() && $c->stmt->execute()) {
	while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) {
		print_r($row);die;
	}
}
Максим Кузнецов
19 февраля 2015, 06:52
2
+1
Добрый. Вы имеете ввиду с фронтэнда (в админке есть соответствующие переключатели)?

Тогда можно реализовать так (привожу простой пример-портянку, по-чистому выйдет довольно много изменений):
а) создаем 2 tv и присваиваем нужным шаблонам (их можно скрыть в админке) — ticket_pub_date и ticket_unpub_date

б) подключаем тв в вызов TicketForm и создаем необходимые формы в шаблоне (инпуты для даты, можно навесить маски с jquery, например datetimepicker)

в) создаете плагин на событие OnDocFormSave, перехватывающий значение полей и вставляющих их в pub_date и unpub_date:
<?php
	if ($modx->event->name == 'OnDocFormSave') {
		$pub_value = $resource->getTVValue('ticket_pub_date');
		$unpub_value = $resource->getTVValue('ticket_unpub_date');
		
		if (strlen($pub_value) > 0) {
			$resource->set('pub_date',$pub_value);
		}
		if (strlen($unpub_value) > 0) {
			$resource->set('unpub_date',$unpub_value);
		}
		
		$resource->save();
	}
Наумов Алексей
12 февраля 2015, 14:14
3
0
[[!getTickets:default=`<p class="warning">У вас нет ни одного черновика.</p>`?
  &tpl=`blogs.Post.Draft.Row`
  &limit=`0`
  &parents=`0`
  &fastMode=`1`
  &showUnpublished=`1`
  &user=`[[+modx.user.id]]`
  &where=`{"published": 0}`
]]
Rootiys
08 февраля 2015, 22:08
3
0
Добавь это:
1. Имя: [[+address.receiver]] 
2. Телефон: [[+address.phone]] 
3. Email: [[+user.email]] 
4. Комментарий: [[+address.comment]] 
5. Индекс: [[+address.index]] 
6. Область: [[+address.region]] 
7. Город: [[+address.city]] 
8. Улица: [[+address.street]] 
9. Дом: [[+address.building]] 
10. Квартира: [[+address.room]]
Володя
05 февраля 2015, 19:53
2
+3
<?php
if ($modx->event->name == 'OnBeforeDocFormSave') {

    if($resource->get('class_key') !== 'msProduct') {return;}
    $article = $resource->get('article');
    if(empty($article)) {return;}
    if($count = $modx->getCount('msProductData', array('article' => $article ))) {

        $response = array(
			'success' => false,
			'message' => 'Продукт с таким артикулом уже существует',
			'data' => array(),
		);

		echo $modx->toJSON($response);
		exit;
        
    }

}
Илья Уткин
02 февраля 2015, 21:32
1
0
[[*gallery:default=`[[*text]]`:eq=``:then=`Пусто`:else=``]]
Максим Кузнецов
31 января 2015, 21:35
5
+3
Помогу с решением.

Вызываем сниппет Login:
[[!Login? &loginTpl=`fastLoginTpl` &errTpl=`fastLoginError`]]

Чанк формы для авторизации fastLoginTpl:
<div style="display: none;" id="authErrors">[[+errors]]</div>
<form class="loginForm" id="iWannaLogin" action="[[~[[*id]]]]" method="post">
	<div class="login">
		<input id="loginForm" name="username" class="roundInput" type="text" placeholder="Логин" title="Ваш логин">
	</div>
	<div class="password">
		<input id="passwordForm" name="password" class="roundInput" type="password" placeholder="Пароль" title="Ваш пароль">
	</div>
	
	<input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]" />
	<input class="loginLoginValue" type="hidden" name="service" value="login" />
	
	<div class="submit">
		<a rel="nofollow" href="[[~17]]">Я - тупой, забыл пароль..</a>
		<input id="ajaxLoginButton" type="submit" name="Login" value="Войти" />
	</div>
</form>

Чанк для вывода ошибки fastLoginError:
[[+msg]]

Скрипт js, обрабатывающий событие отправки формы (нужен подключенный jquery):
<script type="text/javascript">
	$(document).ready(function(){
		$("#iWannaLogin").bind("submit", function() {

			$("#authErrors").text("");
		
			//здесь можно допилить подсветку полей с ошибкой
			if ($("#loginForm").val().length < 1 && $("#passwordForm").val().length < 1) {
				$.jGrowl("Введите логин и пароль", {group: "m-Error"});
				return false;
			}
			if ($("#loginForm").val().length < 1) {
				$.jGrowl("Введите логин", {group: "m-Error"});
				return false;
			}
			if ($("#passwordForm").val().length < 1) {
				$.jGrowl("Введите пароль", {group: "m-Error"});
				return false;
			}

			$.ajax({
				type: "POST",
				cache: false,
					url: "[[~[[*id]]]]",
				data: $(this).serializeArray(),
				beforeSend: function(){
					$("#ajaxAuth .closeBlock").css("display", "none");
					$("#ajaxAuth .ajaxLoad").css("display", "block");
					
					$("#ajaxLoginButton").prop("disabled", true);
				},

				success: function(data) {
					$("#ajaxAuth .closeBlock").css("display", "block");
					$("#ajaxAuth .ajaxLoad").css("display", "none");
			
					var errMessage = $(data).find("#authErrors").text();
				
					if(errMessage == ""){
						window.location = "адрес для переадресации при успешной авторизации";
					}
					else{
						$("#authErrors").text(errMessage);
						$.jGrowl($("#authErrors").text(), {group: "m-Error"});
					}
				},
				
				complete: function(){
					$("#ajaxLoginButton").prop("disabled", false);
				}
			});
			return false;
	
		});
	});
</script>

— я еще подключил плагин jgrowl для отправления алертов. В его же вызове group: «m-Error» — класс для всплывающего бокса (красный, с ошибкой).
Если jgrowl не нужен — то вместо него вставляем в поле для ошибок желаемый ответ. Пример:
$("#authErrors").text("текст ошибки").css("display", "block");

#ajaxAuth .ajaxLoad — в моем примере форма с индикатором загрузки, которая появляется при обработке аякс-запроса.