Александр

Александр

С нами с 12 июня 2015; Место в рейтинге пользователей: #311
Александр
02 ноября 2019, 06:09
0
Эти способы были хороши году в 2010, современные боты пройдут такую защиту, даже не узнав о её существовании.
Александр
03 апреля 2018, 11:07
0
Всё, понял в чем была проблема. В названии TV — 'options'. Поменял его и всё заработало как надо.
Александр
03 апреля 2018, 11:04
0
Если сделать так
[[!getImageList?
    &tvname=`options`
    &docid=`[[*id]]`
]]
То не выводится ничего. Если жестко указать id товара
[[!getImageList?
    &tvname=`options`
    &docid=`29`
]]
То массив с нужными данными (данные ТВ 'options' для страницы с id=29) выводится на всех страницах, кроме страницы с id=29. На ней, опять же, не выводится ничего.
Если менять ID страницы на любой другой, то данные выводятся на всех страницах, кроме страницы с указанным ID.
Александр
03 апреля 2018, 10:19
0
Соответственно, для любого другого ID документа данные выводятся везде, кроме самого документа.
Документы в данном случае — товары minishop (класс msProducts), не знаю насколько это важно.
Александр
03 апреля 2018, 10:08
0
Что интересно, вот такой сниппет
$tv = $modx->getObject('modTemplateVar', array('id' => 1));
$data = $tv->getValue(29);
var_dump($data);
return;
Выводит нужное значение на всех страницах, кроме страницы товара (29), на ней выводится пустая строка.
Александр
02 апреля 2018, 22:57
0
Тоже ничего
Александр
21 сентября 2017, 14:34
+1
Спасибо. Вопрос решен нажатием кнопки «Parse schema» в MigX.
Александр
21 сентября 2017, 14:14
0
В директории пакета 'core/components/claims/' у меня только папка 'model/schema' с xml-схемой. Нужны ли для работы пакеты другие файлы?
Александр
21 сентября 2017, 14:10
0
500 ошибка пропадает, если закомментировать строчку
$mo->save();
.
Ошибки в логе ModX при этом остаются.
Александр
30 мая 2017, 17:04
0
Каких еще настроек доступа не хватало, если не секрет? Я сейчас на этом же этапе)
Александр
19 октября 2016, 22:47
0
Действительно, когда создаю новый товар, почему-то по умолчанию в галерее ставится источник файлов Filesystem, а не MS2 Images. Я сначала это поле вообще не заметил.
Александр
19 октября 2016, 22:37
0
Действительно, при создании товара создается с источником файлов «1», вместо «2», вижу это в базе. Не понимаю, почему системная настройка игнорируется. Где-то еще задается источник файлов?
Александр
22 февраля 2016, 01:31
0
Да, я описался, использовал именно getObject.
Спасибо за столь подробные и работоспособные разъяснения.
Александр
21 февраля 2016, 17:47
0
Если не сложно, Михаил, подскажите ответ на еще 1 вопрос.
Не понимаю, как мне поменять значение опции у создаваемого или уже существующего товара на то, то я получаю POST-запросом от пользователя. Прикладываю весь код сниппета, но вопрос исключительно по той части, где комментарий.
<?php
if (empty($modx->getLoginUserID('web')))
    $modx->sendRedirect($modx->makeUrl(1));

$uid = $modx->getLoginUserID('web');

if (!empty($_POST)) {
    $r = $modx->getObject('msProduct', (int)$_POST['rid']);
    if (!$r || $uid != $r->createdby)
        $modx->sendRedirect($modx->makeUrl(8));

    $productData = $r->toArray();
    unset($productData['publishedon']);
    $productData['createdon'] = time();
    $productData['published'] = 1;
    $productData['favorite'] = 0;
    $productData['description'] = trim($_POST['description']);
    $productData['old_price'] = (int)$_POST['old_price'];
    $productData['price'] = (int)$_POST['price'];

    $n = $modx->newObject('msProduct', $productData);

    $link = $modx->getObject('msLink', 1);

    $linkProducts = $modx->newObject('msProductLink');
    $linkProducts->addOne($r, 'Master');
    $linkProducts->addOne($n, 'Slave');
    $linkProducts->addOne($link, 'Link');
    $linkProducts->save();

    $optionPhone = $modx->newObject('msProductOption', array('key' => $r->get('options_phone')));
    $n->addOne($optionPhone, 'Options');
    $optionExp = $modx->newObject('msProductOption', array('key' => $r->get('options_experience')));
    $n->addOne($optionExp, 'Options');
/* С копированием опций более-менее понятно. Не понимаю как поменять значение опции на получаемое из формы */
    $optionLength = $modx->newObject('msProductOption', array('key' => trim($_POST['options_length'])));
    $n->addOne($optionLength, 'Options');

    $n->save();

    $modx->sendRedirect($modx->makeUrl(8));
}

return $output;
Александр
21 февраля 2016, 16:10
0
Связь просто надо было сохранить
$linkProducts->save();
Спасибо еще раз, Михаил, за работающее решение, очень круто.
Александр
21 февраля 2016, 15:56
0
Каюсь, Ваш код работает верно — товар копируется со всеми опциями абсолютно верно. Они затираются на следующем шаге, когда я пытаюсь поменять опцию options_length у новосозданного товара
/* Получаю товар для редактирования */
            $r = $modx->getObject('msProduct', array(
                'id' => (int)$_POST['rid']
            ));

            /* Меняю полученные данные */
            $r->fromArray(array(
                'description' => trim($_POST['description']),
                'old_price' => (int)$_POST['old_price'],
                'price' => (int)$_POST['price']
            ));
            $r->save();

            /* Меняю значение опции на полученное */
            $o = $modx->newObject('msProductOption', array(
                'product_id' => $r->id,
                'key' => 'options_length',
                'value' => trim($_POST['options_length'])
            ));
            $o->save();
После этого значения опции options_phone и options_length затираются и появляется дублирующая строка с опцией options_length.
С этим, думаю, я уже смогу разобраться. Главное что уже понятно, где происходит ошибка.
Александр
21 февраля 2016, 15:46
0
Проверял, он выводит верное значение до самого последнего момента, но при
$stmt->execute();
или
$o->save();
В базу пишется пустое значение.
Александр
21 февраля 2016, 15:42
0
Большое спасибо за развернутый ответ.
/* Создаем новую связь */
    $link = $modx->newObject('msLink', array(
        'type' => 'one_to_many',
        'name' => 'Название связи',
    ));
Я не совсем понимаю, именно создаем, а не получаем, к примеру так?
/* Создаем новую связь */
    $link = $modx->newObject('msLink', 1);
Просто сама связь у меня уже существует под идентификатором 1.
В целом ничего не поменялось, options_phone пишется в базу с пустым value, при этом
$r->get('options_phone')
выводит правильное значение.
Связь между товарами вообще не создается — в базе не появляется записей.
Александр
21 февраля 2016, 14:33
0
Всё выглядит верно. Мне больше ничего в голову не приходит. Возможно специфические настройки самого локального сервера?
Александр
21 февраля 2016, 14:24
0
Затрудняюсь что-то посоветовать. Я бы искал проблему в настройках минишопа/источника файлов.