Василий Наумкин

Василий Наумкин

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
09 января 2013, 17:24
0
Сомневаюсь.

Проверьте /var/log/auth.log на предмет посторонних заходом на сервер.
Василий Наумкин
09 января 2013, 16:30
0
Все просто: в миникарт данные попадают из сессии, которая очищается при отправке заказа.

А на странице, как правило, snippet miniCart расположен раньше сниппета miniShop, и при его загрузке сессия еще не очищена.

Я советую убирать миникорзину с этой страницы, она там ни к чему.
Василий Наумкин
09 января 2013, 15:46
0
Ну, явно какой то трабл с правами.

Может, директория tmp принадлежит одному юзеру, а процесс php-fpm запущен от другого? В общем, разбирайся, проблему, вроде как, обнаружили.
Василий Наумкин
09 января 2013, 08:58
0
Ну, с именем там будет так же, ибо если нет имени, но оно требуется для работы юзера в MODX — его приходится придумывать. Правда, Hybrid будет использовать идентификатор юзера на сервисе, вместо хэша, как Loginza.

Правильный способ — это дать возможность юзеру поменять имя, почту и другие поля профиля, как у меня. Это умеет и Loginza и Hybrid.

Однако — у Hybrid юзер самостоятелен. То есть, к учетной записи юзера сайта привязываются записи вконтакте, фейсбука и тд. И юзер, входя через любую из привязанных учеток, попадет в учетку своего юзера, с указанным там нужным именем и email. Можно даже сделать обычную авторизацию, а потом к ней добавить Hybrid, для ускорения входа.

А у Loginza связей нет. Там один удалённый сервис — одна учетка на сайте. Она быстрее устанавливается на сайт, но в итоге я не советую ей пользоваться — обнойлвений сниппета точно не будет.

Поэтому, со всех сторон Гибридом пользоваться лучше, и от loginza.ru не будешь зависеть.

P.S. При ответе на комментарий нужно нажимать под ним на ссылку «Ответить».
Василий Наумкин
09 января 2013, 08:38
0
Посмотрел в код страницы — jQuery подключен, но в футере.

А у меня, почему то, MarkItUp вызывается в шапке. В следующей версии исправлю, а пока можешь сам изменить в tickets.class.php на строке 139
$this->modx->regClientStartupScript($this->config['jsUrl'].'web/editor/jquery.markitup.js');
на
$this->modx->regClientScript($this->config['jsUrl'].'web/editor/jquery.markitup.js');

Для комментариев — аналогично, на строке 200. Ну или просто подключи jQuery в шапке сайта.
Василий Наумкин
09 января 2013, 08:29
1
0
Если сломалось сразу и везде — проблема системная. Php не обновлял, настройки не менял?

Алгоритм починки:
1. Смотрим ошибки загрузки в /var/log/nginx/имясайта-error.log
2. Проверяем наличие директорий /var/www/имясайта/tmp/ — именно туда грузятся файлы, сначала.
3. Проверяем конфиги сайтов в /etc/nginx/sites-enabled/имясайта.pool, особенно смотрим на строчки про upload и tmp.

Не помешает также запустить скрипт, восстанавливающий верные права на файлы и директории сайта, 0777 — это не хорошо.
#!/bin/bash

USER="имяюзерасайта"
GROUP="имягруппысайта"

chown -R $USER:$GROUP "/var/www/test/www";
find "/var/www/test/www" -type d -exec chmod 0755 '{}' \;
find "/var/www/test/www" -type f -exec chmod 0644 '{}' \;

Если всё сделано по моей инструкции, то имя юзера и группы совпадают друг с другом, а также, с именем директории сайта.
Василий Наумкин
09 января 2013, 08:20
0
Подключи jQuery.

<script type="text/javascript" src="http://yandex.st/jquery/1.8.3/jquery.min.js"></script>

При двойном вызове скрипта с редактором будет две панели с кнопочками. А у тебя его вообще нет — так что проблема была не там.
Василий Наумкин
09 января 2013, 00:56
0
Именно в этом и ошибка. Удали первую строку в чанке tpl.Tickets.form.create.

