Всего 125 681 комментарий

Anton
13 апреля 2021, 18:32
0
Всего 1 форма, в ней в списке (select) выбираем город (например, Москва), заполняем поля Имя, Ваш email, Запрос, ждем Отправить.
После этого надо отправить по всем email'ам, кто находится внутри коллекции Москва (всем дочерним ресурсам — филиалам), у которых в ТВ хранятся разные email'ы.

Вызов:
{$_modx->runSnippet('!AjaxForm', [
    'snippet' => 'FormIt',
    'form' => '@FILE chunks/forms/emailForm.tpl',
    'preHooks' => '',
    'hooks' => 'setEmails,email',
    'emailTo' => '[[+parsedEmails]]',
    'emailTpl' => '@FILE chunks/forms/emailFormReport.tpl',
    'emailSubject' => 'Test Message',
    'validate' => '',
])}
Простейшая форма для тестов:
<form action="{$_modx->resource.id | url}" method="post" id="callbackform" class="ajax_form">

    <div class="form-group">
        <label for="callbackform_location">location:</label>
        <input type="text" class="form-control" id="callbackform_location" name="location"
               placeholder="location">
    </div>

    <div class="form-group">
        <label for="callbackform_name">name:</label>
        <input type="text" class="form-control" id="callbackform_name" name="name"
               placeholder="name">
    </div>

    <div class="form-group">
        <label for="callbackform_email">email:</label>
        <input type="email" class="form-control" id="callbackform_email" name="email"
               placeholder="email">
    </div>

    <div class="form-group">
        <label for="callbackform_text">message:</label>
        <textarea class="form-control" name="message" id="callbackform_text"
                  placeholder="message"
                  required></textarea>
    </div>

    <button type="submit" class="btn btn-blue">Send</button>

</form>

Сам сниппет setEmails:
<?php

$array_ids = $modx->getChildIds(2, 1, array('context' => 'web',));

$docs = $modx->getCollection('modResource', array(
    'id:IN' => $array_ids,
    'template' => 2,
));

foreach ($docs as $doc) {
    if ($doc->getTVValue('email_req')) {
        $parsedEmails = $doc->getTVValue('email_req') . ',';
        $hook->setValue('parsedEmails', $parsedEmails);
    }
}

return true;
Кроме того проблема в том, что я не знаю как отправить письма через FormIt персонально, а не в таком виде «mail1@mail.com,mail3@mail.com,mail3@mail.com,». Чтобы бы другие получатели не видели кому еще отправлено письмо.
Артур Шевченко
13 апреля 2021, 17:49
+1
Код формы? Как выглядит вывод AjaxForm? Форма для поиска и форма, данные из которой нужно рассылать, это разные формы?
Артур Шевченко
13 апреля 2021, 16:56
0
Если ничего не происходит, значит скрипты не подключены, в противном случае обязательно что-то происходит и по тому, что конкретно происходит можно понять что ты не так делаешь. Нужно в системных настройках отключить стандартный редактор tickets.enable_editor
Сергій
13 апреля 2021, 15:33
0
Пробовал. После чего Tickets просто отказывался отправлять данные. Просто ничего не происходило при нажатие на кнопку.
Артур Шевченко
13 апреля 2021, 15:31
0
Я тут ещё подумал, у меня сейчас рейтинг выше чем у @Алексей Смирнов и это не правильно, он занимается поддержкой компонентов и в целом его скилл выше моего, поэтому я думаю надо авторам и тем кто поддерживает компоненты единовременно к рейтингу накидывать сколько-то баллов или за сам факт авторства/поддержки или за каждый компонент отдельно. Или за публикации в раздел «Новые дополнения и их Версии» повышать рейтинг баллов на 30-50. В общем надо более справедливую систему рейтинга.
Николай Савин
13 апреля 2021, 15:23
+1
Это уже есть в планах развития сайта. Сделаем.
Алексей Смирнов
13 апреля 2021, 15:00
0
Для ms2Gallery добавил вставку тегов и произвольный шаблон (Чанк) из списка сразу в окошке.
Список шаблонов формируется в папке.
Тег вставить можно только один.
Сергей
13 апреля 2021, 14:07
0
Подскажите, а можно ли как-нибудь ограничить поиск не по всему миру, а по конкретной области скажем в России или городу?
Евгений Шеронов
13 апреля 2021, 13:35
+1
Авторы могут и не заметить здесь и не знать о запрашиваемых интеграциях)
И в поддержке ни разу про такое никто не спрашивал.

