EVO bot Лёшка
Сергей
Как в Evolution2 сделать точку входа для ajax запросов правильнее? Только без onPageNotFound. по мне это кривовато выглядит..
Сергей
Была мысль создать ресурс ajax с простым шаблоном @json($data) и разруливанием запросов в его контроллере.
Pathologic
контроллер и есть эта точка входа
Сергей
Контроллер привязан по названию к шаблону. Шаблон к ресурсу. Значит нужно создать отдельный ресурс с урлом например /ajax/ и слать запросы на него. Так?
Pathologic
так можно на текущую страницу же и слать
Сергей
а, ну да..
Сергей
Хотя нет..
Если например форма выводится на разных страницах с разными контроллерами, мне в каждом писать одинаковый обработчик.
Или выносить в базовый контроллер обработку..
А если выносить в базовый, то нужно разруливать запросы от разных типов форм.
как-то не айс.
или не так страшно как кажется?
Сергей
А можно сделать роуты без создания документов дереве ресурсов, и без прослушивания pageNotFound?
Это решит сразу две моих проблемы
Pathologic
ну сделай тогда файл ajax.php и там разруливай
Pathologic
а что там разруливать switch($_POST['formid'])
Pathologic
/**
* @return string
*/
protected function ajax ()
{
if ($this->getFormId() == 'login') {
return $this->getLoginForm([
'api' => 2,
'redirectTo' => 8
]);
}
}
Volodymyr
Volodymyr
но как по мне плагин не плохой вариант
Pathologic
а как по мне - плохой
Сергей
Вот мне тоже не нравится. 404 это все таки не для роутинга
Сергей
В идеале написать где-нибудь примерно такое
$this->route('get', '/api/entries', MyController::getEntries)
Anonymous
Хочешь купить вещи в 2 раза дешевле чем в магазине и без кидалова на предоплату?
Тогда тебе к нам, канал с расценками и товаром тут: https://t.me/joinchat/AAAAAEhjlbomgENouHbmKw
95567
Anonymous
Хочешь купить вещи в 2 раза дешевле чем в магазине и без кидалова на предоплату?
Тогда тебе к нам, канал с расценками и товаром тут: https://t.me/joinchat/AAAAAEhjlbomgENouHbmKw
96840
Oleg
Добрый вечер. Про табы вопрос - у пользователя-менеджера нельзя, например, открыть для редактирования 2 страницы одновременно в табах. И настройки для запрета/разрешения этого тоже нет. Или я не нашел?
Volodymyr
Dmytro
Dmytro
Oleg
Мне кажется только для админа. А то я уже все перепробовал.
Dmytro
Надо таску на гит сделаю там быстро главное не забыть/забить
Сергей
Pathologic
в ларавеле можно роуты добавить в сервис-провайдере
Pathologic
только у нас же не ларавель ((:
Сергей
Дмитрий обещал показать в контексте evo )
подождем
Dmytro
if(isset($_GET['q'])) {
$request['request'] = $_REQUEST;
$q = $request['request']['q'];
unset($request['request']['q']);
$routes = [
'test' => ['EvolutionCMS\Main\Controllers\ApiController', 'test'],
'test1' => ['EvolutionCMS\Main\Controllers\ApiController', 'test1'],
'test2' => ['EvolutionCMS\Main\Controllers\ApiController', 'test2'],
];
if (array_key_exists($q, $routes)) {
call_user_func_array([new $routes[$q][0], $routes[$q][1]], $request);
}
}
Dmytro
вот так пишем в сервис провайдере и получаем нужные endpoint для api )
Pathologic
лажа какая-то
Dmytro
Почему ?
Dmytro
надо именно роуты а не endpoint используем:
https://github.com/evolution-cms/example-package/blob/master/core/custom/packages/example/plugins/FastRoute.plugin.php
его так же можно просто в сервис провайдере тогда он будет отрабатывать до того как отработает роутинг EVO
Pathologic
ну это еще лучше, опять OnPageNotFound
Dmytro
Отлично работают оба варианты хоть в сервис провайдере хоть через on404
для себя понял что если делаем не открытое апи то проще использовать просто andpoints нет смысла роуты разбирать
Pathologic
что работают это бесспорно
Dmytro
Ну а куда еще вклинить роуты? или до того как пройдемся по роутингу EVO и попадем на документ или после 🙂 других вариантов собственнно и нет
Dmytro
Можно сделать типа специально событие но чем оно поможет суть таже останеться
Pathologic
проще тогда запросы к апи на отдельный файл отправлять
Pathologic
а там уже хочешь разбирай руками, хочешь подключай роутер
Dmytro
Dmytro
зачем плодить еще 1 файлик ? просто ради чего ?
Pathologic
так в твоих способах тоже нужно плодить 1 файлик
Dmytro
Можем сделать событие evoCustomRouting )
Dmytro
будет такое же как pageNotFound только называться по другому ))))
Pathologic
да, поэтому смысла нет
Сергей
Я правильно понял, что если запихнуть fastrouter в сервис провайдер, то сначала он сработает, и только если он не найдет роуты, то отработает роутинг evo?
Dmytro
Сергей
Ну этот вариант выглядит более менеее прилично на первый взгляд. Протестим.
Pathologic
в последнем примере как раз сначала отработает роутинг ево
Oleg
Oleg
Dmytro
Я после НГ займусь как раз до 8 гуляем 🙂 будет время )
Oleg
Dmytro
Сергей
Еще вопрос. Даже не вопрос, а скорее уточнение.
Я так понимаю, нельзя одним запросом дернуть документ и все его значения TV (учитывая дефолт)?
Pathologic
нельзя
Сергей
А так?
SELECT
`evo2_site_content`.`id`,
`evo2_site_content`.`pagetitle`,
`evo2_td`.`name`,
`evo2_tv`.`value`
FROM `evo2_site_content`
LEFT JOIN `evo2_site_tmplvar_contentvalues` as `evo2_tv`
on `evo2_tv`.`contentid` = `evo2_site_content`.`id`
LEFT JOIN `evo2_site_tmplvars` as `evo2_td`
on `evo2_td`.`id` = `evo2_tv`.`tmplvarid`
WHERE `evo2_site_content`.`parent` in (2500, 2543, 2548)
and `evo2_tv`.`tmplvarid` in (58, 50, 47, 59, 54, 57, 56)
and `evo2_site_content`.`deleted` = 0
and `evo2_site_content`.`published` = 1
Вроде дергаются, Но нужно потом дополнительно коллекцию обрабатывать, приводить к двумерной таблице
Am
Pathologic
А так?
SELECT
`evo2_site_content`.`id`,
`evo2_site_content`.`pagetitle`,
`evo2_td`.`name`,
`evo2_tv`.`value`
FROM `evo2_site_content`
LEFT JOIN `evo2_site_tmplvar_contentvalues` as `evo2_tv`
on `evo2_tv`.`contentid` = `evo2_site_content`.`id`
LEFT JOIN `evo2_site_tmplvars` as `evo2_td`
on `evo2_td`.`id` = `evo2_tv`.`tmplvarid`
WHERE `evo2_site_content`.`parent` in (2500, 2543, 2548)
and `evo2_tv`.`tmplvarid` in (58, 50, 47, 59, 54, 57, 56)
and `evo2_site_content`.`deleted` = 0
and `evo2_site_content`.`published` = 1
Вроде дергаются, Но нужно потом дополнительно коллекцию обрабатывать, приводить к двумерной таблице
для значений по умолчанию не создаются записи в contentvalues
Aliaksandr
А так?
SELECT
`evo2_site_content`.`id`,
`evo2_site_content`.`pagetitle`,
`evo2_td`.`name`,
`evo2_tv`.`value`
FROM `evo2_site_content`
LEFT JOIN `evo2_site_tmplvar_contentvalues` as `evo2_tv`
on `evo2_tv`.`contentid` = `evo2_site_content`.`id`
LEFT JOIN `evo2_site_tmplvars` as `evo2_td`
on `evo2_td`.`id` = `evo2_tv`.`tmplvarid`
WHERE `evo2_site_content`.`parent` in (2500, 2543, 2548)
and `evo2_tv`.`tmplvarid` in (58, 50, 47, 59, 54, 57, 56)
and `evo2_site_content`.`deleted` = 0
and `evo2_site_content`.`published` = 1
Вроде дергаются, Но нужно потом дополнительно коллекцию обрабатывать, приводить к двумерной таблице
Потом эти запросы лягут на сайтах с десятком тысяч ресурсов, проходили уже в админке этот "один запрос"
Сергей
Aliaksandr
Здесь частный случай.
В чем он частный, в том, чтобы замедлить сайт раз в надцать? Тогда ок, доклистер тоже сначала все джойнил :)
EVO bot Лёшка
Pathologic
ну для частного случая с одним тв может и нормально (:
vvs
vvs
Aliaksandr
Кстати, можно ли как-то ускорить запрос вида select .. where id in (тысяч десять айдишников) … , а то он под секунду исполняется бывает
Aliaksandr
id из site_content
Pathologic
посмотри explain
Pathologic
и что ты выбираешь
Владимир
Ребят подскажите а как подружить шопкипер с formlister?
Раньше всегда eform было с:
&eFormOnBeforeMailSent=`populateOrderData`
&eFormOnMailSent=`sendOrderToManager`
а тут поменял на
&prepareProcess=`populateOrderData`
&prepareAfterProcess=`sendOrderToManager`
И форма не отправляет ничего
EVO bot Лёшка
Volodymyr
Владимир