Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #70
but1head
12 декабря 2016, 19:36
3
0
Для pdoPage
<?php
$pdoFetch = $modx->getService('pdoFetch');
$pdoFetch->setConfig($scriptProperties);

$outputSeparator = isset($outputSeparator) ? $outputSeparator : PHP_EOL;
$totalVar = isset($totalVar) ? $totalVar : 'page.total';
$offset = isset($offset) ? $offset : 0;
$limit = isset($limit) ? $limit : 8;

$sql = "SELECT * FROM %tablename%";

$q = $modx->prepare($sql);
$q->execute();
$rows = $q->fetchAll(PDO::FETCH_ASSOC); 

// Кол-во записей для пагинации
$_count = $modx->prepare("SELECT COUNT(*) AS count FROM %tablename%");
$_count->execute();
$count = $_count->fetch(PDO::FETCH_ASSOC);
$modx->setPlaceholder($totalVar, $count['count']);

$output = array();
foreach($rows as $row) {
  $output[] = $pdoFetch->getChunk($tpl, $row);   
}
return implode($outputSeparator, $output);

Вызов
[[!pdoPage?
    &element=`&snippetname%`
]]
Павел Гвоздь
08 декабря 2016, 21:12
2
+2
define('MODX_API_MODE', true);
do {
    $dir = dirname(!empty($file) ? dirname($file) : __FILE__);
    $file = $dir . '/index.php';
    $i = isset($i) ? --$i : 10;
} while ($i && !file_exists($file));
if (file_exists($file)) {
    require_once $file;
}
$modx->getService('error', 'error.modError');
$modx->getRequest();
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');
$modx->error->message = null;
$modx->lexicon->load('default');

$output = $modx->lexicon('failure');
$response = $modx->runProcessor('resource/emptyrecyclebin');
if (!empty($response->response) && $response->response['success']) {
    $output = $modx->lexicon('success');
}
exit($output);

:) Нет же, я проверил — с процессором работает, поэтому решил реализовать через процессор.
Воеводский Михаил
26 ноября 2016, 09:15
4
+3
2) Это ошибка MS2 при сохранении свойств доставки. Когда-то столкнулся, но PR не подготовил, причин уже не помню. Надеюсь, Василий добавит исправление в MS2.

В файлах /core/components/minishop2/processors/mgr/settings/delivery/create.class.php и /core/components/minishop2/processors/mgr/settings/delivery/update.class.php блок
foreach ($prices as $field) {
            if ($tmp = $this->getProperty($field)) {
                $tmp = preg_replace(array('#[^0-9%\-,\.]#', '#,#'), array('', '.'), $tmp);
                if (strpos($tmp, '%') !== false) {
                    $tmp = str_replace('%', '', $tmp) . '%';
                }
                if (strpos($tmp, '-') !== false) {
                    $tmp = str_replace('-', '', $tmp) * -1;
                }
                if (empty($tmp)) {
                    $tmp = 0;
                }
                $this->setProperty($field, $tmp);
            }
        }
необходимо заменить на следующий:
foreach ($prices as $field) {
            if ($tmp = $this->getProperty($field)) {
                $isPercent = false;
                $tmp = preg_replace(array('#[^0-9%\-,\.]#', '#,#'), array('', '.'), $tmp);
                if (strpos($tmp, '%') !== false) {
                    $tmp = str_replace('%', '', $tmp) . '%';
                    $isPercent = true;
                }
                if (strpos($tmp, '-') !== false) {
                    $tmp = str_replace('-', '', $tmp) * -1;
                    if ($isPercent) {
                        $tmp .= '%';
                    }
                }
                if (empty($tmp)) {
                    $tmp = 0;
                }
                $this->setProperty($field, $tmp);
            }
        }
После этого минусовой процент начнет правильно сохраняться, а обработка такого значения в остальных местах происходит корректно.
Дмитрий Суворов
16 ноября 2016, 01:33
2
+1
function hideaddress(){
   if ($('[name="delivery"]:checked').attr('id') == 'delivery_1') {
      $("#address_block").hide();
   } else {
      $("#address_block").show();
      return false;
   }
}

window.onload = function () {
   hideaddress();
};

$(document).on('change', '[name="delivery"]', function() {
   hideaddress();
})
Василий Наумкин
15 ноября 2016, 07:08
1
0
Как в первый раз, серьёзно
$(document).ready(function() {
	console.log(miniShop2);
});

Или даже
[[*id:input=`<script>console.log(miniShop2);</script>`:jsToBottom]]
but1head
08 ноября 2016, 20:58
2
0
<?php
if($modx->event->name != 'msOnGetProductPrice') return;

if($modx->user  && $modx->user->isMember('Wholesaler')){
    $values = & $modx->event->returnedValues;
    $resource = $modx->getObject('msProduct', $product->id);
    $wholesale_price = $resource->getTVValue('price_opt');
    if($wholesale_price){
        $values['old_price'] = $values['price'];
        $values['price'] = $wholesale_price;
    }
}
Элементарная оптовая цена для юзеров в группе «оптовик», сделаная через tv, 3 минуты работы. Очень сложно?
Важное качество программиста «гуглить», а не просить сделать других его работу. Не умеете — не беритесь.
Семен Морозов
27 октября 2016, 17:57
4
0
Мне тут подсказалаи, что вот так можно сделать:

Изменения в msMiniCartDynamic строка 37
$out .= $modx->getChunk($tpl, array(
            'name_d' => $t['title'],
            'id_d' => $v['id'],
            'key_d' => $k,
            'count_d' => $v['count'],
            'price_d' => $v['price'],
            'sum_d' => $v['count'] * $v['price'],
            'img_d' => $t['img_path'],
            'options_d' => implode(';',$v['options']),
        ));
в core/components/msminicartdynamic/model/msminicartdynamic/msminicartdynamic.class.php строка 80
$success['data'] = array(
                        'key_d' => $k,
                        'id_d' => $v['id'],
                        'name_d' => $t['title'],
                        'count_d' => $v['count'],
                        'price_d' => $v['price'],
                        'sum_d' => $v['count'] * $v['price'],
                        'img_d' => $t['img_path'],
                        'options_d' => implode(';',$v['options']),
                    );
 В [[+options_d]] выводятся все опции через ;
Если все гуд, внесете в компонент?
Володя
30 сентября 2016, 17:32
2
+2
создайте настройку ms2_cart_max_count и укажите там нужное ограничение.
Андрей
15 сентября 2016, 14:32
2
+1
$id = $response->response['object']['id']; //id товара

$gallery = array(
  'id' => $id,
  'name' => '',
  'rank' => 0,
  'file' => MODX_BASE_PATH.'/userdata/promo/2016-hennessey-venom-gt-spyder-v4-1080.jpg'
);

$upload = $modx->runProcessor('gallery/upload', $gallery, array(
  'processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/'
));

if ($upload->isError()) {
  print_r($upload->getResponse());
}

Не уверен правда как правильно сделать загрузку сразу нескольких файлов.
Павел Романов
08 сентября 2016, 11:40
1
+2
getProducts не умеет работать с картинками товаров miniShop — он просто не знает о существовании таблицы, где они прописаны.
Можете написать сниппет, который будет вытаскивать из таблицы modx_ms2_products значение поля image для ID текущего ресурса, а можете поставить Rowboat и сделать так:
[[Rowboat?
   &table=`modx_ms2_products`
   &tpl=`img`
   &where=`{"id":"[[+id]]"}`
]]
Ну а в чанке img используйте плейсхолдер [[+image]], который выведет путь к картинке. Дальше по обстоятельствам ).