Алексей Шумаев

Алексей Шумаев

С нами с 30 ноября -0001; Место в рейтинге пользователей: #24
Алексей Шумаев
13 февраля 2020, 22:37
1
+2
Согласен.

Кстати, есть нюанс, о котором я забыл, хотя и собирался реализовать.
Он как раз касается и метрик.

Может возникнуть такая ситуация:
1. создали универсальную форму, которую менеджер пихает по статьям где надо
2. нужна эта же форма, но с другим названием/продающим тестом и метрикой
Сейчас, получается, нужно создавать дубль формы.
Чтобы этого избежать, нужно зашить в строку запуска формы дополнительные параметры, например: название формы или иные пользовательские переменные. Тут же можно передать и событие метрики.
Получится одна форма с вариантивностью метрик и с разными названиями, продающим текстом или т.п.
Я подумаю, как это реализовать удобнее. Отпишусь.
Баха Волков
11 марта 2019, 17:20
2
0
По моему совсем не с той стороны зашли, ведь нужен всего лишь функционал загрузки файлов. Вот пример метода в modx.tree.directory.js:

,uploadFiles: function(btn,e) {
        if (!this.uploader) {
            this.uploader = new MODx.util.MultiUploadDialog.Dialog({
                url: MODx.config.connector_url
                ,base_params: {
                    action: 'browser/file/upload'
                    ,wctx: MODx.ctx || ''
                    ,source: this.getSource()
                }
                ,cls: 'ext-ux-uploaddialog-dialog modx-upload-window'
            });
            this.uploader.on('show',this.beforeUpload,this);
            this.uploader.on('uploadsuccess',this.uploadSuccess,this);
            this.uploader.on('uploaderror',this.uploadError,this);
            this.uploader.on('uploadfailed',this.uploadFailed,this);
        }
        this.uploader.base_params.source = this.getSource();
        this.uploader.show(btn);
    }
Нужно создать кнопку которая бы вызывала данный метод и всё. Ну не совсем всё, а остальные методы ошибки, методы которые возвращают id нужного источника и т.д., но это куда лучше чем стилизовать combo
Василий Наумкин
26 ноября 2018, 07:29
6
+4
У меня все письма перед отправкой проходят через pelago/emogrifier — так что на расхождений в отображении почти нет.

Грузим свой почтовый класс раньше всех:
$modx->getService('mail', 'extraMail', 'path/to/class');

А в классе extraMail добавляем свою обработку:
<?php
if (!class_exists('modPHPMailer')) {
    /** @noinspection PhpIncludeInspection */
    require MODX_CORE_PATH . 'model/modx/mail/modphpmailer.class.php';
}

class extraMail extends modPHPMailer
{
    /** @var PHPMailer $mailer */
    public $mailer;
    
    /**
     * @param string $key
     * @param mixed $value
     */
    public function set($key, $value)
    {
        if ($key == modMail::MAIL_BODY) {
            $emogrifier = new \Pelago\Emogrifier($value);
            $value = $emogrifier->emogrify();
            $this->set(modMail::MAIL_BODY_TEXT, $this->mailer->html2text(nl2br($value)));
        }
        parent::set($key, $value);
    }
Сергей Шлоков
06 ноября 2018, 14:29
3
+2
1. Создаёте плагин с любым именем и следующим содержанием
<?php
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
        /** @var Fenom $fenom */
        $fenom->addModifier('lcfirst', function ($input) {
           return mb_strtolower(mb_substr($input, 0, 1)) . mb_substr($input, 1);
        });

        break;
}
2. Отмечаете событие «pdoToolsOnFenomInit» на второй вкладке.
3. Сохраняете.
4. Пользуетесь.
Евгений Борисов
22 октября 2018, 07:01
3
+5
SELECT * FROM modx_site_content ORDER BY IF(pagetitle REGEXP "^[А-Яа-я]", 0, 1), pagetitle
Евгений Борисов
14 октября 2018, 16:49
2
+2
Меня всегда выручает пакет github.com/hoaproject/File, если нужно прочитать очень большие файлы.
На его базе этого класса и функции simplexml_load_string легко делается разбор XML файлов любых объемов. Естественно, готовых решений вам никто не даст, т.к. все пишется исключительно под задачу.
Сергей Шлоков
02 октября 2018, 07:04
1
+1
Отсутствие фильтрации квадратных скобочек реально напрягает…
Ну вот откуда Вы это взяли? Евгений же всё внятно объяснил.

В идеале было бы как-то в одном месте все данные фильтровать по каким-то своим правилам. Типа такой общий шлюз, сначала данные через него проходят, а потом уже в сниппеты и компоненты. Но не знаю возможно ли это.
Без проблем. Плагин на событие OnMODXInit.
Сергей Шлоков
01 октября 2018, 20:31
1
+1
MODX фильтрует POST, GET, REQUEST, COOKIE в каждом запросе. Но этого, конечно, недостаточно. Фильтруйте сами. Например, так.

А ещё фильтруются эти значения
$targets= array ('PHP_SELF', 'HTTP_USER_AGENT', 'HTTP_REFERER', 'QUERY_STRING');
foreach ($targets as $target) {
    $_SERVER[$target] = isset ($_SERVER[$target]) ? htmlspecialchars($_SERVER[$target], ENT_QUOTES) : null;
}
Іван Клімчук
14 сентября 2018, 10:41
1
0
В разделе Помощь modstore все же понятно написано
Также мы поддерживаем работу дополнений на поддомене dev. Сбрасывать ключ для такого домена не нужно — дополнения просто работают сразу на обоих доменах: site.ru и dev.site.ru.
Касательно моего подхода, у меня код сайта упаковывается в пакет (или несколько пакетов) и ставится через репозиторий. Вся работа локально, потом сборка, отправка в репозиторий, установка на продакшене.
Евгений Борисов
04 сентября 2018, 22:14
1
+6
В очередной раз убеждаюсь, что MODX это дырень:-). Если дал доступ в админку (даже с самыми минимальными правами), то считай дал полный доступ к сайту