Андрей Шевяков

Андрей Шевяков

С нами с 28 сентября 2016; Место в рейтинге пользователей: #108

msOptionsPrice2 галлерея модификаций

Всем привет, решил в первый раз написать готовое решение. Надеюсь кому-то пригодится.
Была задача вывести различные цвета товаров, решили выбрать msOptionsPrice2 он для этого подходит идеально.
По умолчанию все модификации выводятся текстом, а нам нужно получить не только название, но и изображение модификации.

vit
vit
07 февраля 2024, 16:15
modx.pro
1
515
+9

Сниппет для вывода ресурсов кириллицей в алфавитном порядке с разбивкой на 3 колонки

может кому пригодится немного модифицированный pdoAtoZ

вызов сниппета

$_modx->runSnippet("@FILE snippets/pdoatoz.php", [
'select' => 'id,pagetitle,uri,parent',
'limit' => '0',
'depth' => $cat_depth,
'parents' => $parents,
'tpl' => '@INLINE <a href="{$uri}" class="abc-item-list">{$pagetitle}</a>',
'tplDelimiter' => '</div><div class="col-lg-4 col-md-12 col-sm-12 col-sx-12">',
'ClassRow' => 'row col-12 abc-list pb-5',
'ClassCol' => 'col-lg-4 col-md-12 col-sm-12 col-sx-12',
'ClassIndex' => 'abc-index text-center',
'indexDelimiter' => ' '
])

сам сниппет

<?php
/**
 * pdoAtoZ
 */
 
$parents = $modx->getOption('parents', $scriptProperties, 0);
$select = $modx->getOption('select', $scriptProperties, 0);
$includeTVs = $modx->getOption('includeTVs', $scriptProperties, '');
$processTVs = $modx->getOption('processTVs', $scriptProperties, '');
$limit = $modx->getOption('limit', $scriptProperties, '10');
$depth = $modx->getOption('depth', $scriptProperties, '10');
$sortby = $modx->getOption('sortby', $scriptProperties, 'pagetitle');
$itemTpl = $modx->getOption('tpl', $scriptProperties, false);
$ClassRow = $modx->getOption('ClassRow', $scriptProperties, 'row');
$ClassCol = $modx->getOption('ClassCol', $scriptProperties, 'col');
$ClassIndex = $modx->getOption('ClassIndex', $scriptProperties, 'alpha-index');
$tplDelimiter = $modx->getOption('tplDelimiter', $scriptProperties, '');
$indexDelimiter = $modx->getOption('indexDelimiter', $scriptProperties, ' | ');

if (!$itemTpl) return;

$pdo = $modx->getService('pdoFetch');

//Get collection of resources
$items = $pdo->getCollection('modResource', array(
    'published' => true,
    'deleted' => false
), array(
    'parents' => $parents,
    'select' => $select,
    'includeTVs' => $includeTVs,
    'processTVs' => $processTVs,
    'limit' => $limit,
    'sortby' => $sortby,
    'sortdir' => $sortdir,
    'depth' => $depth
));

$total=count($items);
$column2=intval($total/3);
$column3=intval($total/3*2);
$counter=0;

//create an array keyed with alphabet letters

$alphas = array();
foreach (range(chr(0xC0),chr(0xDF)) as $v)
  $alphas[$v] = iconv('CP1251','UTF-8',$v);

$alphaGroups = array();
foreach($alphas as $key=>$value){
    $alphaGroups[$value] = array();
}

// organize the resources by first letter
foreach ($items as $item) {
$firstLetter = mb_strtoupper(mb_substr($item['pagetitle'], 0, 1));
$item['url'] = $modx->makeUrl($item['id']);
// check to see if first letter is a letter, if not don't do anything with it
if (!preg_match('/[А-ЯЁ]/u', $firstLetter)) continue;

    array_push($alphaGroups[$firstLetter], $item);
}

$alphaIndex = array();
$output = '';

