Слава

Слава

Был в сети 17 октября 2019, 13:44
Заказы не принимаю
Собственно развернул сайт. В итоге получилось порядка 800 000 комментариев и тикетов более 300 000.
Вcе работает более менее нормально на VPS.
Но имеется проблема в работе административной части, а именно в выводе вкладки с комментариями:
joxi.ru/KAgBwwMcEW3qo2

Не очень понятно толи аяксом пытаеся всё подтянуть то ли еще как-то, т.е. очень длинны ответ идет.
А нужно всего лишь получить количество записей и вывести первую страницу пагинации, а далее выводить постранично все отсальное. Понятно что сортировка влияет на скорость, но все равно всё очень долго работает и прогружает раз с 5 после обновления и запроса страницы- это только 1 страницу пагинации.

Может есть смысл написать Василию чтобы поправили работы именно административной части сайта?
Василий подскажите пожалуйста:
Планируем на тикетах сделать сервис отзывов.
По скромным оценкам будет 1,5 миллионов отзывов.

Вопрос:
1. Потянет ли Tickets такие объёмы?
2. Есть возможность проводить поиск по самим комментариям в тикете?

Спасибо
Доброе утро. Так наверно не получится.
просто загрузите в цикле:

$all_img = Array
(
'0' = site.ru/images/projects/30-24.jpg',
'1' = site.ru/images/projects/30-24_c.jpg',
'2' = 'site.ru/images/projects/30-24_1.jpg',
'3' = 'site.ru/images/projects/30-24_2.jpg',
);

foreach($all_img as $value){

$response = $this->modx->runProcessor('gallery/upload', array(
'id' = 5,
'file' = $value,
'media_source' => $modx->getOption('ms2_product_source_default'),
), array('processors_path' => '/core/components/minishop2/processors/mgr/'));

}
Да, все получилось.

Внутри чанка вопроса вызвал getComments прописал дополнительное условие, что родитель текущий элемент.

Подскажите еще пожалуйста такой момент, при отправке комментария, не вылетает сообщение об успешной отправке. Как активировать. Сообщения о незаполненной капче или обязательных полях появляют.

Спасибо
Создал в раздела следующие файлы:
/public_html/core/components/minishop2/custom/order/msDeliveryHandler_free10.class.php
/public_html/core/components/minishop2/custom/delivery/msDeliveryHandler_free10.class.php

Прописал следующий код:

<?php 
if(!class_exists('msOrderInterface')) {
	require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msorderhandler.class.php';
}

class mynewOrderHandler extends msOrderHandler implements msOrderInterface {

	public function getCost($with_cart = true, $only_cost = false) {
		$cart = $this->ms2->cart->status();
		$cost = $with_cart
			? $cart['total_cost']
			: 0;
		$deliveryCost = 0;


		/* @var msDelivery $delivery */
	if ($delivery = $this->modx->getObject('msDelivery', $this->order['delivery'])) {
			$cost = $delivery->getCost($this, $cost);
			$deliveryCost = $delivery->getCost($this, 0);
		}

		/* @var msPayment $payment */
		if ($payment = $this->modx->getObject('msPayment', $this->order['payment'])) {
			$cost = $payment->getCost($this, $cost);
		}




		return $only_cost
			? $cost
			: $this->success('', array(
									'cost' => $cost
									,'delivery_cost'=>$deliveryCost
									,'delivery_id'=> $this->order['delivery']['id']
									)
							);
	}
}
и

<?php
                class msDeliveryHandler_free10 extends msDeliveryHandler
                        {
                                public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0)
                                        {
                                                $cart = $this->ms2->cart->status();
                                                if (($cart['total_cost'] >= 0) AND ($cart['total_cost'] <= 1100))
                                                        {
                                                                $cost = $cart['total_cost'] + 250;
                                                        }
                                                if (($cart['total_cost'] >= 1101) AND ($cart['total_cost'] <= 3500))
                                                        {
                                                                $cost = $cart['total_cost'] + 100;
                                                        }
                                                return $cost;
                                        }
                        }

В самой доставке которая будет обрабатываться задал класс:
prnt.sc/ah8b2y msDeliveryHandler_free10

В настройках Minishop заменил переопределеный обработчик: prnt.sc/ah8bsl mynewOrderHandler

В чанке tpl.msOrder.delivery прописал обертку цены
<span id="delivery_cost_[[+id]]">[[+price]] [[%ms2_frontend_currency]]</span>
____________________________

Но сумма как была 0 в доставке так и осталась, но общая сумма меняется, что сделал не таки как сделать чтобы возле доставки стоимость отображалась ????

Спасибо prnt.sc/ah8dix
Реализовал сам, но не знаю на сколько верно.

1. Создал плагин на событие сохранения нового пользователя.
При сохранении данный пользователь добавляется в рассылку Sendex и дополнительно вносится в группу рассылок
switch ($modx->event->name) {
        case 'OnUserSave':
            if ($user && $mode == 'new') {
                if ($profile = $user->getOne('Profile')) {
                    $id = $profile->get('id');
                    $new_mail = $profile->get('email');
                }
                if ($id) {
/*******Добавляем в группу рассылки новый сохраняемого пользователя**********/
                    if ($gr = $modx->newObject('modUserGroupMember')) {
                        $gr->set('user_group', 2);
                        $gr->set('member', $id);
                        $gr->set('role', 0);
                        $gr->set('rank', 0);
                        $gr->save();
 }


/*******Добавляю текущего сохраняемого пользователя в рассылку SENDEX*********/
$template=2;
$hash = sha1(uniqid(sha1($id . $template . $new_mail), true));

                        $sql1  = 'INSERT INTO modx_sendex_subscribers (user_id,email,newsletter_id,code) VALUES('.$id.',"'.$new_mail.'",'.$template.',"'.$hash.'")';
                        $query = new xPDOCriteria($modx, $sql1, array());
                        if ($query->prepare() && $query->stmt->execute()) { $query->stmt->fetchAll(PDO::FETCH_ASSOC); }
                }
            }
            break;
    }

2. Сделал кнопку отписаться в письме, при которой происходит удаления из рассылки + удаления из группы рассылок.

$id = $_GET['id'];

                if (isset($id)) {
/*******Удаляю из группы рассылок**********/

                        $sql2  = 'DELETE FROM modx_member_groups where member='.$id.' AND user_group=2';
                        $query = new xPDOCriteria($modx, $sql2, array());
                        if ($query->prepare() && $query->stmt->execute()) { $query->stmt->fetchAll(PDO::FETCH_ASSOC); }
            


/*******Удаляю из рассылок в  SENDEX*********/

                        $sql1  = 'DELETE FROM modx_sendex_subscribers where user_id='.$id.' ';
                        $query = new xPDOCriteria($modx, $sql1, array());
                        if ($query->prepare() && $query->stmt->execute()) { $query->stmt->fetchAll(PDO::FETCH_ASSOC); }
                }

Оцените верно все сделал…

И еще в Sendex столкнулся с неприятностью — нет кнопки удаления всех пользователей из рассылки разом.