Ivan

Ivan

С нами с 15 июня 2017; Место в рейтинге пользователей: #735
Ivan
13 июля 2019, 13:41
0
Если связи с разработчиком нет, то единственный вариант — самостоятельно искать эту карту в чанках, если у вас нет опыта, то в любом случае вам требуется разработчик. Можете связаться со мной по контактам в профиле — помогу.
Ivan
13 ноября 2018, 00:31
0
Решил данную проблему путем плагина cityFields, в заголовках и метатегах использую плейсхолдер от плагина, вида «Купить товар в регионе [[!+cf.region]] по доступной цене».
Ivan
24 октября 2018, 13:37
0
Если решение кому пригодится:

Создаем сниппет msProductOptionsEx

<?php
/** @var modX $modx */
/** @var array $scriptProperties */

$tpl = $modx->getOption('tpl', $scriptProperties, 'tpl.msProductOptions');
if (!empty($input) && empty($product)) {
    $product = $input;
}

$emptyGroupName = $modx->getOption('emptyGroupName', $scriptProperties, 'Empty');
$groupSortBy = $modx->getOption('groupSortBy', $scriptProperties, 'rank');

$product = !empty($product) && $product != $modx->resource->id
    ? $modx->getObject('msProduct', $product)
    : $modx->resource;
if (!($product instanceof msProduct)) {
    return "[msProductOptions] The resource with id = {$product->id} is not instance of msProduct.";
}

$ignoreOptions = array_map('trim', explode(',', $modx->getOption('ignoreOptions', $scriptProperties, '')));
$onlyOptions = array_map('trim', explode(',', $modx->getOption('onlyOptions', $scriptProperties, '')));
$groups = !empty($groups)
    ? array_map('trim', explode(',', $groups))
    : array();
/** @var msProductData $data */
if ($data = $product->getOne('Data')) {
    $optionKeys = $data->getOptionKeys();
}
if (empty($optionKeys)) {
    return '';
}
$productData = $product->loadOptions();

$optionCategories = array();
$categoryIds = array();
foreach ($optionKeys as $key) {
    // Filter by key
    if (!empty($onlyOptions) && $onlyOptions[0] != '' && !in_array($key, $onlyOptions)) {
        continue;
    } elseif (in_array($key, $ignoreOptions)) {
        continue;
    }
    $option = array();
    foreach ($productData as $dataKey => $dataValue) {
        $dataKey = explode('.', $dataKey);
        if ($dataKey[0] == $key && (count($dataKey) > 1)) {
            $option[$dataKey[1]] = $dataValue;
        }
    }
    $option['value'] = $product->get($key);

    // Filter by groups
    $skip = !empty($groups) && !in_array($option['category'], $groups) && !in_array($option['category_name'], $groups);
    if ($skip || empty($option['value'])) {
        continue;
    }

    $categoryId = $option['category'];
    if (empty($categoryId)) {
        $categoryId = 0;
    }

    if (!isset($optionCategories[$categoryId])) {
        $optionCategories[$categoryId] = array(
            'name' => $categoryId ? $option['category_name'] : $emptyGroupName,
            'id' => $option['category'],
            'rank' => $categoryId ? $option['category'] : PHP_INT_MAX,
            'idx' => count($optionCategories),
            'options' => array()
        );
        $categoryIds[] = $categoryId;
    }
    $optionCategories[$categoryId]['options'][$key] = $option;
}

/** @var pdoFetch $pdoFetch */
$pdoFetch = $modx->getService('pdoFetch');
$categories = $pdoFetch->getCollection('modCategory', array('id:IN' => $categoryIds));

switch ($groupSortBy) {
    case 'rank':
        foreach ($categories as $category) {
            $categoryId = $category['id'];
            if (!isset($optionCategories[$categoryId])) {
                continue;
            }

            $optionCategories[$categoryId]['rank'] = intval($category['rank']);
        }

        uasort($optionCategories, function($a, $b) {
            if ($a['rank'] == $b['rank']) {
                return 0;
            }

            return ($a['rank'] < $b['rank']) ? -1 : 1;
        });
        break;
    case 'name':
        uasort($optionCategories, function($a, $b) {
            return strcmp($a['name'], $b['name']);
        });
        break;
    case 'idx':
        uasort($optionCategories, function($a, $b) {
            if ($a['idx'] == $b['idx']) {
                return 0;
            }

            return ($a['idx'] < $b['idx']) ? -1 : 1;
        });
        break;
}

return $pdoFetch->getChunk($tpl, array(
    'groups' => $optionCategories,
));

Вызываем сниппет, где требуется вывести свойства товаров по группам:

[[!msProductOptionsEx?
  &tpl=`tpl.msProductOptionsEx`
  &groupEmptyName=`Без группы`
  &groupSortBy=`rank`
]]

Чанк tpl.msProductOptionsEx:

{foreach $groups as $group}
    <div class="group">
        <h4>{$group.name}</h4>
        <div class="group-options">
            {foreach $group.options as $option}
                <div class="form-group">
                    <label class="col-md-2 control-label">{$option.caption}:</label>
                    <div class="col-md-10 form-control-static">
                        {if $option.value is array}
                            {$option.value | join : ', '}
                        {else}
                            {$option.value}
                        {/if}
                    </div>
                </div>
            {/foreach}
        </div>
    </div>
{/foreach}
Ivan
23 октября 2018, 14:49
0
Пока нет, есть вариант делать вывод через MIGX, но в таком случае это запарно, т.к придется заполнять 2 раза одно и тоже, чтоб и в фильтре были значения и визуально в карточке товара.

Как вариант можно использовать платный компонент — msextrafields, как попробую — отпишу.
Ivan
19 октября 2018, 13:58
0
Здравствуйте!
Стоит задача реализовать уведомление об добавлении в избранное, как это можно сделать? После добавления, должно выводится модальное окно, с текстом, что Товар 32 был добавлен в избранное. Пока реализовал на jQuery, но есть ли предусмотренный вариант или как лучше это сделать?
Ivan
15 октября 2018, 18:01
0
Спасибо, теперь работает как нужно. А не подскажите, у меня точно такая же проблема и с другими сниппетами, такими как: msfavorites, то есть при клике на кнопку «Добавить в избранное» я вызываю ajax запрос и в запросе запускается сниппет msProducts, из-за чего происходит конфликт и как решать подобные проблемы с другими сниппетами?
Ivan
15 октября 2018, 15:18
0
Здравствуйте!

Столкнулся с проблемой, у меня в JS есть код:

miniShop2.Callbacks.Cart.add.response.success = function(ol) {

Который, в случае успешного добавления в корзину вызывает Ajax запрос и в нем запускается сниппет — $output = $modx->runSnippet('msProducts',$params);

И выводит товар, который был добавлен в корзину.

Но в таком случае он конфликтует с msMCD, товары в мини корзине обновляются только после перезагрузки страницы, в чем может проблема?
Ivan
15 июня 2017, 21:59
0
Можно поподробней. В настройках контекста не вижу решение проблемы.