Артур Шевченко

Артур Шевченко

С нами с 24 мая 2019; Место в рейтинге пользователей: #4
Отправить деньги
Артур Шевченко
24 ноября 2024, 21:06
0
Какие задачи ты решаешь с помощью Vue?

Например я так и не смог заставить себя освоить Vue, потому что не вижу куда могу применить эти знания.
Мне в работу попадают обычные интернет-магазины, сайты визитки, лэндинги для чего там может понадобится Vue не представляю.

Самый сложный с точки зрения интерфейса сайт это сайт-каталог образовательных программ, там довольно заковыристая форма оформления заказа. Но, учитывая то, как работает Modx (сниппеты, чанки, шаблоны), я для себя решил, что проще отправлять запросы на сервер и вставлять на страницу полученный от него html. На долю JS остаётся только отправка запроса, вставка html и открыть\закрыть модалку.

во вторых нода однопоточная
А PHP многопоточный? Думаю скорость ответа NodeJs не от этого высокая.

А ещё хотелось бы понять для кого и для чего компонент gtsAPI? Какие практические задачи ты с его помощью решаешь?
Артур Шевченко
24 ноября 2024, 13:39
0
Моя кофейная гуща говорит о том, что это код html и там есть смайлики, а кодировка бд не utf8mb4.
Артур Шевченко
22 ноября 2024, 21:57
+1
Лучше деинсталировать и установить новую версию. Там полностью переписан JS.
Артур Шевченко
21 ноября 2024, 22:15
1
0
надо как то подгружать через Ajax, разные формы
Можно и подгружать. Устанавливаешь SendIt. Разметка будет такая
<form action="">
    <select name="realty_type" data-si-preset="load_fields" data-si-event="change" data-si-form>
        <option value="квартира" selected>квартира</option>
        <option value="земельный участок">земельный участок</option>
    </select>
    <div id="results">{'loadFields' | snippet: ['type' => 'квартира']}</div>
</form>
Пресет такой
'load_fields' => [
    'hooks' => '',
    'resultBlockSelector' => '#results',
    'resultShowMethod' => 'insert',
    'snippet' => 'loadFields'
]
Сниппет loadFields примерно такой
$type = $type ?? $_POST['realty_type'];
$html = '';
switch ($type) {
    case 'квартира':
        $html = $modx->getChunk('flatFields', []);
        break;
    case 'земельный участок':
        $html = $modx->getChunk('groundFields', []);
        break;
}
if($SendIt){
    if($result['success']){
        return $SendIt->success(true, ['html' => $html]);
    }else{
        return $SendIt->error(false, []);
    }
}
return $html;
Ну а в чанках соответственно поля.
Артур Шевченко
21 ноября 2024, 11:40
0
как вообще можно реализовать подгрузку разных параметров недвижимости, в зависимости от того, жилая это недвижимость или коммерческая?
В простом варианте решения все параметры сразу есть в форме, а ты с помощью JS скрываешь те, которые не относятся к выбранному типу недвижимости. Примерно так
<style>
    .d-none {
        display: none;
    }
</style>
<form action="">
    <select name="realty_type">
        <option value="квартира" selected>квартира</option>
        <option value="земельный участок">земельный участок</option>
    </select>
    <input type="number" name="room_count" data-type="квартира">
    <input type="number" name="square_for_live" data-type="квартира">
    <input type="number" name="total_square">
    <select name="destination" data-type="земельный участок" class="d-none">
        <option value="ИЖС">ИЖС</option>
        <option value="Земли сельхоз назначения">Земли сельхоз назначения</option>
    </select>
</form>

<script>
    const realtyType = document.querySelector('[name="realty_type"]');
    const linkedFields = document.querySelectorAll('[data-type]');
    realtyType && realtyType.addEventListener('change', e => {
      linkedFields.forEach(field => field.classList[field.dataset.type === e.target.value ? 'remove' : 'add']('d-none'));
    })
