Fi1osof

Fi1osof

С нами с 05 мая 2014; Место в рейтинге пользователей: #10
Fi1osof
14 декабря 2016, 11:23
0
Михаил, с этим проблем куча. Это тот случай, когда поправляя одно, будет ломаться другое. Когда вы включаете ЧПУ, MODX пытается все за раз запихнуть в кеш (в вашем случае это 500к документов, что, мягко говоря, для него слишком много). Из-за этого кеш может даже сохраниться битым и сайт начнет вообще фатальную ошибку выдавать. В таких случаях я не знаю другого решения, кроме как cacheOptimizer. Но, у вас при включении ЧПУ, но отсутствии карты ресурсов в кеше контекста, многие вещи будут просто не работать (включая получение документа по УРЛу). Я в свое время был вынужден такое делать при создании сайта на 150к документов, и пришлось несколько переписывать modRequest, чтобы все работало как надо. Все это требует очень много телодвижений. Поэтому мне нечего вам дельного посоветовать. Или переводить все эти документы на отдельные таблицы, писать свой роутер, интерфейсы и т.п., или вообще сворачивать проект.
Fi1osof
14 декабря 2016, 10:47
0
Ну iqsms.ru тогда в помощь. Но там на белом канале по-моему от 5000 платеж минимальный, и смс 1.99 на белом канале.
Этот провайдер сейчас из коробки не поддерживается (просто заморожен), но восстановить не долго, доработаем.
Fi1osof
14 декабря 2016, 10:37
+1
Епочта немного висит joxi.ru/DmBXep0uwNJJ9A
Повторюсь, гарантии на доставку смсок по таким каналам нет никакой. Нужны белые каналы.

UPD: Заработала епочта. Вы немного слукавили со стоимостью. Она зависит от суммы пополнения баланса. Вы готовы за раз пополнить на 75 000 рублей, чтобы по 25 копеек смски слать? Не думаю. А на небольших суммах стоимость не сильно отличается.
Размер платежа, руб. Тариф, смс/руб.
от 1 до 999 0,51
от 1 000 0,48
от 2 000 0,43

UPD 2: Vlas, регистрация вчера ради одного коммента. Не рекламы ли ради?
Fi1osof
14 декабря 2016, 10:32
0
Про сервисы я писал в статье. Сейчас компонент работает с letsads.com/ (хотя будет позже реализация работы с различными провайдерами, и сразу будет реанимирован iqsms.ru/).
Белые смс-ки на летсадс стоят 1.70. Это средняя по рынку стоимость.
Fi1osof
14 декабря 2016, 10:25
-1
И давай больше минусов топику и комментам. От этого твои компоненты конечно же лучше станут, а ты умнее.
Fi1osof
14 декабря 2016, 10:20
-1
С тем же самым успехом можно приходить со своим сайтом-визиткой к гуглу, к примеру, и говорить «Да я уже это делал»… За то, что у тебя сделано, я бы тоже постеснялся брать денег.

Давай по порядку.
Во-первых, у тебя там всего три строчки на «создание кеша».
public function createResourceCache($uri = '/') {
    $siteUrl = $this->modx->getOption('site_url');
    /** @var modRestCurlClient $client */
    $client = $this->modx->getService('rest.modRestCurlClient');
    $result = $client->request($siteUrl, $uri, 'POST');
}
То есть простой запрос на УРЛ документа (кстати, об этом еще чуть ниже будет сказано).

У меня же плагин 200+ строк кода. Для того, чтобы сгенерировать кеш документа, я не шлю какие-то GET-запросы на внешние ресурсы, а именно гененерирую кеш на уровне выполнения самого скрипта. И там поверь, очень много тонкостей.

У тебя возникает вопрос нафига вообще так все усложнять? Почему не слать простой запрос? Я отвечу. Во-первых, задача ставилась не только генерировать кеш текущего редактируемого документа, но и кеш остальных документов тоже. Но ты, видимо, этого в статье не увидел, «дежавю» ослепило тебя. Вот смотри, что происходит при сохранении документа после полного сброса кена при включенной настройке генерации кеша всех документов (или настройке регенерации при полном сбросе кеша):


После чего даже все другие документы доступны сразу из кеша:


