iWatchYouFromAfar

iWatchYouFromAfar

С нами с 29 сентября 2018; Место в рейтинге пользователей: #26
Воеводский Михаил
16 августа 2019, 11:09
1
+6
Даже не пытайтесь такое количество делать штатными средствами MODX. Его можно использовать только как оболочку, но всю логику и хранение товаров в БД придется написать самостоятельно.

Механизмы ресурсов при 800К уложат на лопатки любой сервер. В Tickets переработана схема работы с кешем ресурсов, но не уверен, что и он справится.

Для внимательного изучения: modx.pro/help/10631 и modx.pro/sites/7711
Дмитрий Середюк
16 марта 2019, 23:22
4
+1
<form method="post" class="ms2_form form-inline" role="form">
    <input type="hidden" name="key" value="{$product.key}"/>
    <div class="number-item">
        <button class="minus">-</button>
            <input type="num" class="amout" data-amout="amout" data-min="1" data-max="9999" name="count" value="{$product.count}">
        <button class="plus">+</button>
    </div>
    <button class="btn btn-default" type="submit" name="ms2_action" value="cart/change"></button>
</form>

function itemCount(field){
    var fieldCount = function(el) {
        var
	    // Мин. значение
	    min = el.data('min') || false,
	    // Макс. значение
	    max = el.data('max') || false,
	    // Кнопка уменьшения кол-ва
	    dec = el.prev('.minus'),
	    // Кнопка увеличения кол-ва
	    inc = el.next('.plus');
	function init(el) {
	    if(!el.attr('disabled')){
		dec.on('click', decrement);
		inc.on('click', increment);
	    }
	    // Уменьшим значение
	    function decrement() {
		var value = parseInt(el[0].value);
		value--;
		if(!min || value >= min) {
		    el[0].value = value;
	         }
	    }
	   // Увеличим значение
	   function increment() {
		var value = parseInt(el[0].value);
		value++;
		if(!max || value <= max) {
		    el[0].value = value++;
		}
	    }
	}
	el.each(function() {
	    init($(this));
	});
    };
    $(field).each(function(){
        fieldCount($(this));
    });
 } itemCount('[data-amout="amout"]');
Баха Волков
07 августа 2018, 22:47
1
0
HTML:
<input type="radio" name="delivery" id="del1" data-description="Описание 1">
<label for="del1">
    Пункт 1
</label>
<input type="radio" name="delivery" id="del2" data-description="Описание 2">
<label for="del2">
    Пункт 2
</label>
<input type="radio" name="delivery" id="del3" data-description="Описание 3">
<label for="del3">
    Пункт 3
</label>

<div id="description"></div>

JS (jQuery):
$('input[type="radio"]').on('change', function() {
    var desc = $(this).data('description');
	
    $('#description').text(desc);
});
Руслан Сафин
07 августа 2018, 21:05
1
0
Вот на js, думаю проще всего будет
$(function() {
    $('input:radio[name="delivery"]').change(function() {
        if ($(this).val() == '1') {
            $('.div_s_blokom_opisaniya').css('display','block');
        } else {
            $('.div_s_blokom_opisaniya').css('display','none');
        }
    });
});
Можно использовать .fadeIn() и .fadeOut() при желании
Константин Ильин
30 сентября 2017, 11:18
2
+1
Зачем сниппет писать, если можно пару строчек взять из getImageList ну или просто применить свои навыки программирования, благо феном позволяет все на месте писать.

умник ворвется крича что «цикл foreach тебя спасет»
А как еще можно пройтись по массиву?