$id = $modx->getOption('id', $scriptProperties, $modx->resource->get('id'));
$url = $modx->makeUrl($id);

foreach ($alphaGroups as $alpha => $alphaGroup) {
    if (count($alphaGroup) == 0) {
        
    } else {

        array_push($alphaIndex, '<a href="' . $url . '#' . $alpha . '">' . $alpha . '</a>');
        $formattedGroup = '';
        // to separate collumns    
        if ($counter >= $column2 && $col2 != 1 && $col2 != 1) { $formattedGroup .= $tplDelimiter; $col2 = 1;} 
        if ($counter >= $column3 && $col2 == 1 && $col3 != 1) { $formattedGroup .= $tplDelimiter; $col3 = 1;}
        $formattedGroup .= '<h3 id="' . $alpha . '" class="">' . $alpha . '</h3>'; 
        foreach ($alphaGroup as $item) {
            $formattedGroup .= $pdo->getChunk($itemTpl, $item);
            // uncomment the following line to see the item printed out in json format
            //$formattedGroup .= json_encode($item, JSON_PRETTY_PRINT);
        }
        $counter = $counter + count($alphaGroup);
        $output .= $formattedGroup;
    }
}

//return $alphaIndex + this list of resources grouped by letter;
return '<div class="'. $ClassIndex .'">' . implode($indexDelimiter, $alphaIndex) . '</div>' . '<div class="' . $ClassRow . '"><div class="' . $ClassCol . '">'. $output .'</div></div>';
SYAN
19 января 2024, 17:51
modx.pro
1
356
0

[msAltCart] Динамическая корзина для MiniShop2

Приветствую! Предлагаю вашему вниманию современный вариант полюбившегося многим компонента msMCD. Как водится постарался учесть большинство популярных кейсов использования корзины: миникорзина в шапке, динамическая корзина сбоку, всплывающее окно с последним добавленным товаров, основная корзина. Подробности под катом.
Артур Шевченко
25 декабря 2023, 20:16
modx.pro
3
641
+8

Как в MIGX сделать поле с выбором конфигурации

Приветствую!
Подскажите пожалуйста как сделать в MIGX select поле с выбором конфигурации полей, например, я хочу в зависимости от выбора конфигурации выводить на заполнение тот или иной набор полей, видел где-то статью, не смог найти.

И второй вопрос, как сделать вывод картинки, в меню заполнения полей, я хочу чтобы после выбора конфигурации выводилось превью в виде картинки и следом шли поля, какой тип поля для этого нужно указать? Я думал о поле image с дефолтным значением, но может есть более эстетичные варианты?

Все это я хочу сделать для более удобного наполнения блоками страницы. Например для каждого шаблона будет migx поле, внутри которого будет возможность выбора, какой блок ты хочешь добавить, и соответственно для каждого блока свой набор полей и превью.
Вячеслав Варов
25 декабря 2023, 14:16
modx.pro
1
275
0

Добавление и удаление товара из корзины со страницы категории и товара

Периодически клиенты просят функционал, чтобы можно было изменять количество товара не только находясь в корзине, но и со страниц категорий и самого товара.
Поэтому поделюсь своим решением. Сразу отмечу, что оно не претендует на позицию идеального, так что если есть замечания и предложения, то с радостью их выслушаю.
ВАЖНО! У меня версия miniShop2 4.2.0. Код будет отличаться для версий ниже. Так например до 4.1.4 отличается метод генерации ключа товара, а до версии 4.1.0 методы add и change корзины возвращают только ключ товара, когда в более новых версиях также есть измененное кол-во товара и прочая информация о нем.

1) Итак, для начала создадим сниппет inCart, который будет отвечать за вывод HTML-разметки, в зависимости от того, есть товар в корзине или нет. И соответственно два чанка tpl.inCart.btn и tpl.inCart.btn.not
Dan
Dan
25 декабря 2023, 01:30
modx.pro
1
916
+9