Ну такая интеграция скорее всего потребует дополнительных расходов)

Вообще не помешала бы возможность подключать уведомления об интересующих компонентах, которые всё равно привязываются к топику при их упоминании.
SYAN
13 апреля 2021, 11:08
0
ну и не забываем включить jquery на сайте
Lori
13 апреля 2021, 10:05
0
возможно дело в том, что плагин работает при событии OnDocFormRender, а в вашем примере OnDocFormPrerender. Сейчас проверю
Николай Савин
13 апреля 2021, 09:56
0
Все там работает — я же не из головы взял код, а прямо из действующего проекта пример привел.
Lori
13 апреля 2021, 09:54
0
не работает к сожалению ваш пример. теперь вкладка нигде не выводится в принципе
Николай Савин
13 апреля 2021, 09:53
0
В целом да, но сравните с моим примером. Там читаемость получше будет. Меньше вложенности.
Николай Савин
13 апреля 2021, 09:52
0
можно ли в этом поле выводить значение tv дочернего ресурса
По умолчанию нельзя конечно. У нас доступны только поля текущего ресурса.
Навскидку вижу два пути решения вопроса.
1. Сделать небольшую инъекцию в процессор get — где просто добавить нужное поле
2. В JS скрипте при его загрузке делать ajax или fetch запрос за нужными данными и уже там подмешивать куда нужно значение поля
Lori
13 апреля 2021, 09:51
0
правильно ли я сделал:
Ext.ComponentMgr.onAvailable('modx-panel-resource', function(){
//Подключаем по id
if(this.record.id == 452) {
тут остальной код tab.js
}
});
Николай Савин
13 апреля 2021, 09:47
0
где мне в tab.js проверить id ресурса?
Ну правильнее всего в начале скрипта первой строкой
Lori
13 апреля 2021, 09:41
0
а, нет пардон, не получилось.
код плагина:
<?php

if($modx->event->name != 'OnDocFormRender') return '';

$modx->controller->addLastJavascript('/assets/components/mynamespace/js/tab.js');
Код tab.js:
Ext.override(MODx.panel.Resource, {
   getParentFields: MODx.panel.Resource.prototype.getFields,
    
   getFields: function(config){
       
       var parentFields = this.getParentFields.call(this, config);
       
       for(var i in parentFields) {
           var item = parentFields[i];
           
           if(item.id == 'modx-resource-tabs') {
               item.items.push({
                    id: 'my-custom-tab'
                    ,autoHeight: true
                    ,title: 'Редактирование новостей'
                    ,layout: 'form'
                    ,anchor: '100%'
                    ,items: [{
                        html: '<p>Тут можно привязать товары к новостям</p>'
                        ,bodyCssClass: 'panel-desc'
                        ,border: false
                    },{
                        layout: 'column',
                        width: '100%',
                        anchor: '100%',
                        cls: 'main-wrapper',
                        items: [{
                            columnWidth: .5,
                            items: [{
                                xtype: 'numberfield',
                                fieldLabel: '<span>Выберите новость</span>',
                                width: '100%',
                            }]
                        }, {
                            columnWidth: .5,
                            items: [{
                                xtype: 'textfield',
                                fieldLabel: '<span>Введите ID товаров через запятую</span>',
                                width: '100%',
                            }]
                        }]
                    }]
               });
           }
       }
       
       return parentFields;
   } 
});
где мне в tab.js проверить id ресурса?
Lori
13 апреля 2021, 09:30
0
круто, получилось! а не подскажете, можно ли в этом поле выводить значение tv дочернего ресурса, чтобы я мог его тут редактировать? такое возможно?