Наумов Алексей

Наумов Алексей

С нами с 31 марта 2013; Место в рейтинге пользователей: #13
Наумов Алексей
19 апреля 2024, 11:49
0
Самое лучшее решение в данной ситуации — это сделать отдельный файл для работы с этим API, например:
/assets/components/mycomponent/api.php
ну или просто попроще
/api.php
внутри этого файла инициализируем MODX в API режиме, читаем, например:
modx.pro/development/3163

А далее просто получаем данные, как нам нужно и выводим в json:
$query = $modx->newQuery('modResource');
$query->where([
'parent' => 2,
]);

$resources = $modx->getIterator('modResource', $query);
$data = [];
foreach($resources as $resource) {
$data[] = [
'pagetitle' => $resource->get('pagetitle');
];
}

header("Content-Type: application/json");
echo json_encode($data);
exit();
да, если нужны TV поля, то запрос будет сложнее. Но эта информация тоже есть на форуме.
Если уж совсем лень писать запрос — то можно внутри скрипта вызвать сниппет pdoresources:
$data = $modx->runSnippet('pdoResources', [ПАРАМЕТРЫ]);
Наумов Алексей
18 апреля 2024, 11:28
0
$_modx->resource['tv-name']
Или в чанках где-то внутри pdoResources
$_pls['tv-name']
но лучше избегать дефис в названиях TV. Дефис нельзя использовать в названиях переменных в php, из-за этого возникают трудности в Fenom. Замените на подчеркивание.
Наумов Алексей
17 апреля 2024, 18:35
+1
Я всегда делаю так:
В корневой директории сайта
/home/user/data/www/modx.test.ru/
создаю папкуgo
Extras/Scheduler/
и уже в нее кидаю содержимое репозитория.

Этот подход предлагает modExtra (см. readme) github.com/modx-pro/modExtra

Конечно и другие подходы есть к разработке, но я предпочитаю этот)
Наумов Алексей
17 апреля 2024, 16:35
0
Когда идет разработка, то обычно исходники пакета лежат примерно по такому пути:
/Extras/ModxExtraName/
поэтому не совсем понимаю, зачем еще 1 уровень вложенности добавлять.
Наумов Алексей
16 апреля 2024, 14:37
+1
Перенесу и свой ответ тогда уж!:
пару месяцев назад я переписал это всё… сейчас по другому, в github код доступен. Можно даже PR сделать!
Интересная мысль насчет целесообразности создания сессий для ботов… в принципе может они и не нужны… как вариант можно добавить соответствующую настройку в компонент. В общем мысль сохранил.
Наумов Алексей
16 апреля 2024, 10:00
0
так если про smartSessions вопрос — то я пару месяцев назад переписал это всё… сейчас по другому, в github код доступен. Можно даже PR сделать! и да, если еще вопросы будут — давай переедем в соседнюю тему, чтобы Володю не дергать)
Наумов Алексей
15 апреля 2024, 16:20
0
Да, в свои js скрипты добавить данный код, внутри функции разместить код от яндекс.метрики. Ну а для отслеживания конкретной формы нужно выяснить, к примеру, её id, который должен присутствовать где-то в response. Я предпочитаю к форме добавлять data атрибут, наподобие:
<form data-goal="feedback">
Наумов Алексей
15 апреля 2024, 15:34
+1
Пожалуй отвечу:
добавить обработчик на событие «fetchit:success»
docs.modx.pro/components/fetchit/frontend/events

document.addEventListener('fetchit:success', (e) => {
    const { response } = e.detail;

    // Посмотреть данные response
    // console.log(response);
})
Наумов Алексей
14 апреля 2024, 00:04
+2
Как бы я поступил:

создал компонент (на базе modExtra), чтобы быстро, где будет по сути 1 объект Услуга (header, alias, description, seo_title/seo_description, а также полем parent_id для вложенности).
Свой интерфейс для управления ими будет поудобнее, чем MIGX. Чуть подумать, чтобы интерфейс выглядел симпатично и понятно (больше всего вопросов по отображению услуга/подуслуга).

Да, можно конечно поставить fastRoute или VirtualPages, но т.к. уровень вложенности не большой, то в целом все решается не самым сложным плагином на OnPageNotFound.
Чуть сложнее, если нужно ряд услуг скрыть для определенных моделей авто…

Кстати, VirtualPages у меня трудится на одном проекте уже много лет стабильно:)
Наумов Алексей
07 апреля 2024, 19:27
0
Ну… попробую описать) у меня в проекте очень длинный код и он делает не много не то, что вам нужно, поэтому всю портянку сюда не вставить.