</script>
Артур Шевченко
18 ноября 2024, 15:11
0
Предположим, что объявления это ресурсы. Тогда я бы создал отдельную таблицу для хранения данных об оплаченных услугах для конкретных ресурсов. Сами услуги и оплату сделал бы через minishop2. Ещё повесил бы на крон задачу, которая будет проверять когда заканчивается оплаченный период.
Артур Шевченко
18 ноября 2024, 13:34
0
Скорее всего дело в том, что за короткое время происходит изменение нескольких полей заказа и, поскольку данные записываются в сессию, она не успевает обновится. Тут либо переходить на хранение данных в БД, если версия minishop2 позволяет, или ставить задержку через setTimeout().
Артур Шевченко
16 ноября 2024, 19:59
0
Подскажите, что не так делаю?
Ты вызываешь сниппет в инлайновом чанке.
Артур Шевченко
13 ноября 2024, 10:55
+1
Не все пожелания клиента нужно реализовывать. Одно дело когда желание обосновано бизнес-процессами, а другое дело клиент так видит. В данном случае, на мой взгляд, это бессмысленное усложнение.
Артур Шевченко
12 ноября 2024, 20:36
0
Но как указать при Авторизации, сделать так, что бы проверяло логины только собственников, и если там вводят логин Риелтора, выдало ошибку, и писало ошибку.
А зачем выдавать ошибку, если у риеторов тоже есть лк?
Артур Шевченко
12 ноября 2024, 20:26
0
И что бы даже если пытаются зайти через страницу авторизации собственника, не пускало риелтора.
Нужно создать две группы ресурсов одну для риелторов, другую для собственников, и в каждую группу положить соответствующие ресурсы.

при авторизации, были две разные ссылки, для Риелторов отдельно, для собственников отдельно.
Наверное плагином на событие OnWebLogin можно сделать редирект.
Артур Шевченко
11 ноября 2024, 11:20
+1
Да, Tickets тоже не адаптирован, и если никто не возьмётся, то и не будет адаптирован.
Артур Шевченко
11 ноября 2024, 10:35
0
На modstore полно компонентов, которые не дружат с modx 3 и их можно скачать из админки. А создать календарь ты не можешь, потому что данный компонент не адаптирован по modx 3. Вариантов у тебя два: адаптировать самой или понизить версию modx
Артур Шевченко
10 ноября 2024, 21:42
0
Учитывая кто автор компонента, есть сомнение в том, что данный компонент совместим Modx 3.
Артур Шевченко
07 ноября 2024, 22:29
0
Есть параметр return, который позволяет вернуть json. Его можно преобразовать в массив, а уже массив перебрать столько раз сколько нужно, каждый раз рендерить нужный вид меню.
Артур Шевченко
06 ноября 2024, 10:28
0
Плагин на сохранение возможно. Или не заполнено обязательное поле.
Артур Шевченко
28 октября 2024, 19:51
+1
Немного сократил и добавил поддержку файловых чанков.
<?php
$start = $modx->getOption('start', $scriptProperties, '');
$end = $modx->getOption('end', $scriptProperties, '');
$chunk = $modx->getOption('tpl', $scriptProperties, '');

// определяем в каких случаях мы ничего не будем делать, нам важно не перетрудиться.
if((!$start && !$end) || !$chunk){
    return '';
}
// завозим поддержку файловых чанков
if(!$parser = $modx->getService('pdoTools')){
    $parser = $modx;
}

$now = strtotime('d.m.Y');
$currentYear = date('Y');
// предполагается что дада передаётся строкой вида "d.m"
$startTime = strtotime($start . '.' . $currentYear);

// если задана только дата начала, считае, что оформление будет активно только в эту дату
if(!$end){
    if($now === $startTime){
        return $parser->getChunk($chunk);
    }
}

$startParts = explode('.', $start);
$endParts = explode('.', $end);

// проверяем больше месяц даты начала месяца даты окончания
if((int)$startParts[1] > (int)$endParts[1]){
    $endTime = strtotime($end . '.' . ($currentYear + 1));
}else{
    $endTime = strtotime($end . '.' . $currentYear);
}

if ($now < $startTime || $now > $endTime) {
   return '';
}
return $parser->getChunk($chunk);