Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Я не знаю возможностей битрикса, но обрати внимание как работают компьютерные интернет-магазины — там, например, нет выбора HDD через характеристику объема. Каждый HDD — это отдельная единица товара со всеми вытекающими возможностями учета остатка, отчетов по оборотам, указанием места хранения и т.д.Вот например. Внизу разделы: товары этой же фирмы, похожие товары. Очень удобно.
П.С Любую задачу можно решить нестандартно. Особенно, если программисту некому ставить задачу и все упирается в его знание матчасти. Собственный велосипед — это конечно гордость изобретателя, но проблема для пользователя.
Одеяла с разными характеристиками не могут быть одним товаром: у них разная закупочная цена, соответственно ведется учет остатков по каждому размеру. По крайней мере, так при грамотно организованном складском учете. При одинаковой цене можно вести одну карточку товара, например, с разными цветами — через ассортимент, аналогичный товар и т.п. (в разных программах по разному называется). А с разной ценой один товар — это неправильно!
Так что разбейте одеяла на размеры и никаких доработок делать не нужно.
И я так понимаю, что должно. Но увы… Вот код для проверки:
<?php
define('MODX_API_MODE', true);
require 'index.php';
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
?>
<!DOCTYPE html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('a').click(function() {
                $.post(document.location.href, {action: 'change', val: '5'},function(data) {
                    $('#res').html(data);
                })
                return false;
            })
        })
    </script>
</head>
<body>
<?php
//')
if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    if ($_POST['action'] == 'change') {
        $_SESSION['testvar'] = $_POST['val'];
        die('
Новое значение $_SESSION["testvar"]:  '.$_SESSION["testvar"].'.  (А теперь нажимаем F5 и видим старое значение.)');
    }
}
if (!isset($_SESSION['testvar'])) {$_SESSION['testvar'] = 1;}
echo "<a id=\"test\" href=\"#1\">Изменить значение</a>";
echo "<div id=\"res\">
\$_SESSION[\"testvar\"]:  {$_SESSION['testvar']}</div>";
?>
</body>
Видимо, есть какая-то тонкость, которая ускользает от моего неопытного взгляда.
Василий, подскажи, как поменять $_SESSION переменную через post запрос? Я делаю так:
Инициализирую переменную:
$_SESSION['var'] = 1;
При клике на ссылку посылаю ajax
$.post(document.location.href, {action: 'changevar', id: 5})
В сниппете меняю переменную
$_SESSION['var'] = $_POST['id']; // $_POST['id']=5
Проверяю, $_SESSION['var'] — все равно равна 1. Не понимаю, это же глобальный массив.
Если в сниппете поставить
$_SESSION['var'] = $_POST['id']; // $_POST['id']=5
die($_SESSION['var'])
Ajax post возвращает 5. Но $_SESSION['var'] не меняется.
Видимо есть какое-то кодовое слово, чтобы заставить $_SESSION['var'] измениться.
Василий, помоги понять, что не работает. Взял твой процессор UserCreateProcessor и выполняю его:
$email='123@123.ru';
$fields=array('username'=>'Name','email' => $email,'fullname' => $email);

$response = $modx->runProcessor('web/staff/createUser',$fields,array('processors_path' => $modx->getOption('core_path').'components/staff/processors/'));
if (!$response->isError()) {
    print_r($response->response);
}else {
    $modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
}
На выходе получаю ($response->response)
UserCreateProcessor
Пользователь не создается. Но и response ничего не выводит кроме названия класса. Даже если я генерирую ошибку в BeforeSet() или в initialize() возвращаю false, все равно получаю UserCreateProcessor. По исходникам пробежался, не могу понять, что не так. Нужна помощь доктора.
Ясно. А как правильно проверить возвращаемые данные? Такая конструкция
(data != "")
работает криво. Я проверяю форму на ошибки. Если они есть, то возвращаю ошибку и вывожу в div #Error.
$.post(document.location.href, {action: action}, function(data) {
if (data != "") {
$("#Error").html(data);
})
Если ошибки нет, то возвращаю пустую строку ($res=''). И вот тут _опа. В контейнер
<div id="Error"></div>
почему-то пишется вся страница:
<html>
<head>
...
</head>
и т.д.
Подскажи, как правильно вернуть пустое значение.
Василий, подскажи, пожалуйста, почему в блоке $.post не переопределяется переменная
$(document).ready(function() {
     $('#btnSave').click(function() {
            var action = $(this).data('action');
            var str='Test'   //Определили переменную var
            $.post(document.location.href, {action: action}, function(data) {
		alert(str)  //Выводит "Test"
                str='OK'  // Переопределили переменную
            })
            alert(str)  //Выводит "Test"
            return false;
        })
Какая то загадка. Полдня уже мучаюсь.