Алексей

Алексей

Был в сети 02 января 2025, 10:27
Заказы не принимаю
Андрей
Андрей
Весьма благодарен, что находите это изящным)

У меня на сайте Tickets используется для оценки товаров и оставления отзыва о том или ином товаре. Соответственно, голосовалка за отзывы мне не нужна (как здесь со стрелочками), а вот само поле `rating` в базе очень даже подходит для оценки товара, причём по любой шкале)

Поэтому я убрал возможность голосовать за отзывы, а на событие OnCommentSave повесил плагин, сохраняющий оценку пользователя в поле `rating`. Соответственно, в форму отзыва добавил радиокнопки для возможности выставить оценку. С помощью JS высвечивается та оценка, которую выбирает в данный момент пользователь.

Звёздочки картинками выводятся сниппетом (выбирает этот самый `rating` из базы) и чанком на основании выставленной оценки (c плейсхолдером [[+rating]]). В чанке примерно следующее:
<img src="/assets/theme/image/stars-[[+rating]].png" alt="Оценка [[+rating]]">
Там ещё прикручена общая оценка для товара на основании всех оценок юзеров.
В общем, может это и не совсем прямое использование компонента, и в некоторых местах костыльно получилось, но всё же работает быстро и свои функции выполняет, и меня в целом устраивает)
Василий Наумкин
Василий Наумкин
1. В pdoTools подобного сниппета нет. Подсчет просмотров ресурсов есть в Tickets, но не думаю, что его стоит использовать только для этого.

2. docs.modx.pro/components/pdotools/general-settings#Параметры-шаблонов — просто укажи специальный чанк в параметре &tpl_n5=``
Василий Наумкин
Василий Наумкин
Пробовать можно, но гарантии работы на каком-нибудь Denwer или OpenServer никто не даст.

Потому что для нормальной работы сервер должен
кое-что уметь.
А что там умеет локальный сервер на windows и как будет выходить работа с изображениями — я без понятия.
Виталий Серый
Виталий Серый
Andrey Grachov
Andrey Grachov
Набросал схематический вариант, посмотреть можно здесь: s5885.test.modx.pro/index.php?id=5 (доступ s5885/VPdm-g7Y6zKf), плагин QuickOrder.
Код плагина:
<?php
$context = $modx->context->get('key');
if ($context == 'mgr' || empty($_POST['quick_order']) || empty($_POST['id']) || empty($_POST['customer'])) {
	return;
}
/**
 * @var miniShop2 $miniShop2
 */
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize($context, array(
	'json_response' => false,
));
if (!($miniShop2 instanceof miniShop2)) {
	return;
}
$_POST['customer'] = array_merge(array(
	'delivery' => 1,
	'payment' => 1,
), $_POST['customer']);
foreach (array('email', 'phone', 'delivery', 'payment') as $field) {
	$response = $miniShop2->order->add($field, $modx->getOption($field, $_POST['customer'], ''));
	if (empty($response['success'])) {
		return;
	}
}
$response = $miniShop2->cart->clean();
if (empty($response['success'])) {
	return;
}
$response = $miniShop2->cart->add($_POST['id'], $modx->getOption('count', $_POST, 1), $modx->getOption('options', $_POST, array()));
if (empty($response['success'])) {
	return;
}
$miniShop2->order->submit();
$modx->sendRedirect($modx->makeUrl($modx->resource->get('id')));