Новости
- 16.02.2019 - Вышел Shopkeeper 4.0.3
- 05.02.2019 - Symfony для MODX-разработчиков
- 18.01.2019 - Вышел Shopkeeper 4.0.0, Обновлен сайт
- 15.11.2018 - Импорт/экспорт товаров в Shopkeeper 4
- 18.09.2018 - Вышел Shopkeeper v4.0-rc
- 14.09.2018 - Установка и обзор Shopkeeper4
- 29.07.2018 - Бесплатные базы данных MongoDB на 1 год
- 21.07.2018 - Критическая уязвимость MODX <=2.6.4
- 01.06.2018 - Тест производительности Shopkeeper 4
Последние темы
-
Вышел Shopkeeper 4.0.3
Новости1 -
TagManager2 отображает в фильтре удаленные значения TV-полей
Поддержка7 -
Бесплатные базы данных MongoDB на 1 год
Новости7 -
Не добавляется цена товара в корзину.
Поддержка8 -
Пересчет цены в зависимости от параметров
Поддержка3 -
CatalogFill: не работает импорт в таблицу MIGXDB
MODX - Вопросы и обсуждения15 -
TagManager2 при фильтрации на странице, ничего не происходит
Поддержка17 -
Не выводиться ID товара в письме
Поддержка2 -
Несколько значений checkbox для Formit
MODX - Вопросы и обсуждения2 -
Array в теле письма после оформления заказа
Поддержка5 -
Изменения товара на внешней части сайта modx
MODX - Вопросы и обсуждения10 -
tagManager2 отображает в фильтрации значения удаленных товаров
Поддержка1 -
Цена доставки (не получается найти)
Общие вопросы3 -
shopkeeper3 и цена в зависимости от площади
Поддержка9 -
Catalofill выдает 502 ошибку при загрузке 35 000+ позиций
Поддержка13 -
Получить имена и значения всех TV
Поддержка10 -
CatalogFill + MIGX (не shopkeeper)
Поддержка4 -
Symfony для MODX-разработчиков
Новости1 -
Shopkeeper2 другие цены у товаров в зависимости от выбранного способа оплаты
Поддержка7 -
Не добавляет товары через SHK.toCartFromArray
Поддержка4
Записки велосипедиста №2. Список заказов пользователя.
-
Очередная порция велосипедов подъехала. Сегодня вывод списка заказов пользователя. Работает, сверяя заказы по почте пользователя. Поэтому вообще не важно, Login у вас, Офис или прочие непотребства.
Есть у Андрея платный плагин, но мне, если честно, его функционал избыточен. Ибо не совсем понимаю, зачем юзверю редактировать свои заказы. Это ведь может путаницу создать, когда заказ принят, а его вдруг поменяли.
Приступаем.
- Создаём страницу "Список заказов" и туда выводим
[[!user_order_info]]
- Создаём, соответственно, сниппет user_order_info
- Вставляем в сниппет код:
<?php //получаем почту активного юзверя и подставляем её в переменную $profile = $modx->user->getOne('Profile'); $email = $profile ? $profile->get('email') : ''; //просим у БД выдадать нам ID, стоимость заказа и другие данные заказов, относящихся к пользователю с определённой почтой $sql = "SELECT `price`, `id`,`delivery`,`delivery_price`,`payment`,`date` FROM `modx_shopkeeper3_orders` WHERE `email` = '$email'"; $query = new xPDOCriteria($modx, $sql, array( ':id' => '10' )); if ($query->prepare() && $query->stmt->execute()) { $res = $query->stmt->fetchAll(PDO::FETCH_ASSOC); //оформляем шапку таблицы echo ' <table class="table"> <thead> <tr> <th>ID</th> <th>Цена</th> <th>Доставка</th> <th>Цена доставки</th> <th>Способ оплаты</th> <th>Дата</th> </tr> </thead> <tbody>'; //выводим содержимое - данные о заказе foreach ($res as $row) { echo "<tr>" . "<td>" . $row['id'] . "</td>" . "<td>" . $row['price'] . "</td>" . "<td>" . $row['delivery'] . "</td>" . "<td>" . $row['delivery_price'] . "</td>" . "<td>" . $row['payment'] . "</td>" . "<td>" . $row['date'] . "</td>" ."</tr>"; } //закрываем таблицу echo ' </tbody> </table>'; } //если чего-то вдруг не работает else echo "Запрос не выполнен";
ВАЖНО!!! В этом куске кода
FROM `modx_shopkeeper3_orders`
modx нужно заменить на ваш префикс таблиц. Ибо я тот ещё велосипедист, и так и не понял, как вытащить эти данные из системы.
UPD #1
Нашёл время - доработал сниппет немного. Теперь научил его выводить дополнительные данные + доработал код, теперь он чище и немного правильнее
-
Появилось содержимое заказа (товары со ссылками) + количество товара в заказе
-
Появились поля: адрес доставки, телефон, комментарий.
-
Поправил код, чтобы вам не приходилось вписывать свой префикс таблиц руками
Список действий, чтобы получить такую табличку в личном кабинете пользователя:
-
Создаём страничку Список заказов и выводим [[!user_order_info]]
-
Создаём сниппет user_order_info
<?php $prefix = $modx->getOption('table_prefix'); // получаем префикс таблицы $profile = $modx->user->getOne('Profile'); // получем профиль пользователя $email = $profile ? $profile->get('email') : ''; // получем почту пользователя $table = $prefix.'shopkeeper3_orders'; // перфикс + название таблицы //просим у БД выдадать нам ID, стоимость заказа и другие данные заказов, относящихся к пользователю $sql = " SELECT `price`, `id`,`delivery`,`delivery_price`,`payment`,`date`,`contacts` FROM `$table` WHERE `email` = '$email' "; $query = new xPDOCriteria($modx, $sql); if ($query->prepare() && $query->stmt->execute()) { $res = $query->stmt->fetchAll(PDO::FETCH_ASSOC); //оформляем шапку таблицы echo ' <table class="table table-bordered table-hover"> <thead> <tr> <th>ID</th> <th>Цена</th> <th>Способ доставки</th> <th>Цена доставки</th> <th>Способ оплаты</th> <th>Дата</th> <th>Состав заказа</th> <th>Кол-во</th> <th>Адрес доставки</th> <th>Телефон</th> <th>Комментарий к заказу</th> </tr> </thead> <tbody>'; //выводим содержимое - данные о заказе foreach ($res as $row) { $json = $row['contacts']; $array = json_decode($json); echo '<tr>' . '<td>' . $row['id'] . '</td>' // ID заказа (номер) . '<td>' . $row['price'] . '</td>' // Стоимость заказа . '<td>' . $row['delivery'] . '</td>' // Способ доставки . '<td>' . $row['delivery_price'] . '</td>' // Цена доставки . '<td>' . $row['payment'] . '</td>' // Способ оплаты . '<td>' . $row['date'] . '</td> '// Дата заказа . "[[!user_order_list? &order_id = `" . $row['id'] ."`]]" // Сниппет, выводящий одержимое заказа (товары и количество); в параметр order_id передаёт номер заказа, для которого нужно узнать товары . '<td>' . $array[1]->value . '</td>' // Адрес доставки . '<td>' . $array[3]->value . '</td>' // Телефон, на который был оформлен заказ . '<td>' . $array[4]->value . '</td>' //Комментарий к заказу // Если нужно получить почту, указанную при заказе - удалите // // . '<td>' . $array[2]->value . "</td>" // Если нужно получить ФИО заказчика - удалите // // . '<td>' . $array[0]->value ."</td>" ."</tr>"; } //закрываем таблицу echo ' </tbody> </table>'; } //если чего-то вдруг не работает else echo "Запрос не выполнен";
- Создаём сниппет user_order_list
<?php $prefix = $modx->getOption('table_prefix'); // получаем префикс $table = $prefix.'shopkeeper3_purchases'; // перфикс + название таблицы //просим у БД выдадать нам информацию о товарах, находящихся в заказе с ID из user_order_info $sql = "SELECT `name`, `p_id` , `count` FROM `$table` WHERE `order_id` = '$order_id'"; $query = new xPDOCriteria($modx, $sql); if ($query->prepare() && $query->stmt->execute()) { $res = $query->stmt->fetchAll(PDO::FETCH_ASSOC); //оформляем таблицу echo "<td>"; //выводим содержимое - товары в заказе foreach ($res as $row) { echo '<a href="[[~' . $row['p_id'] . ']]">' . $row['name'] . '</a> <br>'; } //оформляем таблицу echo "</td>"; echo '<td align="center">'; //выводим содержимое - количество товара в заказе foreach ($res as $row) { echo $row['count'] . "<br>"; } //оформляем таблицу echo "</td>"; } //если чего-то вдруг не работает else echo "Запрос не выполнен";
Всё. Наслаждаемся табличкой заказов для клиента.
Единственное гипотетическое "НО", возможно у вас будет другая структура полей в заказе. Тогда нужно просто поменять
$array[4]->value в user_order_info на, например, $array[3]->value -
@pooding выглядит это чудо так
-
Andchir, если есть возможность, пожалуйста, замените главное сообщение темы на это.
UPD #1
Нашёл время - доработал сниппет немного. Теперь научил его выводить дополнительные данные + доработал код, теперь он чище и немного правильнее
-
Появилось содержимое заказа (товары со ссылками) + количество товара в заказе
-
Появились поля: адрес доставки, телефон, комментарий.
-
Поправил код, чтобы вам не приходилось вписывать свой префикс таблиц руками
Список действий, чтобы получить такую табличку в личном кабинете пользователя:
-
Создаём страничку Список заказов и выводим [[!user_order_info]]
-
Создаём сниппет user_order_info
<?php $prefix = $modx->getOption('table_prefix'); // получаем префикс таблицы $profile = $modx->user->getOne('Profile'); // получем профиль пользователя $email = $profile ? $profile->get('email') : ''; // получем почту пользователя $table = $prefix.'shopkeeper3_orders'; // перфикс + название таблицы //просим у БД выдадать нам ID, стоимость заказа и другие данные заказов, относящихся к пользователю $sql = " SELECT `price`, `id`,`delivery`,`delivery_price`,`payment`,`date`,`contacts` FROM `$table` WHERE `email` = '$email' "; $query = new xPDOCriteria($modx, $sql); if ($query->prepare() && $query->stmt->execute()) { $res = $query->stmt->fetchAll(PDO::FETCH_ASSOC); //оформляем шапку таблицы echo ' <table class="table table-bordered table-hover"> <thead> <tr> <th>ID</th> <th>Цена</th> <th>Способ доставки</th> <th>Цена доставки</th> <th>Способ оплаты</th> <th>Дата</th> <th>Состав заказа</th> <th>Кол-во</th> <th>Адрес доставки</th> <th>Телефон</th> <th>Комментарий к заказу</th> </tr> </thead> <tbody>'; //выводим содержимое - данные о заказе foreach ($res as $row) { $json = $row['contacts']; $array = json_decode($json); echo '<tr>' . '<td>' . $row['id'] . '</td>' // ID заказа (номер) . '<td>' . $row['price'] . '</td>' // Стоимость заказа . '<td>' . $row['delivery'] . '</td>' // Способ доставки . '<td>' . $row['delivery_price'] . '</td>' // Цена доставки . '<td>' . $row['payment'] . '</td>' // Способ оплаты . '<td>' . $row['date'] . '</td> '// Дата заказа . "[[!user_order_list? &order_id = `" . $row['id'] ."`]]" // Сниппет, выводящий одержимое заказа (товары и количество); в параметр order_id передаёт номер заказа, для которого нужно узнать товары . '<td>' . $array[1]->value . '</td>' // Адрес доставки . '<td>' . $array[3]->value . '</td>' // Телефон, на который был оформлен заказ . '<td>' . $array[4]->value . '</td>' //Комментарий к заказу // Если нужно получить почту, указанную при заказе - удалите // // . '<td>' . $array[2]->value . "</td>" // Если нужно получить ФИО заказчика - удалите // // . '<td>' . $array[0]->value ."</td>" ."</tr>"; } //закрываем таблицу echo ' </tbody> </table>'; } //если чего-то вдруг не работает else echo "Запрос не выполнен";
- Создаём сниппет user_order_list
<?php $prefix = $modx->getOption('table_prefix'); // получаем префикс $table = $prefix.'shopkeeper3_purchases'; // перфикс + название таблицы //просим у БД выдадать нам информацию о товарах, находящихся в заказе с ID из user_order_info $sql = "SELECT `name`, `p_id` , `count` FROM `$table` WHERE `order_id` = '$order_id'"; $query = new xPDOCriteria($modx, $sql); if ($query->prepare() && $query->stmt->execute()) { $res = $query->stmt->fetchAll(PDO::FETCH_ASSOC); //оформляем таблицу echo "<td>"; //выводим содержимое - товары в заказе foreach ($res as $row) { echo '<a href="[[~' . $row['p_id'] . ']]">' . $row['name'] . '</a> <br>'; } //оформляем таблицу echo "</td>"; echo '<td align="center">'; //выводим содержимое - количество товара в заказе foreach ($res as $row) { echo $row['count'] . "<br>"; } //оформляем таблицу echo "</td>"; } //если чего-то вдруг не работает else echo "Запрос не выполнен";
Всё. Наслаждаемся табличкой заказов для клиента.
Единственное гипотетическое "НО", возможно у вас будет другая структура полей в заказе. Тогда нужно просто поменять
$array[4]->value в user_order_info на, например, $array[3]->value -
-
Маленький совет
. "[[!user_order_list? &order_id = `" . $row['id'] ."`]]"
это лучше заменить на
. $modx->runSnippet('user_order_list', array('order_id' => $row['id']))
Код не увеличился, зато меньше работы парсеру.
-
@Andchir , спасибо большое за совет! Я пока только учусь, поэтому могу писать жуть
-
Спасибо работает, очень помогло . У меня правда после первой реализации потом вываливалось с ошибкой связанной с pdotools. Никак не могу для себя определиться стоит оставлять на борту по дэфолту MinifyX с pdotools. Стоит ли юзатьт эти турбины )))
-
@shk3fan какие ошибки? Не замечал ничего подобного.
-
@pooding я просто с кодингом на профессиональном уровне не разбираюсь , так что что то адекватное написать за errors которые сыпятся в /core/cache/logs написать не могу. Мне помогает если что то edit-ишь и увлёкся всё падает, я просто всю папку cache сношу всё что внутри . Result = помогает
-
Буду очень признателен за пример , как сделать ссылку с личного кабинета прямо на товар в шопе . Я за 4 часа так и не понял как это сделать . Зашёл в PMA посмотрел что в двух таблицах shopkeeper3_orders, shopkeeper3_purchases нет resource_id и на этом остановил попытки . Буду признателен за пример линка.
-
@shk3fan надеюсь, что правильно вас понял.
modx_shopkeeper3_purchases хранит в себе состав заказа. Там название товара (name), id его ресурса (p_id) и количество (count).
Вот кусок кода, который выводит именно ссылку на товары из заказа. Здесь WHEREorder_id
= '1' - номер заказа, с которого нужно получить список товаров.$sql = "SELECT `name`, `p_id` , `count` FROM `modx_shopkeeper3_purchases` WHERE `order_id` = '1"; $query = new xPDOCriteria($modx, $sql); if ($query->prepare() && $query->stmt->execute()) { $res = $query->stmt->fetchAll(PDO::FETCH_ASSOC); //выводим содержимое - товары в заказе foreach ($res as $row) { echo '<a href="[[~' . $row['p_id'] . ']]">' . $row['name'] . '</a> <br>'; } //выводим содержимое - количество товара в заказе foreach ($res as $row) { echo $row['count'] . "<br>"; } } //если чего-то вдруг не работает else echo "Запрос не выполнен";
Весь код ужасный, это вообще первые попытки работать с php. Но, тем не менее, работает.
Если объяснить чуть подробнее, чего хотите, то я помогу, мне не трудно
-
Спасибо огромнейшее !!! Я потом со временем свои наработки по шопу выложу как разберусь . Пока на данный момент могу только поделиться своей custom-ной dev panel
Если интересно могу выложить свою dev panel из /manager/templates/default/header.tpl Спасибо ещё раз !
-
Подскажите пожайлуста как можно обработать вывод опций товара???
На скриншоте выводится вот так. -
@akradeus через json_decode.
С контактами аналогично здесь делал, попробуйте по примеру.
$json = $row['contacts'];
$array = json_decode($json); -
Участник @pooding написал в Записки велосипедиста №2. Список заказов пользователя.:
$json = $row['contacts'];
Что то так не прокатывает (((
-
@akradeus
в чанке user_order_list добавить options в SQL Select$sql = "SELECT `name`, `p_id` , `count`, `options` FROM `$table` WHERE `order_id` = '$order_id'";
Далее в нужном месте:
foreach ($res as $row) { $json = $row['options']; $options = json_decode( $json, true ); // декодим массив foreach ($options as $option) { echo $option[0]; //выводим массив } }
Выводится он в формате "Название TV Название выбранной опции".
Проверял, работает. -
Участник @pooding написал в Записки велосипедиста №2. Список заказов пользователя.:
$json = $row['options'];
$options = json_decode( $json, true ); // декодим массивforeach ($options as $option) { echo $option[0]; //выводим массив }
Оооо спс работает! +100500 к карме
-
@akradeus рад помочь