Яна Митрофанова

Яна Митрофанова

С нами с 13 августа 2016; Место в рейтинге пользователей: #515
Sergey (Sentinel)
25 апреля 2020, 18:19
3
0
в tinymcerte.toolbar1 добавляем fontsizeselect forecolor
в tinymcerte.plugins добавляем textcolor
все

toolbar
undo redo | styleselect | bold italic underline 
| fontselect fontsizeselect forecolor backcolor | alignleft aligncenter alignright
 | bullist numlist outdent indent | link image | code
Сергей Шлоков
14 марта 2020, 11:58
2
+1
Самое простое решение через сниппет
$arr = explode(',', $list);
$arr = array_map(function($val){return trim($val);}, $arr);
shuffle($arr);
$output = array_intersect_key($arr, array_flip(array_rand($arr, (int) $number)));

return implode(',', $output);
И вызывать сниппет так
[[!RandomValues? list=`один, мотор, кровать, солнце, 11, 55, привет, ёу` &number=`2`]]
mngatoff
02 декабря 2019, 02:23
6
+7
достаточно триггернуть событие change на input:count, и запрос отправится стандартными средствами минишопа.

я вот так делаю (немного вырвано из контекста, но принцип ясен):
<script>
$(document)
    .on('click touchend', countButton, function (e) { // где countButton - кнопки плюс и минус
        e.preventDefault();
        var $container = $(this).closest('.ms2_form'),
        $count = $container.find('[name="count"]'),
        num = $count.val();
        if (isNaN(num) === false) { // страховочка от, например, пустого поля
            num = parseInt(num, 10);
            switch ($(this).data('ms2-count')) { // соответственно, у кнопок должен быть атрибут data-ms2-count="plus или minus"
                case 'plus':
                    num = num + 1;
                    $count.val(num);
                    break;
                case 'minus':
                    if (num <= 1) return;
                    num = num - 1;
                    $count.val(num);
                    break;
            }
        } else {
            return false;
        }
        $count.trigger('change'); // инициализируем отправку на сервер.
    })
    .on('change keypress keyup', '.ms2_form [name="count"]', function() {
        if ($(this).val().match(/\D/)) {
            this.value = $(this).val().replace(/\D/g,''); // следим на лету, чтобы в поле были только цифры
        }
        if (parseInt($(this).val(), 10) < 1) {
            this.value = 1; // следим на лету, чтобы в поле было не меньше единицы
        }
    });
</script>
UDAV
18 апреля 2019, 11:22
3
+6
Обычный translit тоже так может!
Настройка friendly_alias_restrict_chars делаем alphanumeric и получаем тоже самое, без лишнего мусора.
Павел Гвоздь
11 февраля 2019, 19:52
2
+1
немного схитрить используя свойство fieldNames сниппета FormIt
А разве прописав кастомный параметр при вызове FormIt (или AjaxForm) он не попадает прямиком в чанк формы?
Я делаю примерно так:
{'!AjaxForm' | snippet : [
    ...
    'formFields' => [
        'name' => [
            'type' => 'text',
            'label' => '',
            'placeholder' => 'Ваше имя',
            'required' => true,
        ],
        'email' => [
            'type' => 'email',
            'label' => '',
            'placeholder' => 'Ваш email',
        ],
        'phone' => [
            'type' => 'text',
            'label' => '',
            'placeholder' => 'Контактный телефон',
            'required' => true,
        ],
    ],
    ...
]}

И в чанке формы:
{foreach $formFields as $fk => $fv}
    {if $fv['label']?}
        <div class="form__label-w">
            <label class="form__label">
                {$fv['label']}
            </label>
        </div>
    {/if}

    {switch $fv['type']}
        {case 'text'}
            <div class="form__input-w">
                <input class="form__input" type="text" name="{$fk}" placeholder="{$fv['placeholder']}">
            </div>

        {case 'email'}
            <div class="form__input-w">
                <input class="form__input" type="email" name="{$fk}" placeholder="{$fv['placeholder']}">
            </div>

        {case 'textarea'}
            <div class="form__input-w">
                <textarea class="form__input" name="{$fk}" placeholder="{$fv['placeholder']}"></textarea>
            </div>
    {/switch}

    <div class="form__error error_{$fk}"></div>
{/foreach}
Сергей Шлоков
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. Пользуетесь.
Андрей
24 января 2018, 12:15
5
0
Если там ничего мудреного нету, то подключить в них pdoTools и заменить все вызовы чанков через него:

