Задать вопрос
  • Как закодировать URL utf8 в cp1251?

    @alexalexes
    Только учтите, что этот способ ограничен алфавитом t и некоторыми символами, которые перечислены в регулярках replace(). Да и теоретически, полное пространство символов utf8 больше чем пространство cp1251, поэтому, как бы не была полна функция преобразования convert_to_cp1251(), не всегда любой произвольный символ получиться перевести из utf8 в cp1251. Этот способ будет работать на тех строках, где набор символов известен, и что-то лишнего ждать не придется, например, нужно преобразовать ФИО.
  • Несколько массивов вместо одного?

    @alexalexes
    То, что вы хотите получить на выходе в первом сообщении с точки зрения json - некорректно, это легко проверить если разложить данные вертикально по иерархии скобочек:
    [
      {
         "uuid":"20190922163205",
         "goods":
         // Упс!!! Нижестоящие записи goods - это коллекция, а она внезапно оказалась без контейнера [] //
                      [{"good_uuid":2,"good_name":"Конверт на выписку","quantity":1,"price":1,"tag1214":4}], 
                      [{"good_uuid":1,"good_name":"Звездная ночь на шампани","quantity":1,"price":1,"tag1214":4}]
    }
    ]

    Корректно либо так, как вы получили изначально:
    [
      {
        "uuid":"20190922163205",
        "goods":
        [ // вот это и есть контейнер для коллекции goods
          [{"good_uuid":2,"good_name":"Конверт на выписку","quantity":1,"price":1,"tag1214":4}], 
          [{"good_uuid":1,"good_name":"Звездная ночь на шампани","quantity":1,"price":1,"tag1214":4}]
        ] // конец контейнера
      }
    ]

    Либо то, что я предложил:
    [
      {
        "uuid":"20190922163205",
        "goods":
        [ //  контейнер для коллекции goods никуда не делся и не может пропасть, это ведь коллекция все таки.
          {"good_uuid":2,"good_name":"Конверт на выписку","quantity":1,"price":1,"tag1214":4}, 
          {"good_uuid":1,"good_name":"Звездная ночь на шампани","quantity":1,"price":1,"tag1214":4}
        ] // конец контейнера
      }
    ]
  • Несколько массивов вместо одного?

    @alexalexes
    Так у вас оно и будет, только определитесь с нотацией, как обозначать в коде массив:
    Вот так:
    $description1[] =
    array(
              'good_uuid' => $rowcart["idprod"],
              'good_name' => $rowcart["name"], 
              'quantity' => $rowcart["quantity"],
              'price' => $rowcart["price"],
              'tag1214' => 4
    );

    или вот так:
    $description1[] =
    [
              'good_uuid' => $rowcart["idprod"],
              'good_name' => $rowcart["name"], 
              'quantity' => $rowcart["quantity"],
              'price' => $rowcart["price"],
              'tag1214' => 4
    ];
  • Как сделать таб для слайдера?

    @alexalexes
    1) Вы не знаете, как настроить штатные навигационные стрелки Вперед (next) и Назад (prev), или Точечки перехода на определенный слайд (dots)? Настроить их вид?
    2) Вам нужно сделать отдельные элементы управления вне слайдера и подписать на события навигации, как будто используются один из вариантов элементов 1.
    3) Удалить существующие слайды и добавить новые?
  • Как сделать выборку из нескольких таблиц с помощью оператора IN?

    @alexalexes
    Опять же можно было обойтись одной таблицей:
    EVENT
    id - идентификатор события,
    event_type_id - тип события, внешний ключ,
    date - дата события
    event - описание события.
    Справочник EVENT_TYPE
    id - идентификатор типа события,
    type_name - наименование типа

    Типичный запрос бы выглядел так:
    select t1.id, t1.event_type_id,  t2.type_name, t1.date, t1.event
    from event t1
    join evet_type t2 on t1.event_type_id = t2.id
    where
     (t1.event_type_id = 1 and Month(t1.date) = Month(STR_TO_DATE(:date, '%d.%m.%Y')) and Day(t1.date) = Day(STR_TO_DATE(:date, '%d.%m.%Y'))) -- так получаем периодичные события (тип id = 1 ), год в t1.date игнорируем
    OR
    (t1.event_type_id <> 1 and t1.date = STR_TO_DATE(:date, '%d.%m.%Y')) -- а так получаем не периодичные события, отличные от типа 1.

    Чтобы потом ввести еще один тип события, достаточно добавить в справочник этот тип, и если он имеет какие-то особенности, то поправить where.
  • Как сделать выборку из нескольких таблиц с помощью оператора IN?

    @alexalexes
    Все таки нужно изучить вашу предметную область, чтобы понять, зачем вы сделали две таблицы для однотипных сущностей, возможно, нужно было в структуру данных ввести какой-нибудь тип события, тогда бы не нужна была дублирующая вторая таблица, а нужна была бы таблица- справочник типов событий. Возможно и имеет смыл разделять данные на две таблицы, если у вас события отличаются, например, свойством периодичности, но опять же это нужно смотреть с высоты знания предметной области.
    Если вы тип события не добавили изначально в структуру, то будете эмулировать его в каждом запросе полем t_type, такой уж будет костыль.))
    select a.*
    from
    (
    
    select 'from_t1' t_type,  t1.date, t1.event from t1 where t1.date = :date
    
    union all
    
    select 'from_t2' t_type,  t2.date, t2.event from t2 where t2.date = :date
    
    ) a
  • Как сделать выборку из нескольких таблиц с помощью оператора IN?

    @alexalexes
    Пойдем другим путем. Приведите пример данных из таблицы t1 и t2, и пример данных выходной выборки, какую вы хотите получить запросом.
  • Как сделать выборку из нескольких таблиц с помощью оператора IN?

    @alexalexes
    Ну, соединяйте. Причем тут in?
    select t1.*, t2.*
    from table1 as t1
    join table2 as t2 on t2.id_to_table1 = t1.id -- вероятно, у вас сомнения, как пишется выражение в клаузе ON
    where t1.id in (1, 2, 5)
  • Как очистить textaria с помощью javascript?

    @alexalexes
    Давайте по аналогии.
    document - это озеро.
    Элемент textarea - это интересуемая конкретная особь рыбы, которая плавает в озере document.
    Чтобы ее выловить, нужно использовать что-то из рыболовного инвентаря:
    getElementById()
    getElementsByClassName()
    getElementsByTagName()
    querySelector()
    querySelectorAll();

    Есть удочки, которые достают ровно одну рыбу:
    var elem_1 = document.getElementById('my_fish');
    var elem_2 = document.querySelector('textarea');

    Однако, чтобы document.getElementById('my_fish') ловил нужную особь, необходима чтобы эта особь в документе имела искомый атрибут id:
    <textarea id="my_fish"></textarea>
    Метод document.querySelector('textarea') выловит первую попавшуюся рыбу.
    Однако, если textarea будет несколько в документе, чтобы использовать его, вам нужно быть уверенным, что интересуемая особь либо будет единственная на странице, либо идти первым по структуре документа.
    Собственно, если что-то поймалось, то можно с этим что-то сделать:
    elem_1.value = 'добавили текст в textarea';
    elem_2.value = 'добавили текст в textarea';

    Далее, есть рыболовные сети:
    var elements_1 = document.getElementsByClassName('fishes');
    var elements_2 = document.getElementsByTagName('textarea');
    var elements_3 = document.querySelectorAll('form div.row div textarea');

    Для getElementsByClassName нужно, чтобы рыбы имели такой опознавательный знак:
    <textarea class="fishes"></textarea>
    Метод getElementsByTagName('textarea') извлекает из озера все то, что имеет тег textarea.
    Метод querySelectorAll('form div.row div textarea') извлекает рыбу, которая залегает по определенному CSS-признаку.
    Отличительная особенность этих методов в том, что они могут поймать не одну рыбку за один присест, а несколько, поэтому, чтобы взаимодействовать с конкретной извлеченной рыбкой, нужно обратиться в рыбный садок по индексу:
    elements_1[0].value = "добавили текст в textarea";
  • Как очистить textaria с помощью javascript?

    @alexalexes
    Чтобы манипулировать элементами страницы, вам нужно изучить, как правильно пользоваться методами:
    getElementById()
    getElementsByClassName() (обратите внимание почему Elements, а не Element)
    getElementsByTagName (тоже самое)
    querySelector()
    querySelectorAll()
  • Как ограничить доступ к компоненту Опросы (Polls)?

    @alexalexes Автор вопроса
    Да, актуально. Зафиксировал Issue:
    1) https://github.com/himurovich/MODX-Polls/issues/49
    2) https://github.com/himurovich/MODX-Polls/issues/50
    Если нужно могу поправить формулировки проблем и выслать свою реализацию вам по прокси голосованию.
  • Как ограничить доступ к компоненту Опросы (Polls)?

    @alexalexes Автор вопроса
    У меня еще были свои хотелки реализовать такие вещи:
    1. Возможность фиксации голосов от пользователей, находящиеся за прокси-сервером. А то один пользователь за прокси проголосует, а другие оттуда же увидят, что они уже проголосовали.
    2. Добавить тип вопроса, позволяющий выбирать множество ответов.
    Первую возможность я реализовал, но не совсем получилось чисто написать код.
    Для второй я напишу issue.
  • Как ограничить доступ к компоненту Опросы (Polls)?

    @alexalexes Автор вопроса
    Поискал на github, не писали ли похожую проблему.
    Нашел https://github.com/himurovich/MODX-Polls/issues/4
    Этот проблемный вопрос закрыли.
  • Почему на клиенте при входе через Chrome не работает https://animate.css/?

    @alexalexes
    Darya Shvakh, путь сертификации в Chrome просматривается так:
    Клик по "замку" в адресной строке -> Сертификат -> Путь сертификации.
    В Firefox:
    Клик по "замку" в адресной строке -> "Соединение >" -> Подробнее -> Защита -> Посмотреть сертификат -> Подробности -> Иерархия сертификатов.
    Не знаю, проверьте этот момент, мне как-то доводилось видеть "опеку" антивируса в виде подстановки своего сертификата.
  • Почему на клиенте при входе через Chrome не работает https://animate.css/?

    @alexalexes
    6) Антивирус - отключен.

    А путь ssl сертификатов для этого сайта смотрели, не маячит ли там какой-нибудь корневой сертификат от Касперского?
  • Как преобразовать RGB в 1 из 24 цветов?

    @alexalexes
    Только учтите, что координатное пространство RGB не настолько линейно для подборки подобных в естественном смысле цветов, чтобы искать на нем короткую дистанцию, скорее всего придется переводить в другую интерпретацию цвета, например, в HSV, чтобы искать метрики подобия.
  • Как отправить форму без перезагрузки страницы?

    @alexalexes
    xhr.open('POST', 'http://my-site.ru/');
    Вы прям в корень сайта шлете запрос и потом определяете, что такое обращение было по ajax-у (например, если бекэнд на php, наверное, в index.php где-то детектится $_SERVER['HTTP_X_REQUESTED_WITH'] )? или вы так упростили url для примера, что непонятно, где принимается на стороне сервера ajax запрос?
    Нужно отладкой посмотреть, что там, на стороне сервера твориться в момент отправки ajax-запроса. И точно определиться, куда вы будете слать его, потому что action формы указывает, что вы намереваетесь отправить форму на адрес текущей страницы (не обязательно это корень сайта), а ajax настроили на отправку в корень сайта, тут нужно четкое понимание куда полетит запрос, на какую страницу или метод, где его встретит код обработки.
  • Неориентированный граф с четырьмя вершинами возможно?

    @alexalexes
    Ну, вот решение (список ребер):
    А-B
    B-C
    C=D (тут два ребра)
    D-D (это петля)
  • Неориентированный граф с четырьмя вершинами возможно?

    @alexalexes
    если условие не запрещает делать петли и кратные ребра в графе, то можете получить практически любую конфигурацию степеней для любой вершины.