Воеводский Михаил

Воеводский Михаил

С нами с 07 февраля 2013; Место в рейтинге пользователей: #18
Василий Наумкин
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);
    }
Волков Николай
25 ноября 2017, 05:49
1
0
Есть что рассказать — напиши, расскажи, а прикидываться Д`Артаньяном мы все умеем.
Рассказать есть что, другой вопрос, что:
1) Банальный рейтинг. На сколько я помню рейтинг от 30 и выше дает право писать на главную. Мне не охота писать вещи в вопросы, которые сгенерируют еще больше вопросов.
2) Тема фронта ОЧЕНЬ обширная и еще не решил с чего начать: с генераторов yoeman и modExtra на них прокачанной несколько тупо чтобы привлечь внимание, или все же начать с действительно с тех тем, которые доставляют неимоверный фан.
3) Меня все мучает делемма. В реальности сейчас лучше всего работают сайт с
<body>/*тут возможен максимум счетчик*/</body>
Внутрь body начинает все асинхронно подгружаться и получается красиво и очень быстро… Хотя кому я это говорю :-) Все это тебе известно, т.к. достаточно вспомнить, что ты автор office с его контроллерами у которых принцип тот же. Тем не менее назревает проблема в том, что получается то, что у нас всего один шаблон и туча чанков, а это несколько выходит за рамки обычного алгоритма написания сайтов на MODX… Но и другой вопрос, что тут нужна база JS какая-то, а с этим туговато я смотрю у многих. Собственно по большей степени из-за этого сейчас и думаю на счет того, что сделать отправной точкой не банальной, но полезной.

P.S. Кстати, хоть у вас тут редактирование комментариев работает мне не одного оповещения не пришло про ответы. Извините за тормоза.
Andrei D.
30 мая 2017, 06:22
1
+6
На самом деле это реализуется за несколько часов
Вот примерная простейшая архитектура без излишеств:

1. Своя кастомная таблица с полями [key][name][unit][max_manual][max_mech][max_mats], в которую можно все наименования работ с экселя закинуть
2. Сверху формы добавления:
<input class="search-input" type="text" name="task_key" placeholder="Номенклатура"/>
<input class="search-input" type="text" name="task_name" placeholder="Наименование"/>
3. Сразу под поиском:
<div class="search-items"></div>
<ul class="added-items"></ul>
4. Создать страницу с пустым шаблоном для ajax запросов, например, website.com/app, в которую поместить сниппет обработки запросов, в самом сниппете на $action повесить case «search» «select» «create»
5. Добавить скрипт, который на onchange .search-input ловит $(this).attr('name') + $(this).val() и с action «search» направляет всё на /app «search» и возвращает найденные строки, джойнит их и оборачивает, например, в
<button class="selector-item" type="button" val="id_работы" style="width:100%;display:block">наименование работы</button>
6. На клик по .selector-item направить $(this).val() на сниппет с case «select», возвращать отдельную работу, например, так:
<li class="item" data-item="id_работы">
<span>* Наименование *</span><span>* Номенклатура *</span>
<span class="small">MAX ручной труд: *стоимость* / механический труд: *стоимость* / материалы: *стоимость*</span>
<input type="text" placeholder="Фактическая стоимость" value="* в сниппете сложить общую стоимость *"/>
<button type="button"><i class="fa fa-remove"></i></button>
</li>
далее брать стоимость работы по умолчанию и складывать со значением .total-sum
7. Повесить скрипт на на onchange стоимости для каждой добавленной работы и пересчитывать со значением .total-sum
8. После списка добавленных работ:
<div class="form">
<h3>Общая стоимость: <input type="hidden" class="total-sum" value="0"/><span class="total-sum">0</span></h3>
<h4>Данные заказчика</h4>
<label>ФИО заказчика</label><input type="text" name="order-name" placeholder="ФИО заказчика"/>
<label>Телефон</label><input type="text" name="order-phone" placeholder="Телефон"/>
адрес объекта и т.д.
<button type="button" class="create-order">Сохранить</button>
</div>
9. По кнопке .create-order скрипт джойнит добавленные значения из .added-items, и вместе с данными формы отправляет на /app «create»
10. Для «create» нужно создать вторую кастомную таблицу заказов с полями [order_id][works][customer_name][customer_phone][...][date_added], где «works» это список работ в json формате с idx ключом для возможности редактирования данных в будущем

Далее подперчить скриптами, сделать страницу вывода заказов и вроде всё ок

p.s. про единицу измерения не понял
p.s.s. можно вообще без добавления $action case «select» и просто объединить html из пунктов 5 и 6 в каждом результате, а уже стилями ненужное скрывать. Тогда при добавлении просто клонировать объект и подставлять в .added-items, где скрыта кнопка добавления…
Fi1osof
07 января 2016, 11:57
20
+12
Если ключ не хотите светить, то однозначно запрос надо слать с вашего сервера на донора. В MODX есть готовый CURL-клиент. Вот код для примера:
$client = $modx->getService('rest.modRestCurlClient');
$result = $client->request('https://ya.ru', '/', 'POST', $params = array('foo'  => 'foo'));
print $result;
Можете с этим кодом к консоли поиграться.
Fi1osof
22 декабря 2015, 18:31
1
+1
Теперь я забегу немного вперёд и скажу...

На это было сказано выше.
3. Плата за дополнения дает право на поддержку автора дополнения. Если не оплатил дополнение (получил в составе сборки) — то и поддержки нет. Нужна поддержка? — оплати дополнение и в путь...

P.S. Я выше предложил единственный и верный вариант, когда все будут довольны и покупатель будет с техподдержкой...
Даже я стараюсь избегать утверждений на счет единственно важных и верных вариантов. Не понимаю, на основе чего можно утверждать, что ваш вариант единственный правильный. Зато можно усмотреть в ваших комментариях просто нежелание того, чтобы на свет еще появились какие-то сборки. Судя по количеству скачиваний вашей платной сборки, рынок пока не велик и профиты далеки от желаемых, а появление еще одного игрока может сказаться падением и без того низких показателей. Конечно все может и не так, но вероятность есть.

Я же вижу все это по-другому. Если есть интерес к каким-то компонентам, надо изучать возможные пути их использования. Человек хотя бы пришел и задал вопрос на счет этого, а не сразу выкатил свое решение, а там хоть трава не расти. При правильном подходе может быть популяризация компонентов и технологий, а это в любом случае положительно. У меня сборка ShopModxBox вообще бесплатно распространяется, и ничего. А если следовать вашему единственно верному варианту, то скорее всего будет так, как написали ниже:
Пиши свои. =)
К чему это приведет?
1. Увеличению издержек, а значит и увеличению стоимости продукта для конечного клиента.
2. Появление новых аналогов уже готовых продуктов. А это, во-первых, не факт, что качественней будет. Во-вторых, снижение доходов их разработчиков, которые уже меньше калорий будут тратить на их развитие.
В итоге будет 100500 аналогов среднего качества, вместо качественных специализированных популярных решений.

В общем, лично я считаю, что вопрос поднят правильный, и его надо внимательно изучать. И как мне видится, самое лучшее что здесь можно сделать — это в modstore.pro добавить партнерку. Вот тогда больше шанс, что интересы всех будут учтены и все будут довольны. Автор сборки сможет по своей партнерке распространять чужие платные компоненты со скидкой. Авторы компонентов будут получать отчисления автоматически. Клиенты смогут обратиться за поддержкой, так как в тикетной системе будет информация о продаже компонента.
Ганин Роман
24 апреля 2015, 22:57
11
+2
Начало разработки — за пределами MODX. Вёрстка (БЭМ) шаблонов, чанков и страниц в Sublime Text 3 с использованием Gulp-задач для автокомпиляции с использованием пре- и постпроцессоров (ускоряют разработку в 4-5 раз), зависимости: bower, для UI-тестов адаптивности: BrowserSync. Минификация стилей и скриптов на клиенте (прекратите вешать эту задачу на MinifyX/сервер!). Кодстайл: CSScomb и JSCS + JSLint. В дальнейшем можно настроить автоматическую выгрузку по SFTP скомпилированных файлов прямо на сервер. Шаблонизация на клиенте легко настраивается с помощью gulp-rigger, gulp-file-include или gulp-include-source. За счет вотчеров скорость просто реактивная. Особенно удобно, если монитора два и больше — в одном мониторе код проекта, в остальных — мгновенный результат (страница обновляется быстрее, чем я успеваю перевести взгляд с одного монитора на другой или переключиться на новый раб. стол).
Инициализация сервера: ansible, установка MODX: Gitify, импорт настроек: Teleport. Импорт уже подготовленных чанков, tpl-ек занимает минуты, нет необходимости заниматься «клавадрочерством» с Ctrl+Tab (переключиться на фронтенд-вкладку), Ctrl/Cmd+R (обновить страницу), чтобы просмотреть результат — всё уже оттестированно на этапе вёрстки. Остаётся только настроить магию сниппетов и оформить Custom Forms. Дальше — оверлокинг с XDebug, debugParser, BloodLine и Chrome DevTools.
Сергей Шлоков
16 октября 2014, 12:38
6
0
Вот важная информация для админов сайтов — Как защитить MODX Revolution от взлома
Вот еще от себя могу добавить —