//подключаем в начале сниппета
$pdo = $modx->getSetvice('pdoFetch');

//далее везде в сниппете заменить
$modx->getChunk

// на обработку через pdoTools
$pdo->getChunk

Так же можно сделать простейший поиск через pdoPage

{'!pdoPage' | snippet : [
  'parents' => 0,
  'includeContent' => 1,
  'context' => $_modx->context.key,

  'where' => [
    [
      'context_key' => $_modx->context.key
    ],
    [
      'AND:pagetitle:LIKE' => '%'~ $.get.search | escape ~'%',
      'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
      'OR:content:LIKE' => '%'~ $.get.search | escape ~'%'
    ]
  ] | toJSON,

  'tpl' => ''
]}
Денис
22 ноября 2017, 09:54
2
+3
Это из за имени name=«contact_acceptance[]».
Проблема в том, что contact_acceptance != contact_acceptance[]

Тут два решения. Добавить в js обработку события af_complete, которая будет подставлять на все input с фигурными скобками класс error:
$(document).on('af_complete', function(event, response) {
        if(response.success === false){
            var form = response.form;
            for (key in response.data) {
                $('input[name="'+key+'[]"]').addClass('error');
            }
	}
});
Либо использовать в верстке конструкцию такого типа, без фигурных скобок:
<input type="hidden" name="contact_acceptance" value="" />
<input type="checkbox" id="contactFormAcceptance" class="" name="contact_acceptance" value="1">
Если при отправке формы поставят чекбокс, то на FormIt получит значение 1 и валидация required будет выполнена, если не поставят, то придет пустое значение и форма не отправится.
Дмитрий
23 октября 2017, 22:52
4
+4
Я последний год работаю примерно так:
1) Создаю сайт с тарифом «Разработка» на modhost.pro. Это позволяет отказаться от тормозов на локальном сервере, плюс заказчик или другие работники (верстальщики, например) сразу могут видеть работу или вносить результаты своей работы
2) В NetBeans (да, PHPStorm мне что-то не зашел пока что :) ) создаю проект с удаленным сервером, выкачиваю пустую папку assets и пустую папку core. Тем самым не надо выкачивать целый сайт, только нужные файлы.
IDE ведет синхронизацию по FTP, поэтому проблем нет с такого рода деплоем.
3) В assets создаю подпапку templates, где храню весь фронтенд — js, sass, css, libs, svg, fonts, img.
4) В core создаю папку elements, в ней подпапки «chunks», «snippets», «plugins», «templates». Получается примерно так:
5) Включаю Fenom в настройках pdoTools.
6) Привязку к чанкам и сниппетам в админке не веду, все только через файловые элементы Fenom, никаких статических файлов в админке. Только если чанки каких-то допотопных компонентов, типа Gallery, которые не очень умеют с pdoTools.
7) Работаю и радуюсь. На modhost очень удобно сделаны бэкапы, работа в phpMyAdmin и всякое другое, локальным сервером уже не знаю, сколько не пользовался.
Сергей Водолагин
19 июня 2017, 18:43
8
+1
Вот друзья помогли (так как глубина от родителей до нужных ресурсов от 1 до 5 вот решение)
[[pdoResources?
    &parents=`4`
    &limit=`100`
    &sortby=`{ "pm5":"ASC","pm4":"ASC", "pm3":"ASC", "pm2":"ASC", "pm1":"ASC" }`
    &where=`{ "template": 10 }`
    &tpl=`tplSklad`
    &leftJoin=`{
        "p1": {
            "class": "modResource",
            "on": "p1.id = modResource.id"
        },
        "p2": {
            "class": "modResource",
            "on": "p2.id = p1.parent"
        },
        "p3": {
            "class": "modResource",
            "on": "p3.id = p2.parent"
        },
        "p4": {
            "class": "modResource",
            "on": "p4.id = p3.parent"
        },
        "p5": {
            "class": "modResource",
            "on": "p5.id = p4.parent"
        }
    }`
    &select=`{
        "modResource": "*",
        "p1": "COALESCE(p1.menuindex, 999999999) as pm1",
        "p2": "COALESCE(p2.menuindex, 999999999) as pm2",
        "p3": "COALESCE(p3.menuindex, 999999999) as pm3",
        "p4": "COALESCE(p4.menuindex, 999999999) as pm4",
        "p5": "COALESCE(p5.menuindex, 999999999) as pm5"
    }`
]]