Компонент в разработке, а чанки при обновлении не перезаписываются. Сверять можно с чанками в репозитории.
Василий Наумкин
09 января 2013, 00:13
0
1. Сниппет Loginxza генерирует такое имя, если сервис авторизации не передал нормальное.

2. Смотри ошибки javascript в браузере.
Василий Наумкин
08 января 2013, 23:28
0
Вроде починил, делайте еще одну заявку.
Василий Наумкин
08 января 2013, 20:13
0
Спасибо.

Комментарий мне пришлось изменить, так как нужно использовать тег code для оформления частей скриптов или запросов. Удобнее читать.
Василий Наумкин
08 января 2013, 09:33
0
Обновляйся на 0.8.2, там доработаны ветки комментариев.

Теперь можно так:
if ($thread = $modx->getObject('TicketThread', array('resource' => 'id ресурса'))) {
	echo $thread->get('comments');
}
Ветка создаётся при первом вызове TicketComments на странице и пишет себе в поле resource, где её вызвали. Так же там есть поля comment_last и comment_time — это id и время последнего комментария ветки (т.е. на странице).
Василий Наумкин
07 января 2013, 22:03
0
Я там тупо копипастнул, сейчас поправил.

Проверь еще разок код отсюда.
Василий Наумкин
07 января 2013, 21:45
0
Алексей, у тебя в голове картинка не сложилась.

Раздел тикетов — это контейнер для тикетов, класс TicketsSection.
Тикет — это дочерний ресурс контейнер, класс Ticket. Его можно создать только из страницы с типом TicketsSection в админке или сниппетом TicketForm на сайте.

Эти оба типа — расширенные классы, которые обладают особыми возможностями. Обычный ресурс так не умеет. В числе прочего — вывод кол-ва комментов. Причем, TicketsSection выведет сумму комментов для всех дочерних тикетов, а Ticket — только своих.

Если не хочешь создавать тикеты — то доставай кол-во комментов своим сниппетом, код запроса я тебе дал.
Василий Наумкин
07 января 2013, 21:31
0
А должно быть Ticket.

Как документ создавал, в смысле, ресурс? Если через Api — то нужно было указать верный class_key. При создании из админки или при помощи TicketForm — всё автоматом указывается.

Или ты просто вызываешь TicketComments на обычном ресурсе? Тогда конечно, таких полей не будет — ибо это фишка именно класса Ticket.

В этом случае можно получить кол-во комментов запросом в БД.
$q = $modx->newQuery('modResource', $id);
$q->leftJoin('TicketThread','TicketThread', "`TicketThread`.`name` = 'resource-{$id}'");
$q->leftJoin('TicketComment','TicketComment', "`TicketThread`.`id` = `TicketComment`.`thread`");
$q->select('COUNT(`TicketComment`.`id`) as `comments`');

$count = 0;
if ($q->prepare() && $q->stmt->execute()) {
	$count = (integer) $q->stmt->fetch(PDO::FETCH_COLUMN);
}
return $count;

$id — идентификатор ресурса, на котором вызывался TicketComments.
Василий Наумкин
07 января 2013, 21:08
0
При выводе массива документа — какой там class_key?
Василий Наумкин
07 января 2013, 20:39
0
Хоть убей, у меня всё работает.

1. Создаю новую страницу, тип «Документ», шаблон — 0.
2. Вызываю там сниппет Test,
3. В сниппет пишу
if ($res = $modx->getObject('Ticket', 539)) {
    echo '<pre>';print_r($res->toArray());die;
}
4. Выводятся все поля ресурса, в конце
    [hide_children_in_tree] => 0
    [show_in_tree] => 0
    [properties] => 
    [comments] => 0
    [views] => 2
    [votes] => 0
Должно работать именно так, везде.

updated
После написания первого коммента проверил и $res->get('comments'); — всё окей, вывел уже единицу.

Если всё равно не работает — значит на твоём сайте уже чтото накручено, удаляй Tickets все версии и ставь последнюю, потом чисти кэш.
Василий Наумкин
07 января 2013, 15:21
0
Нет такой возможности, я же не хостинг.