Ткни пальцем, где твой компонент умеет генерировать кеш остальных документов?

Кстати, тебе на заметку: при вызове обновления документов через процессоры напрямую, твой плагин не генерит кеш документа, потому что ты проверяешь глобальную $_POST['createCache'], а не $resource->get('createCache'). Не знал, что обновляемым объектам все передаваемые в процессор параметры присваиваются? Просто в БД не пишется лишнего.

Во-вторых, слышал про мультидоменность и мультиконтекстность? Давай посмотрим, что происходит при сохранении документов с твоим великим плагином?
Ой, 404-ая. А при заходе на документ по реальной ссылке во фронте, получаем его не из кеша.


А с моим плагином как? А с моим все хорошо. Он корректно определил контекст и сформировал корректный запрос.


Так что конечно можешь продолжать бесплатно свое раздавать. Оно же работает кое-как. Это нормально. А когда сделаешь, чтобы работало как у меня, тогда посмотрим насколько оно у тебя будет бесплатное, и не похожее на то, как у меня сделано.

И еще: если вдруг ты доработаешь свое «творение», и оно будет «генерировать» кеш всех документов, как именно ты это будешь делать? Так же слать GET-запросы? То есть на сайте 100 документов, 10 раз отредактировал страницу, ушло 10 раз по 100 запросов на сайт? Мало того, что это 1000 инициализаций MODX-а, так это еще и 1000 записей сессий в БД. А будет 10 человек работать, по 100 сохранений в день? 10*100*100 = 100 000 записей в БД за день? Ну-ну…

P.S. И не думай, что я «идею» подсмотрел у тебя. Поверь на слово, это не так. Я далеко не все твои топики читаю.
Fi1osof
13 декабря 2016, 16:36
0
Нет, не приведет. Принцип работы компонента в том, что от анонимного пользователя вызывается отработка документа, как будто на нее зашли извне. То есть если документ нормально работает, то все отработается нормально. А если вдруг что-то не так будет, пишите в поддержку, обязательно разберемся.
Fi1osof
13 декабря 2016, 14:30
+1
Да, со временем беда.
Fi1osof
13 декабря 2016, 05:57
+2
Отключение ЧПУ не спасет. Читайте очень внимательно этот материал: modxclub.ru/blog/139.html
Fi1osof
13 декабря 2016, 05:13
+4
Павел, в качестве эксперимента:
Ext.getCmp('source-tree-1').on('append', function(tree, parent, node, index){
  console.log(node);
  node.attributes.menu.items.push({
    text: "ZIP",
    handler: function(node){
      console.log(this);
      console.log(node);
    }
    ,scope: this
  });
});
Добавляет новый пункт контекстного меню joxi.ru/Y2LjLVES9wy54r
Минус в том, что срабатывает только когда элементы подгружаются. Если в момент навешивания события элементы уже есть, то они будут без допэлемента. Но если вовремя вклиниться, то ОК будет.
Конечно получать по айдишнику не круто, лучше через менеджер компонентов брать или типа того (есть, к примеру, поиск по типу компонентов). Это так, набросок.

А вообще, еще лучше слать PR, функционал нужный и должен быть в ядре.

Fi1osof
13 декабря 2016, 04:40
+1
Да, как я и писал выше. Просто в любом месте:
$smsGate = $modx->getService(«smsGate»);
$smsGate->send($phone, $message);
Сообщение произвольное, можно даже в кириллице. Но в кириллице одно сообщение — 70 символов, в латинице 140.
Fi1osof
09 декабря 2016, 09:31
0
Приобретайте пакет в модсторе и пишите там же в поддержку. Я на связи сегодня.
Fi1osof
09 декабря 2016, 06:16
0
Этот процессор используется getCollection. В большинстве случаев это не позволит за раз сделать выборку 90к ресурсов (только если там не куча памяти).
Я пользуюсь подобным: modx.pro/help/10524/#comment-71823
Fi1osof
09 декабря 2016, 06:08
0
Все верно, все делается через хуки.
И как было заявлено в описании компонента, с нашей стороны помощь в настройке. Так что если не справитесь самостоятельно, поможем.
Fi1osof
05 декабря 2016, 19:31
0
Эдвард, как вариант: модуль modMonitor. Он как раз позволяет отслеживать что в какой момент выполняется (в том числе плагины). Проанализировав цепочку, можно выяснить причины. Час нашей работы включен в его стоимость, этого достаточно, чтобы разобраться в ваших багах.
Fi1osof
03 декабря 2016, 02:05
0
Спасибо, поправил. Проверял, но видимо к вечеру глаз замылился.
Fi1osof
02 декабря 2016, 21:18
0
он сейчас работает для обхода проверки пароля
для того что бы можно было авторизовать пользователя не зная его пароля
ферштейн?
Пообщались с Джейсоном И Марком, отправил PR github.com/modxcms/revolution/pull/13204
Если примут, то можно будет не только разрешать авторизацию без пароля (если возвращать true), но и можно будет выбрасывать собственные ошибки. Так будет гораздо гораздее.

