Andrei D.

Andrei D.

С нами с 09 января 2014; Место в рейтинге пользователей: #54
Andrei D.
27 января 2017, 22:08
0
омг как все просто
т.е. все, что в вызове сниппета &*** потом идет в
$pdoFetch->setConfig($scriptProperties);
?? и не нужно отдельно where обрабатывать в самом сниппете?
Andrei D.
27 января 2017, 21:50
0
самое простое это расширить таблицу ms2_payments на одну ячейку lang/culture и потом уже в чанке подставлять

плагин на OnMODXInit
<?php
switch ($modx->event->name) {
    case "OnMODXInit":
        $map = array(
            'msPayment' => array(
                'fields' => array(
                    'lang' => '',
                ),
                'fieldMeta' => array(
                    'lang' => array(
                        'dbtype' => 'varchar',
                        'precision' => '10',
                        'phptype' => 'string',
                        'collation' => 'utf8_general_ci',
                        'null' => false,
                    ),
                ),
            ),
        );
        foreach ($map as $class => $data) {
            $modx->loadClass($class);
            foreach ($data as $tmp => $fields) {
                if ($tmp == 'fields') {
                    foreach ($fields as $field => $value) {
                        foreach (array('fields', 'fieldMeta', 'indexes') as $key) {
                            if (isset($data[$key][$field])) {
                                $modx->map[$class][$key][$field] = $data[$key][$field];
                            }
                        }
                    }
                } elseif ($tmp == 'composites' || $tmp == 'aggregates') {
                    foreach ($fields as $alias => $relation) {
                        if (!isset($modx->map[$class][$tmp][$alias])) {
                            $modx->map[$class][$tmp][$alias] = $relation;
                        }
                    }
                }
            }
        }
        break;
}

в чанк msOrder
{set $culture = $_modx->config.cultureKey}

{foreach $payments as $payment}
{if $culture == $payment.lang?}
тут чекбокс 
{/if}
{/foreach}
Andrei D.
19 января 2017, 11:48
+2
напишите свой fenom модификатор по инструкции один раз и забудете о проблеме modx.pro/development/10910-private-modifiers-fenom/
или можно без fenom просто сниппетом gaserge.ru/blog/modx-revolution/filtryi-phx-(-modifikatoryi-)-v-modx-revo.html вот тут ищите по заголовку «Создаем свой модификатор»
Andrei D.
19 января 2017, 11:36
+2
Подобный компонент вижу так:

Есть объекты для бронирования: ресурсы, тикеты, кастомная таблица и тд
node.js отдельно и работает со своей бд, где только строки бронировки (проверка на дату, пользователя и тд), либо с кастомной таблицей в modx самих бронировок
Если брать miniShop2:
Пользователь выбирает объект для бронирования, node проверяет доступность, если все хорошо, то дается возможность оплатить. На события msOnCreateOrder и msOnChangeOrderStatus для статуса «оплачено» node сохраняет бронировку у себя

UPD. желательно, чтобы функции проверки для отправки в node можно было задать на странице в менеджере
Т.е. по типу field -> value -> comparison
И в самом node.js установить уже методы сравнения

UPD2. но это уже получается не просто букинг компонент, а универсальный modx-node.js коннектор)
Andrei D.
28 декабря 2016, 14:00
0

для корзины

плагин на msOnBeforeChangeInCart
<?php
$tmp = $cart->get();
$price = intval(str_replace(' ', '', $_POST['user_price']));
$rate = 1;//default rate
$rate = intval(str_replace(' ', '', $_POST['currency_rate']));

if ($rate == 1) {
	$rate_value = '1';//EURO
}
if ($rate == 2) {
	$rate_value = '1.043673';//US Dollar
}
if ($rate == 3) {
	$rate_value = '0.853115';//British Pound
}
if ($rate == 4) {
	$rate_value = '1.073258';//Swiss Franc
}
if ($rate == 5) {
	$rate_value = '63.246377';//Russian Ruble
}

if ($rate) {
	$tmp[$key]['price'] = round(($price * $rate_value), 2, PHP_ROUND_HALF_UP);
}

$cart->set($tmp);