ecommerce.js - Электронная коммерция (Яндекс.Метрика и Google Analytics) для сайтов на базе MODX + miniShop2

Привет!

Хочу поделиться js скриптом, который позволяет передавать данные электронной коммерции в системы аналитики Яндекс.Метрика и Google Analytics.

Из особенностей отмечу то, что мое решение выполнено не в виде дополнения для MODX, а в виде одного js файла и не имеет в своем составе php кода (сниппетов и т.п.). Также я применил, пожалуй, не самый стандартный подход в том, как будут получаться данные о товарах на страницах сайта.
Наумов Алексей
20 декабря 2023, 12:03
modx.pro
6
772
+12

[easyRedirects] Еще один компонент для управления редиректами

Привет!

easyRedirects — дополнение для управления редиректами (с возможностью выбора кода ответа из 301, 302, 307, 308) в панели управления сайтами.

Для MODX есть несколько компонентов, которые позволяют из админки управлять редиректами со старых url на новые. Из тех, что знаю я — это Redirector (наверное самый первый компонент, ему 10+ лет точно, но надо сказать, его периодически обновляют), и autoRedirector. Кстати, они поддерживают только 301 редирект, а вот 302 или более свежие 307 и 308 — нет.

При попытке применить их на моем сайте выплыли проблемы:
1. Redirector не позволял создать редирект на произвольный url, он обязательно хотел видеть в качестве цели существующий ресурс. А мне так не нужно было, у меня страницы генерируются своим плагином, обрабатывающим событие OnPageNotFound, т.е. целевого ресурса как такового на сайте нет.
2. autoRedirector больше заточен на отслеживание измененных url, ну и у него та же особенность — конечный url редиректа должен принадлежать существующему ресурсу.

В общем в итоге пара вечеров и готова первая версия easyRedirects. По сути это сильно модифицированный и дополненный Redirector.
Наумов Алексей
27 ноября 2023, 16:29
modx.pro
9
2 362
+13

msOptionsPrice.modification как получить продукты с одинаковым значением параметра модификации

Я использую msoptionsprice2 с msOptionsPrice.modification.
Продукт имеет следующую структуру:
Платье с модификациями(options): цвет, размер, коллекция.
например:
ПлатьеА(Красное, XL, Летняя коллекция)
ПлатьеА(Синий, XL, Летняя коллекция)
ПлатьеB(Красное, L, Летняя коллекция)
ПлатьеB(Красное, XL, зимняя коллекция)

Как получить все товары (платья из определенной коллекции)?
например: Летнюю коллекцию?
что-то вроде этого:
[[!msOptionsPrice.modification?
         &where=`{"collection":"Летняя коллекция"}`
         ]]

tararaxnes
23 ноября 2023, 00:14
modx.pro
1
307
0

phpThumbOf modx 3

Если кому-то требуется, что бы был ресайз фотографий на modx 3 по средствам phpThumbOf, то необходимо внести правки.

В сниппете удалить
if (!$modx->loadClass('modPhpThumb',$modx->getOption('core_path').'model/phpthumb/',true,true)) {
    $modx->log(modX::LOG_LEVEL_ERROR,'[phpThumbOf] Could not load modPhpThumb class.');
    return '';
}


И заменить строчку через сервер в файле root>/core/components/phpthumbof/model/phpthumbof/phpthumbof.class.php. #193

$this->phpThumb = new MODX\Revolution\modPhpThumb($this->modx);
Источник

Я для себя искал решение, может кому пригодится.
Сергей
07 ноября 2023, 13:54
modx.pro
3
837
+2

[СДЕЛАЙ САМ] Авторизация и регистрация по SMS с помощью SendIt

Приветствую! Хочу рассказать вам как с помощью одного компонента и одной формы с минимумом усилий сделать регистрацию и авторизацию по SMS.
Артур Шевченко
18 октября 2023, 18:00
modx.pro
4
777
+12