Если зайти в сниппет getImageList можно найти такие строчки
.....
$fields['_alt'] = $idx % 2;
$idx++;
$fields['_first'] = $idx == 1 ? true : '';
$fields['_last'] = $idx == $limit ? true : '';
$fields['idx'] = $idx;
.....
Надо просто применить их на феноме:
{set $rows = json_decode($_modx->resource.migx_tv, true)}
{set $idx = 0}
{foreach $rows as $idxArr => $row}
    {set $row['idx'] = $idx++} {* idx от созданной переменной с инкриментом*}
    {set $row['idxForeach'] = $row@index} {* idx от foreach*}
    {*set $idxMIGX = $row['MIGX_id']*} {* idx от MIGX*}
    {if $row@first} 
        {set $row['_first'] = 'first item'}
    {/if}
    {if $row@last} 
        {set $row['_last'] = 'last item'}
    {/if}
    {if !($idx % 2)}
        {set $row['_alt'] = 'odd item'}
    {/if}
    {$row | print_r}
{/foreach}
Игорь Терентьев
08 июня 2017, 17:42
2
+1
У меня получилось решить данную проблему.
Во первых нужно удалить ранее зарегистрированные сервисы:
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->removeService('delivery', 'MskDelivery');
}
Создаем файл в core/components/minishop2/custom/delivery/msdeliverycourierhandler.class.php
<?php
if (!class_exists('msDeliveryHandler')) {
	require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msdeliveryhandler.class.php';
}

class msDeliveryCourierHandler extends msDeliveryHandler implements msDeliveryInterface {
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0.0) {

        $freedeliverysumm = 90;
        $cart = $order->ms2->cart->status();
        $cart_cost = $cart['total_cost'];

        if($cart_cost > $freedeliverysumm){
            return $cost;
        }else{
            $delivery_cost = parent::getCost($order, $delivery, $cost);
            return $delivery_cost;
        }
    }
}
Регистрируем:
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->addService('delivery', 'msDeliveryCourierHandler',
        '{core_path}components/minishop2/custom/delivery/msdeliverycourierhandler.class.php'
    );
}
Алексей Ерохин
27 марта 2017, 13:07
6
0
$options = array();
$translit = $modx->getOption('friendly_alias_translit', $options, 'russian');
$translitClass = $modx->getOption('friendly_alias_translit_class', $options, 'translit.modTransliterate');
$translitClassPath = $modx->getOption('friendly_alias_translit_class_path', $options, $modx->getOption('core_path', $options, MODX_CORE_PATH) . 'components/');
$modx->getService('translit', $translitClass, $translitClassPath, $options);
$transliteratedtext = $modx->translit->translate($text, $translit);
Владимир Тельнов
18 марта 2017, 01:58
2
0
Разобрался.

У меня стояла задача добавить поля «Дом» и «Номер квартиры» в профиль пользователя и отображать содержимое этих полей при создании нового заказа в miniShop2. Поля building и room — это единственные поля, которые не совпадают с полями в стандартном профиле пользователя, в результате чего при создании нового заказа приходится указывать номер дома и квартиры каждый раз в ручную.

Выполнил инструкцию из первого поста. После чего внес изменения в параметры сниппета officeProfile и в чанки tpl.msOrder (miniShop2), tpl.Office.profile.form (Office)

Для отображения нового поля в профиле в параметрах сниппета officeProfile, в раздел profileFields необходимо добавить поле new_field и соответствующее поле input
<input type="text" name="new_field" placeholder="" value="[[+modx.user.id:userinfo=`new_field`]]"/>
Для отображения нового поля при создании нового заказа в чанке tpl.msOrder отредактировал соответсвущий input
{foreach ['building'] as $field}
	<input type="text" id="{$field}" placeholder="{('ms2_frontend_' ~ $field) | lexicon}"
	name="{$field}" value="[[+modx.user.id:userinfo=`new_field`]]"
	class="form-control{($field in list $errors) ? ' error' : ''}">                      
{/foreach}
Андрей П
07 января 2017, 13:46
1
+2
У меня работает так {'название'|option}
Евгений
23 ноября 2015, 11:13
1
0
Да я и не имел ввиду стандартные средства. Пока вот решил таким топорным методом. Сделал снипет, и вывожу его в ресурсе.
<?php
$result = $modx->getCollection('FormItForm');

$key='';
foreach($result as $key=>$row){
    $items[] = (json_decode($row->get('values')));
};
print "<table>";
print "<tr><td>ФИО</td><td>Телефон</td><td>Почта</td></tr>";
foreach($items as $item){
    print "<tr>";
    print "<td>".$item->ФИО."</td>";
    print "<td>".$item->Телефон."</td>";
    print "<td>".$item->mail."</td>";
    print "</tr>";
}
print "</table>";
Не разобрался только как вывести переменные в плэйсхолдеры tpl, чтобы было по фэншую MODXa.