OnWebLogin — не то, в этот момент пользователь уже авторизован, а нужно этого не допустить
Как раз этого и хотел не допустить, и это и решает данный PR. Его неидеальность только в том, что придется в нем в случае чего все равно проверять пароль, если надо проверить пароль (так как сейчас проверка пароля идет уже за пределами вызова этого события), но это не страшно. Теперь, если вы считаете, что все проверки пройдены, но не надо позволить пользователю авторизоваться, можно будет просто вернуть сообщение ошибки (не true и не false).
Fi1osof
02 декабря 2016, 12:22
0
Цифровую подпись тоже обеспечите?


Хотя конечно, если где-то что подешевле нароется, будет замечательно.
Fi1osof
02 декабря 2016, 12:17
0
2. По поводу "$modx->event->_output" вообще претензия странная.
«Я туда сую неверное значение и MODX плохо работает». Так не суйте неверное.
Дмитрий, если вам претензия кажется странной, то это просто потому что опыта пока маловато. Вам просто надо поверить мне на слово, что так не должно быть.
Но плюс к слову, аргументирую.
Вот смотрите, процессор обновления документа расширяет базовый процессор modObjectUpdateProcessor. В этом процессоре есть метод fireBeforeSaveEvent(). Если у текущего процессора есть свойство $this->beforeSaveEvent, то на это событие вызывается плагин. В процессоре обновления документа resource/update это свойство есть, и когда процессор отрабатывается, выполняется и плагин. И в плагине можно вернуть сообщение об ошибке. И на это в базовом процессоре прописан корректный обработчик. Обратите внимание, что в этом обработчике прописано присвоение возвращаемой переменной $preventSave. И внимательно посмотрите на эту конструкцию:
$preventSave = $this->fireBeforeSaveEvent();
        if (!empty($preventSave)) {
            return $this->failure($preventSave);
        }
Если $preventSave не пустое, то возвращается ошибка. Вот это правильная работа плагина. Создайте плагин на событие OnBeforeDocFormSave и пропишите $modx->event->_output = «false»; и попробуйте сохранить документ. Что получите? Ошибку.


Вас смущает 'false'? Так вот, это не неверное значение, как вы выразились, а произвольное строчное значение, то есть сообщение. И это сообщение может быть более непрограммиступонятное, и даже можно подсвечивать произвольные поля.


Вот это корректная работа плагина.

А что у нас в security/login прописано? Тупо возврат логического false. Из-за чего корректной обработки не происходит.

У меня, например, сейчас с помощью этого события реализован функционал авторизации по ссылке. Пришла ссылка на email — тыц на нее — и ты уже залогинен.
Вы просто выполняете дополнительные действия, никак не влияя на ход выполнения процессора. А вы попробуйте в этом своем плагине вернуть ошибку пользователю и прервать его авторизацию.

Если в процессе работы плагина выходит, что пользователь достоин авторизации, то делаем
$modx->event->_output = true;
в иных случаях не трогаем. И все работает как надо.
У нас с вами разные понятия «как надо». Сделаете вы $modx->event->_output = true; или не сделаете ничего, результат не поменяется в принципе. А вы сделайте так, чтобы поменялся.

3. Добавить событие «OnAfterWebAuthentication» было бы полезно
А вы поищите хорошенько, может что-то подобное найдете.