Игорь Терентьев

Игорь Терентьев

С нами с 29 ноября 2013; Место в рейтинге пользователей: #83
Василий Наумкин
29 мая 2017, 08:56
4
+3
В modstore.pro всё как раз сделано через теги miniShop2.

Вывод тегов товара в чанке:
{if count($product.tags)}
	<div class="tags">
		{foreach $product.tags as $tag}
			<a href="{$packages_url}/tag/{$tag}">{$tag}</a>
	        {/foreach}
	</div>
{/if}

При клике юзер переходит по ссылке /packages/tag/любойтег, для которой должен сработать плагин OnPageNotFound, проверяющий наличие секции tag в адресе:
$uri = trim(urldecode($_SERVER['REQUEST_URI']), '/');
$tmp = explode('/', preg_replace('#\?.*#', '', $uri));
if (count($tmp) == 3 && $tmp[1] == 'tag') {
    $value = preg_replace('#[^\w\s\.-]#u', '', $this->modx->stripTags(urldecode($tmp[2])));
    if (!empty($value)) {
        $this->modx->setPlaceholder('extras_tag', $value);
        $this->modx->resource = $this->modx->request->getResource('id', $this->modx->config['packages_id']);
        if ($this->modx->resource) {
            $this->modx->resource->set('longtitle', $this->modx->resource->longtitle . " ($value)");
            $this->modx->resource->set('pagetitle', $this->modx->resource->pagetitle . " ($value)");
        }
        $this->modx->sendForward($this->modx->config['packages_id'], ['merge' => true]);
    }
}

Дальше идёт загрузка страницы с выводом каталога, на которой вызывается mFilter2, где в &element указан не msProducts, а специальный сниппет-обёртка extraProducts. Он смотрит наличие выставленного плейсхолдера extras_tag, и вызывает уже msProducts:
if ($tag = $modx->getPlaceholder('extras_tag')) {
    $table = $modx->getTableName('msProductOption');
    $c = $modx->prepare("SELECT COUNT(product_id) FROM {$table} WHERE `key` = 'tags' AND `value` = '{$tag}'");
    if ($c->execute() && !$c->fetchColumn()) {
        $modx->sendRedirect($modx->makeUrl($modx->resource->id));
    }
    $scriptProperties['innerJoin']['Tag'] = [
        'alias' => 'Tag',
        'class' => 'msProductOption',
        'on' => 'Tag.key="tags" AND Tag.product_id = msProduct.id AND Tag.value = "' . $tag . '"',
    ];
}

return $modx->runSnippet('msProducts', $scriptProperties);

Так что да, теги в miniShop2 есть, но реализацию работы с ними на сайте я оставляю на совести разработчика.
Сергей Шлоков
01 мая 2017, 20:04
2
+3
Для ясности… отдельно профиль удалить нельзя. Он удаляется автоматически при удалении пользователя. Собственно указанный процессор удаляет именно пользователя.

Каким образом процессор должен понять какого пользователя удалять? Ему нужно передать id пользователя. А форма ему передаёт uid.

Ну и наконец (насколько я помню) MODX не разрешает удалять текущего пользователя.

П.С. Если не нужны события плагинов, то можно удалить через
$user = $modx->getObject('modUser', (int) $_POST['uid']); 
$user->remove();
Василий Столейков
06 апреля 2017, 12:02
1
0
Действительно, зачем это я… Тупое копирование с примеров, которые у других работали.
Спасибо тебе, добрый человек, всё работает как и задумывалось!

