Михаил
и еще параметр нужен не AfterPrepare, а prepareWrap
Михаил
AfterPrepare это что-то из DLmenu вроде
Андрей [aharito]
и еще параметр нужен не AfterPrepare, а prepareWrap
Да, так и было, это я сейчас когда восстанавливал - ошибся. Поправлю сейчас, вдруг кто читать будет.
Андрей [aharito]
вдумайтесь, аякс вызывается на событии 404, которое вызывается уже после того, как движок не смог найти соотв. документ
Итак, на этот раз сделал я скрип в конце страницы, в котором [*id*] отлично рендерится: $(document).on('click', '[data-commerce-custom-action=remove]', function(e) { var doc_id = '[*id*]'; $.ajax({ url: 'remove-item-by-id', type: 'post', dataType: 'json', data: {doc_id: doc_id} }) .done(function(res) { if(res.status && res.status=='ok') { Commerce.reloadCarts(); } }); }); Вот плагин на событие OnPageNotFound if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') { return; } if(isset($_GET['q'])) { switch($_GET['q']){ case 'remove-item-by-id': $cart = ci()->carts->getCart('products'); $items = $cart->getItems(); $cart->removeById($POST['doc_id']); break; default: break; } } Но если плагин в порядке вызова на 404 событие стоит выше Commerxe, то конечно пишет что ci не определено, а если после - то плагин не отрабатывает, просто в консоли 404 на этот УРЛ.
Андрей [aharito]
Вот разметка
Андрей [aharito]
Скорее всего, где-то какая-то тупая ошибка... буду сейчас искать.
Am
Надеюсь, $cart->removeById() проверяет сама внутри данные которые в нее передают. (:
Раньше Здесь Был Мат_
Андрей [aharito]
Надеюсь, $cart->removeById() проверяет сама внутри данные которые в нее передают. (:
Хрен знает, это из серверного АПИ Commerce, я в него априори верую ))
Am
А то так прям с голого $_POST кидать данные без проверки не очень хорошо. И у Вас ошибка, может быть, или описка - $_POST, а не $POST
Андрей [aharito]
Отправляете постом, а в плагине гет
Не-не, $_GET['q'] все равно есть.
Андрей [aharito]
А то так прям с голого $_POST кидать данные без проверки не очень хорошо. И у Вас ошибка, может быть, или описка - $_POST, а не $POST
> И у Вас ошибка, может быть, или описка - $_POST, а не $POST БЛЯДЬ!!!! Если из-за этой описки я три часа потерял.... )))) проверяю.
Раньше Здесь Был Мат_
Иногда нужно отойти на некоторое время, чтобы свежим глазом глянуть...
Am
> И у Вас ошибка, может быть, или описка - $_POST, а не $POST БЛЯДЬ!!!! Если из-за этой описки я три часа потерял.... )))) проверяю.
Все может быть. В этом случае, не зависимо от результата проверки, все-так поставьте плагин проверки кода линт какой-нить, коли IDE не пользуетесь. Очень большой процент ошибок обычно именно из-за того что не правильно синтаксис используется, т.к. глаз очень мылится в течении дня.
Am
И, все-таки, не совсем понятно как Вы получаете GET в плагине отправляя POST аяксом. (%
Михаил
вообще я тут набросал рабочий вариант: <script> $(document).on('action-start.commerce', function(e, params) { params.data.current_id = '[*id*]'; }); </script> prepare: <?php if (isset($modx->documentIdentifier) && is_numeric($modx->documentIdentifier)) { $current_id = $modx->documentIdentifier; } else if (isset($_POST['data']['current_id']) && is_numeric($_POST['data']['current_id'])) { $current_id = $_POST['data']['current_id']; } if (!empty($current_id)) { foreach ($data['docs'] as $row => $product) { if ($product['id'] == $current_id) { $data['placeholders']['current_row'] = $row; break; } } } return $data['placeholders']; ownerTPL: <a class="button button_sm button_gray" data-commerce-action="remove" data-row="[+current_row+]">Удалить этот товар</a>
Alexander
Наконец-то запилил документацию с примерами про editDocs. Ссылку в самом модуле тоже добавил. Почитать можно здесь https://editdocs.grishin.net/ #editdocs #import #export
Axenia
remote_adm (2465.58) увеличил карму Grinyaha (1583.8)
Am
А на docs.evo.im в поиске пишет все что угодно кроме этого модуля ((%
Am
Am
Жаль что не в одном все месте где можно найти такие полезности. (:
Am
Для попадания в эти доки нужно платить ДДА?
Anonymous
Тут как вижу на E только одно решение
Anonymous
А ну и с маленькой ещё 3
Anonymous
Для попадания в эти доки нужно платить ДДА?
Надо отправить PR в гитхаб и потом ночью отработает крон 😊
Am
Тут как вижу на E только одно решение
Нуда, об этом и речь. Видимо остальные проплатили ((%
Andrey
Бордель)
Alexander
Я только за, можно и к основным запулить
Am
(%
Am
Я только за, можно и к основным запулить
"Пулите, Шура, пулите" (с)
Alexander
gitbook.com достаточно удобная хрень
Андрей [aharito]
Anonymous
Там вот кто-то прислал PR на украинском языке док, но пока нет идей как это на сайт адаптировать
Alexander
а здесь доку как делать? себе форк на гите сделать и потом пулы присылать?
Am
УРЛ идет в GET, а данные, отправляемые аяксом - в POST.
Уже потом понял что это где-то в админке или на странице с урлом. Проф.деформация ((%
Alexander
ну вот, да, так и думал.
Anonymous
Тут же сами выделили - последний, вроде, для переводов ((%
Оно то хорошо, но надо скрипт который сохраняет всё адаптировать под новые реалии 😊
Anonymous
Точнее парсит
Anonymous
Как раз вывести на трёх языках не проблема 😊
Anonymous
Беда-печаль. Времени нет, никому не нужно и т.д. ((%
Ну как говориться, а кто кроме меня это сделает?
Andrey
Дока огонь. Отлично все расписал. Такое бы да пару лет назад при релизе ) А то по приборам летали.
Axenia
aharito (305.75) увеличил карму Grinyaha (1601.29)
Андрей [aharito]
Отправляете постом, а в плагине гет
На всякий случай уточню, может будет полезно - это скрипт прямо на странице, и УРЛ идет в GET, а данные из аякс-запроса - уже в POST, именно поэтому в плагине УРЛ проверяется в Гет, а остальные данные берутся из Пост.
Андрей [aharito]
А зачем так? Не проще реквест использовать тогда?
Да хер знает, привык с давних пор.
Камиль
Господа, подскажите по SiteContent, а именно tvOrderBy
Камиль
мне нужно сделать сортировку по тв с типом date
Камиль
пытаюсь как то так ->tvOrderBy("UNIX_TIMESTAMP(STR_TO_DATE(event_start_time, "%d-%m-%Y %H:%i:%s")) ASC")
Камиль
не пойму как работает tvOrderBy
Андрей [aharito]
404 выбивает потому что break, а нужен exit. я думаю так
Да, я посмотрел, действительно забыл поставить exit() или die(), из-за этого 404.
Андрей [aharito]
404 выбивает потому что break, а нужен exit. я думаю так
paic Вот полностью рабочий вариант с плагином, на всякий случай, может пригодится. Удаляет из корзины товары с ИД, равным ИД текущей страницы, и перезагружает корзины. 1. Вот JS на странице $(document).on('click', '[data-commerce-custom-action=remove]', function(e) { var doc_id = '[*id*]'; $.ajax({ type: 'post', url: '/remove-item-by-id', dataType: 'json', data: {doc_id: doc_id} }) .done(function(res) { if(res.status && res.status=='ok') { Commerce.reloadCarts(); } }); }); 2. Вот плагин if(isset($_GET['q'])) { switch($_GET['q']){ case 'remove-item-by-id': $cart = $modx->commerce->getCart(); $items = $cart->getItems(); $cart->removeById($_POST['doc_id']); echo json_encode(['status'=>'ok']); die(); break; default: die(); break; } } 3. Вот строка в cart_wrap.tpl (ownerTPL) <span class="button button_sm button_gray" data-commerce-custom-action="remove">Удалить этот товар</span>
Андрей [aharito]
Проверьте разметку обертки, где именно и стоит hash корзины. Весь JS вроде как по data-hash атрибуту перезатирает разметку
Спасибо, я нашел решение традиционными для Эво способами, до Блейда все не успеваю дойти, надо будет все0таки поковырять.
Anonymous
paic Вот полностью рабочий вариант с плагином, на всякий случай, может пригодится. Удаляет из корзины товары с ИД, равным ИД текущей страницы, и перезагружает корзины. 1. Вот JS на странице $(document).on('click', '[data-commerce-custom-action=remove]', function(e) { var doc_id = '[*id*]'; $.ajax({ type: 'post', url: '/remove-item-by-id', dataType: 'json', data: {doc_id: doc_id} }) .done(function(res) { if(res.status && res.status=='ok') { Commerce.reloadCarts(); } }); }); 2. Вот плагин if(isset($_GET['q'])) { switch($_GET['q']){ case 'remove-item-by-id': $cart = $modx->commerce->getCart(); $items = $cart->getItems(); $cart->removeById($_POST['doc_id']); echo json_encode(['status'=>'ok']); die(); break; default: die(); break; } } 3. Вот строка в cart_wrap.tpl (ownerTPL) <span class="button button_sm button_gray" data-commerce-custom-action="remove">Удалить этот товар</span>
хз, что в этой жизни может пригодиться)) Но если честно, затея осталась не понятной. Если это для удаления ошибочно добавленного в корзину товара, то логичнее было бы, как мне представляется, делать кнопку "удалить из корзины" рядом с кнопкой "добавить в корзину" , например, в виде крестика который появлялся бы при добавлении товара в корзину. Или подменой кнопки "добавить в корзину" на "удалить из корзины".
Андрей [aharito]
вообще я тут набросал рабочий вариант: <script> $(document).on('action-start.commerce', function(e, params) { params.data.current_id = '[*id*]'; }); </script> prepare: <?php if (isset($modx->documentIdentifier) && is_numeric($modx->documentIdentifier)) { $current_id = $modx->documentIdentifier; } else if (isset($_POST['data']['current_id']) && is_numeric($_POST['data']['current_id'])) { $current_id = $_POST['data']['current_id']; } if (!empty($current_id)) { foreach ($data['docs'] as $row => $product) { if ($product['id'] == $current_id) { $data['placeholders']['current_row'] = $row; break; } } } return $data['placeholders']; ownerTPL: <a class="button button_sm button_gray" data-commerce-action="remove" data-row="[+current_row+]">Удалить этот товар</a>
Всё круто, работает, только два нюанса: 1) Там не prepare, а prepareWrap 2) У меня несколько товаров с одинаковым ID, потому что используются опции (разная фасовка), и в вашем варианте удаляется только один из этих товаров. Мне нужно, чтобы кнопка удаляла сразу оба товара с одинаковым ID, и поэтому нужный мне вариант даже проще: prepareWrap: <?php if (isset($modx->documentIdentifier) && is_numeric($modx->documentIdentifier)) { $current_id = $modx->documentIdentifier; } else if (isset($_POST['data']['current_id']) && is_numeric($_POST['data']['current_id'])) { $current_id = $_POST['data']['current_id']; } if (!empty($current_id)) { $data['placeholders']['current_id'] = $current_id; } return $data['placeholders']; ownerTPL: <span class="button button_sm button_gray" data-commerce-action="remove" data-id="[+current_id+]">Удалить эти товары</span>
Artem
Привет всем, может кто подсказать по поводу проверки сниппета на работоспособность? Ситуация такая, что [[sgLister]] как будто просто не отрабатывает. Не происходит парсинга сниппета короче, хочу разобраться из-за чего это может происходить
Artem
Он просто не отрабатывает