0. на фронте добавляем поле для выбора ширины или ввода его вручную

1. Создадим плагин на событие msopOnAfterGetCost
if ($modx->event->name == 'msopOnAfterGetCost') {
    $isGetModificationAction = (isset($_REQUEST['action']) && $_REQUEST['action'] == "modification/get");
    $isCartAddAction = (isset($_REQUEST['ms2_action']) && $_REQUEST['ms2_action'] == "cart/add");
    
    // Обрабатываем только ajax запросы, в которых компонент msOptionsPrice2 отдает цену
    // Есть альтарнативный способ: проверять $_REQUEST['ms2_action'] !== cart/add
    if($isGetModificationAction || $isCartAddAction) {
    // здесь наш основной код
    // доступна переменная $modification
    // если пользователь выбрал определенную модификацию и у нее есть цена, то берем данные из нее
    if($modification['id']) {
    } else {
        // нет модификации, соответствующей переданным параметрам...
        // нужно высчитать цену, исходя из ширины вашего товара
        // ...
        // а вот тут мы вернем цену
        $modx->event->returnedValues['cost'] = ???;
    }
    
    
    }
}
2.
Наумов Алексей
04 апреля 2024, 17:05
1
+4
Временный фикс:

Cниппет ms_CDEK2

1. Одну строку комментируем, новую добавляем:
//$modx->regClientScript('https://www.cdek.ru/website/edostavka/template/js/widjet.js');
$modx->regClientScript('https://cdn.jsdelivr.net/gh/cdek-it/widget@2.5.5/widget/widjet.js');
2. Еще одну строку ниже комментируем, а новую добавляем:
//path: "https://www.cdek.ru/website/edostavka/template/scripts/",
path: "https://cdn.jsdelivr.net/gh/cdek-it/widget@2.5.5/widget/scripts/",
Наумов Алексей
03 апреля 2024, 23:39
0
Нужно отлаживать… добавьте debugger перед этим if, и нужно посмотреть что приходит в responseData? Есть там row? Есть в этом row id? Может различия в версиях miniShop2…
Наумов Алексей
27 марта 2024, 17:51
0
например, не так давно я работал с каким-то сайтом на хостинге, и хоть сайт был под php 7.4, но если я просто в консоли (из под ssh, или через веб-интерфейс хостинга) вызывал этот самый php, то запускался php 5.3.
Наумов Алексей
27 марта 2024, 17:33
+1
Есть ли какие-то ограничения со стороны хостинга для запуска composer из php?
Я к тому, что пакет это делает… но не будет ли на некоторых хостингах это запрещено?
Наумов Алексей
21 марта 2024, 11:07
+2
Привет! Молодец, как всегда)
mmxDatabase понравился! Прям чешутся руки применить и попробовать, осталось найти где. По нему небольшой вопрос, сторонние модели возможно добавлять в список поддерживаемых разработчику? Например для miniShop3 (когда-то в будущем)?

И вопрос по mmxForms, верно понял, что использование компонента на фронте выливается примерно в 1,5 мб дополнительного css и js? Много, конечно, если речь про формы типа «Перезвоните мне»
Наумов Алексей
21 марта 2024, 10:54
0
до сих пор придерживаются транспортных пакетов?
Устоявшаяся экосистема, привычные механизмы, куча реализованных пакетов (а переписать все это нужно много времени)? Типа работает — не трогай))
Наумов Алексей
19 марта 2024, 14:22
0
8 лет, 8 месяцев и 19 дней прошло с момента создания этой публикации =)
Наумов Алексей
12 марта 2024, 14:47
0
и в src и в dst что-то типа (только не помню MODX_BASE_PATH слеш содержит уже или нет).
$src = MODX_BASE_PATH . '/assets/images/image.jpg';
$dst = MODX_BASE_PATH . '/assets/images/image-new.jpg';
Наумов Алексей
12 марта 2024, 14:35
+1
как-то так:

// подключаем phpthumb
require_once MODX_CORE_PATH.'model/phpthumb/phpthumb.class.php';
// создаем объект phpThumb
$phpThumb = new phpThumb();
// задаем имя файла
$phpThumb->setSourceFilename($src);
// параметры
$phpThumb->setParameter('w', 100);
$phpThumb->setParameter('h', 150);
// генерируем файл
if ($phpThumb->GenerateThumbnail()){
  if ($phpThumb->RenderToFile($dst)) {
    // превью сохранено!
  }
}
Наумов Алексей
12 марта 2024, 14:00
0
большой вопрос — почему в почту попадает вот это а не содержимое чанка письма…