Вот что получилось (на будущее):
Плагин:
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart': 
        $total_count = $cart->status()['total_count'];
        $total_weight = $cart->status()['total_weight'];
        
        $procent = 20;
        
        $tmp = $cart->get();
        
        if ($total_weight > 400) {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {

                    $price = $product->get('price');
                    $rate = $procent * $price / 100;
                    $price = $price - $rate;
                	$tmp[$key1]['price'] = $price;
                    $modx->log(modX::LOG_LEVEL_ERROR, "cart: ".print_r($price,1) );
                	
                	
                }
            }
        }
        else {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$tmp[$key1]['price'] = $product->get('price');
                }
            }
        }
        $cart->set($tmp);
    break;
}
Ну и на фронтенде повторение функционала:
<script>
    miniShop2.Callbacks.add('Cart.change.response.success', 'response_log', function(e) {
        var total_weight = e.data.total_weight;
        if(total_weight > 400) {      
            console.log('opt');
            $('#msCart .price .procent').text('-20%');
        } else {
            $('#msCart .price .procent').text('');
        }
    });
    miniShop2.Callbacks.add('Cart.remove.response.success', 'response_log', function(e) {
        var total_weight = e.data.total_weight;
        if(total_weight > 400) {      
            console.log('opt');
            $('#msCart .price .procent').text('-20%');
        } else {
            $('#msCart .price .procent').text('');
        }
    });
</script>
Дмитрий Суворов
14 марта 2017, 20:16
1
0
ну это вообще не вариант, выкидывать всех пользователей из учеток.
в MODX вшит функционал чистки таблиц, вручную правда, но сделав всего один клик.

Идем Отчеты -> Информация о системе -> Вкладка «Таблицы базы данных»
Находим там таблицу «modx_session», жмем на ссылку в 4-ой колонке и таблица чистится, но не тупо удаляя все записи. У меня допустим с таблицы размером в 150мб, каждый раз очищает мегабайт 80.
Илья Уткин
13 марта 2017, 10:30
2
+1
Создай вот такой плагин на событие OnHandleRequest

if ($modx->event->name != "OnHandleRequest") {
   return;
}
$uri = $_SERVER['REQUEST_URI'];
$http_host = $_SERVER['HTTP_HOST'];
$site_url = str_replace(array('www.', 'http://', 'https://', '/'), '', $modx->getOption('site_url'));
// for https set true
$https = true;
// robots.txt allways without redirect
if ($uri == '/robots.txt') return;
if ($http_host != $site_url || ($https && !$_SERVER['HTTPS'])) {
    if ($https) {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    $modx->sendRedirect($protocol.$site_url.$uri, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
Кефирка
12 марта 2017, 18:12
1
0
Полная строка [[&parents=`[[pdoField? &id=`[[*parent]]` &field=`id` $Content.inner ]]]]? Ничего не выводится
Андрей Степаненко
18 ноября 2016, 19:58
1
+1
Какой нибудь класс для работы с модекс не помешает.
Как идея: сделать расширение класс, с вызовом метода в этом класс, который отправляет объект в амоцрм.
Чтобы можно было любой класс расшить и обмениваться с амо. Если я конечно правильно понимаю работу с амо)
Володя
07 октября 2016, 12:57
1
+1
Собственно задача такая: сделать скидки по условию. Например, если человек зарегистрирован на сайте 1 день, то ему скидка 1%, 2 дня — 2% и т.д. То есть, чтобы можно было как-то условие обрабоатать, и в соответствии с ним пересчитать цену. Куда и где копать?

указываем в настройке пакета discontrol_product_classes класс modUser

указываем в настройке пакета discontrol_product_option_expression класс $modUser
max~$modResource + max~$msProductOption + max~$msProductData + max~$msVendor + max~$msSessionCart + max~$msSessionCartEx +
max~$modUser

создаем сравнение

выражение для сравнения
(($time - $c)  / 60 / 60 / 24) > $v

создаем скидку

указываем кол-во дней и скидку

все!
Александр Котлов
05 октября 2016, 16:20
1
+2
Structures посмотри в репозитории modx.com
Николай Савин
29 сентября 2016, 14:10
1
0
Здравствуйте.
На вскидку 50-60 тыс.
Надо уточнить детали и посмотреть дизайн.
Вопросы:
Дизайн будет адаптивный? Вроде нет.
По способам оплаты не понятно. Какие сервисы для оплаты подключать?
Что такое
интерактивная карта зон доставки с пояснительными комментариями.
Яндекс карта что ли?
Далее упоминается мобильное приложение. Работа с ним меня не касается?

Готов обсудить детали посредством почты (пишите в личку)
Скайп kalyany4.
Whatsapp, Viber, VK если удобно вышлю.

Обратите внимание я нахожусь в Казахстане (нюансы с по вопросам договора и оплаты).