Наумов Алексей

Наумов Алексей

С нами с 31 марта 2013; Место в рейтинге пользователей: #13
Наумов Алексей
10 декабря 2019, 09:27
0
Я без проверки напишу, может где-то опечатаюсь)
Еще после методов getOne желательно проверять объекты на null.

if ($modx->event->name == 'OnEcMessageSave') {
    $thread = $object->getOne('Thread');
    $resource = $thread->getOne('Resource');
    $resource->set('editedon', time());
    $resource->save();
    $resource->clearCache();
}
по логике это все.
Если все равно осталось закешированным, то стоит посмотреть, как генерируется LastModified
Наумов Алексей
06 декабря 2019, 09:42
0
Реально, каков вопрос, таков и ответ.
Можно сделать и так и так.
У меня есть сайт, там типа товаров, но не совсем, подтягиваю их по апи (пл запросу), затем кеширую на сутки данные, работает все хорошо.
Из плюсов — нет кучи товаров, не надо следить за удалением товаров.
Наумов Алексей
04 декабря 2019, 11:27
+2
Не?
{set $result = $_modx->runSnippet('abc');}
Наумов Алексей
03 декабря 2019, 14:02
+1
Каким-либо образом переопределить селектор.
Html допускает только 1 уникальный id в документе. Вероятно нужно заменить id на class.
Наумов Алексей
02 декабря 2019, 10:33
0
Может правда хостинг? Оптимизируют что-нибудь для быстродействия, вот и результат непредсказуемый.
Наумов Алексей
26 ноября 2019, 17:52
+1
getCollection загружает сразу все в память, не прокатит, действительно памяти не хватит.
Удаляйте или по 1 (getObject) в цикле, или если это долго, то можно getCollection, но за один раз штук по 50.
Наумов Алексей
19 ноября 2019, 14:19
0
Какие уведомления, о чем?
Типовой сценарий использования компонента — отзывы о товарах.
С трудом могу представить ситуацию, когда я захочу получать уведомления о том, что на каком-то сайте появился новый отзыв о пылесосе или книге.
Или я не понял, про что речь.
Наумов Алексей
19 ноября 2019, 09:33
0
Тащить целую библиотеку за собой ради 2-х иконок?..
Если на сайте установлен font-awesome, вы всегда можете изменить css файл и верстку, чтобы его использовать.
Наумов Алексей
14 ноября 2019, 08:51
0
Добрый.
А что с thread может быть не так?..
Я с Localizator не знаком совсем.
Наумов Алексей
07 ноября 2019, 11:45
+1
1. Вариант «на коленке»:
Каждый «Рейтинг» — это отдельный ресурс (страница).
«Добавлять определенных или всех пользователей» — на ваше усмотрение, хоть TV поле, где перечисляются пользователи. Далее проверяем, есть ли пользователь в этом TV.
Само голосование… ну хоть через xlike, да. Можно от тикетс, можно даже easyComm заюзать.

2. Вариант «серьезный».
Пишем свой компонент с нужными функциями.
Наумов Алексей
31 октября 2019, 11:24
+1
Создавать так:
$data = array();
$data['pagetitle'] = "Заголовок";
$data['alias'] = "my-page";
$data['parent'] = 123;
$data['template'] = 7;
$data['published'] = 1;

$response = $modx->runProcessor('resource/create', $data);
if ($response->isError()) {
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'There was a problem to create resource...');
    $modx->log(xPDO::LOG_LEVEL_ERROR, $response->getMessage());

    return;
}

$resourceId = $response->response['object']['id'];
Можно и контекст передать, если отличный от web.

Почитать или разрозненно в интернете или смотреть исходники MODX и компонентов:
github.com/modxcms/revolution/blob/2.x/core/model/modx/processors/

p.s. Важно, для создания ресурса вы должны быть авторизованы и обладать правами на создание!
Наумов Алексей
31 октября 2019, 09:17
0
Ну а get-процессор то данные верные отдает, полные? В консоли браузера посмотрите запрос этот.

При открытии объекта на редактирование должно быть:
1. Основной запрос, в котором в числе всех данных объекта придет значение этого поля.
2. Отдельный запрос к процессору getlist, в который уйдет 2 параметра: id, combo=1, оттуда придет ответ с одной единственной строкой, из которой title и подставится.

Если в п.2 приходят много строк, то не хватает условия в процессоре, чтобы ограничить выборку:
$id = $this->getProperty('id');
if (!empty($id)) {
        $c->where(array('id' => $id));
}
Наумов Алексей
31 октября 2019, 09:06
+1
Да вряд ли встроенный поиск работает иначе) и быстрее)
$q = $modx->newQuery('modResource');
$q->where(array('parent' => X, 'pagetitle:LIKE' => '%'.$location.'%'));
...
Наумов Алексей
30 октября 2019, 17:59
0
При отображении окна (формы) редактирования идет запрос к get процессору (типа mgr/some-object/get), значение поля subject вообще приходит? Может его нет, вот и в комбобокс не подставляется ничего?

А так сравнил со своим кодом, увидел 2 отличия:
1. Вот здесь
baseParams: {
                action: 'mgr/settings/getlist',
	        combo: true,
        }
у меня еще добавляется параметр
id: config.value
2. Ну и в процессоре есть условие, чтобы лишние данные не гонять:
public function prepareQueryBeforeCount(xPDOQuery $c) {
        if ($this->getProperty('combo')) {
            $c->select('id, name, title');
        }
        ....
Наумов Алексей
23 октября 2019, 11:55
0
Что в $input то приходит?
Чем не устраивает параметр w (Порядковый номер дня недели, от 0 воскресенье до 6 суббота) функции date?
Почему «Sun» (sunday, воскресенье) это вдруг «Пн»?)
Наумов Алексей
04 октября 2019, 09:00
0
Может это некая проверка на cms или попытка взлома роботами?
Типа они пытаются на некую страницу авторизации /admin/ войти с логином паролем admin, а у вас такой нет, вот и обрабатывается 404.
Посмотрите в логах веб сервера запросы в этот момент времени.
Наумов Алексей
30 сентября 2019, 14:04
+1
1. Создаем документ с пустым шаблоном.
2. Вызываем в нем сниппет с нужным кодом.
3. Проверка на авторизованного пользователя на уровне парсера modx или прям в php docs.modx.com/revolution/2.x/developing-in-modx/other-development-resources/class-reference/moduser/moduser.isauthenticated
Наумов Алексей
20 сентября 2019, 09:13
+1
Я к тому, чтобы максимально быстро выпустить некое решение рабочее.
Боюсь большой объем работы просто застопорит все.
Кстати, если писать с нуля, ну по факту будут написаны аналоги процессоров, просто с другими «что смущает», которые будут подогнаны именно под это апи.
Наумов Алексей
19 сентября 2019, 09:52
0
Думаю, что использовать стоит, по крайней мере в тех местах, где они хорошо отрабатывают.
Просто для того, чтобы максимально быстро достичь некоего рабочего этапа.
Если процессор позволяет выполнить действие — пусть работает.
А если не позволяет, значит идти другим путем, писать самому это действие.