header
<script type="text/javascript">
$(document).on('change', 'input[name=user_price]', function() {
$(this).closest(miniShop2.form).submit();
//miniShop2.Message.success('Стоимость изменена');
});

$(document).on('change', 'select[name=currency_rate]', function() {
$(this).closest(miniShop2.form).submit();
//miniShop2.Message.success('Стоимость изменена');
});
</script>

tpl msCart
<input type="text" name="user_price"/>

<select name="currency_rate">
<option value="1">EURO</option>
<option value="2">US Dollar</option>
<option value="3">British Pound</option>
<option value="4">Swiss Franc</option>
<option value="5">Russian Ruble</option>
</select>
рейты взял отсюда www.x-rates.com/table/?from=EUR&amount=1
Andrei D.
25 декабря 2016, 13:25
2
+1
&nestedChunkPrefix=`tickets_`
на мой взгляд, это нужно куда-то в главную документацию вписать, так как это часто задаваемый вопрос
Andrei D.
23 декабря 2016, 21:06
0
в msCart у каждого товара уже есть key «count», по нему считается total_count в корзине
так что это не баг
используйте что угодно, например, p_count)
Andrei D.
15 декабря 2016, 19:04
1
0
Немного переделал сниппет Bob Ray'а под себя, попробуйте:

<?php
/* IsMember Snippet */
$groups = $modx->getOption('groups', $scriptProperties);
$groups_array = explode(',', $groups);

if ($modx->user->isMember($groups_array)) {
    if (preg_match('/^@INLINE/',$yesChunk)) {
        return substr($yesChunk, 7);
    } else {
        return $modx->getChunk($yesChunk);
    }
} else {
    if (preg_match('/^@INLINE/',$noChunk)) {
        return substr($noChunk, 7);
    } else {
        return $modx->getChunk($noChunk);
    }
}
Вызывать можно inline или чанками

[[!IsMember? 
&groups=`Users`
&yesChunk=`@INLINE <h2>Вы в группе А</h2>`
&noChunk=`@INLINE <div class="button>Вступить в группу А</div>`
]]
[[!IsMember? 
&groups=`Group_B,Group_C`
&yesChunk=`visible_chunk_for_groups_B_C`
]]
Andrei D.
30 ноября 2016, 19:04
0
у меня такая же проблема, но с office :(
Andrei D.
01 ноября 2016, 00:18
0
спасибо! работает

странно, думал, что будет прирост скорости, но вызов полностью через Fenom занимает 0.2992 секунды, а если использовать обычный вывод pdoMenu, то 0.2668 секунд
Andrei D.
30 октября 2016, 05:06
0
а чем такие запросы лучше?
Andrei D.
28 октября 2016, 22:15
0
в былые времена на их сайте было повсюду CMF) я точно помню
ну не эффект Манделы же это: р
Andrei D.
28 октября 2016, 05:16
+1
CMF >> CMS
обидно

а дизайн – увы, увы…
Andrei D.
24 октября 2016, 11:19
0
велосипед для данного конкретного случая приведен в пункте 3.4
Andrei D.
24 октября 2016, 11:16
+3
С Днем рождения! Спасибо за самое крутое сообщество ModX, творческих успехов!
Andrei D.
03 октября 2016, 07:29
0
оу… нашел решение:
1. захардкодить $paymentUrl в paypal.class.php в папке core/components/minishop2/custom/payment
$paymentUrl = 'http://сайт.com/assets/components/minishop2/payment/paypal.php';
2. в assets/components/minishop2/payment/paypal.php добавить перед $success id страниц отмены
if ($context == 'web') {
    $makeId = '277';
} elseif ($context == 'ru') {
    $makeId = '278';
}
3. заменить на
if ($id = $modx->getOption('ms2_payment_paypal_cancel_id', null, 0)) {
$cancel = $modx->makeUrl($makeId, $context, $params, 'full');
}
Andrei D.
03 октября 2016, 06:40
0
Даже если в paypal.class.php захардкодить $paymentUrl, то возвращает пустую страницу для других языков :/
Andrei D.
03 октября 2016, 06:38
0
Поздно увидел ваше сообщение, похоже зря обновился на новый minishop
Andrei D.
03 октября 2016, 06:36
0
Проблему с контекстами описывал два года назад, странно, что она еще не решена