• Почему это расширение недоступно в ubuntu 16?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Как так, везде пишут что simplexml_import_dom() и расширение SimpleXML доступны в php из коробки

    В некоторых обсуждениях пишут, что начиная с версии php 7.0.3 SimpleXML отсутствует "из коробки". Попробуйте поставить отдельно
    apt-get install php7.0-xml
    Ответ написан
    3 комментария
  • Как на js\jquery добавить класс только одному элементу?

    @Sashjkeee Куратор тега CSS
    f-e
    Ответ написан
    Комментировать
  • Как на js\jquery добавить класс только одному элементу?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Ответ написан
    Комментировать
  • Как проще подключить оплату?

    ivannesterenko91
    @ivannesterenko91
    Программист, веб дизайнер, к, бизнесмен
    Я бы посоветовал интеркассу. Большое количество платежных способов, там и карточкой расплачиваться можно и через вебмани, терминалы. Вообще кому как удобно. Я бы ее советовал. Работаю на одном сайте, так там интеркасса уже около 6 лет стоит. А главное вывод денег без проблематичный.
    Ответ написан
    Комментировать
  • Как так сверстать таблицу?

    aliencash
    @aliencash
    Партизан
    Ответ написан
    Комментировать
  • Можно ли сделать такую фишку без JS?

    svistiboshka
    @svistiboshka
    живые веб интерфейсы
    вообще легко background-attachment: fixed
    https://jsfiddle.net/s8o5hun8/1/
    Ответ написан
    9 комментариев
  • Есть краткая схема работы яндекс кассы?

    mhthnz
    @mhthnz
    PHP, YII2, Golang, Linux
    В своем проекте использую 1 класс, который отрабатывает checkOrder (проверку актуальности заказа) и paymentAviso (обработка самой оплаты). Ответ одинаковый в обоих случаях (отличается лишь названием тэга paymentAvisoResponse, checkOrderResponse), проверки тоже одинаковые. На отмену оплаты можно забить, так как она актуальна только если оплата идет в кредит, но для этого нужно передавать дополнительные поля, и какие то еще заморочки. Если у вас не планируется оплата в кредит, а только за наличку, то можете игнорировать.
    Ответ написан
    3 комментария
  • Что за знак `~` перед индексом массива?

    Перед подключением компонента ко всем значениям параметров применяется функция htmlspecialcharsEx. Исходные значения параметров сохраняются в этом же массиве с теми же ключами, но с префиксом ~. Например, $arParams["NAME"] - входной параметр, к которому применена функция htmlspecialcharsEx, а $arParams["~NAME"] - исходный входной параметр.

    dev.1c-bitrix.ru/learning/course/index.php?COURSE_...
    Ответ написан
    Комментировать
  • Обычные константы, или константы в классе?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    В константе без класса - не стоит, view тут в принципе ни при чем. Как правило домен - это данные конфигурации вашего окружения/приложения. Можете сделать конфиг-класс с константой своего домена.

    По хорошему в генерацию ссылок по роутам должен уметь сервис (либо в составе роутера, либо отдельный) который уже знает про ваш домен. А дописывать его руками - это не то, что бы плохая практика, скорее странно.
    Ответ написан
    Комментировать
  • Как не нарушать SOLID?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вы путаете инверсию контроля и инверсию зависимости. Давайте по порядку кратенько.

    Зачем нам нужны контроллеры или различные представления данных

    Зачем нам в принципе контроллер? Что он делает? Для упрощения не будет воспринимать контроллер как "один объект" и вместо этого представим себе его как целый слой. Так же заменим слово "модель" словом "приложение".

    Задача контроллера - принять и обработать запрос и выдать ответ. По сути в контексте WEB наш HTTP запрос и ответ это представление, которое хочет получить клиент (браузер, мобильное приложение, SPA, что угодно). HTTP - это интерфейс пользователя (UI) для нашего web-приложения.

    Например что бы независеть от реализации клиента и что бы было удобно мы передаем даты в формате iso 8601 (пример: 2016-07-14T19:40:12Z). Это удобно что бы быть независимым от реализации клиента или сервера. Но это не удобно для нашего приложения. В приложении скорее всего нам удобнее всего работать с объектом типа DateTime. То есть приложение использует абсолютно другое представление.

    Мы могли бы прямо в приложении конвертить DateTime в iso 8601 но тогда мы делаем наше приложение привязанным к одному конкретному представлению, которое хочет получить клиент. К примеру по каким-нибудь причинам известным только темным богам, вам вдруг понадобится быстро прикрутить интеграцию с другим сервисом и те же данные гонять уже в RFC2822. И стало быть уже приложению нужно париться о еще одном представлении.

    Мы могли бы сделать какие-то адаптеры у приложения, и дергать их в зависимости от потребностей, но тогда опять же наше приложение все еще знает о представлении, которое ему собственно не нужно. То есть у нас есть зависимость приложения от его UI что... похоже на "не лучшую идею". И тут на помощь приходит Inversion of Control.

    Что такое Inversion of Control

    Тут название само говорит за себя. Допустим у нас был объект A который дергал объект B, причем объект A по сути и не должен ничего знать об объекте B потому то это не его дело. Принцип инверсии контроля говорит нам о том, что в таких ситуациях именно B должно вызывать A, таким образом меняя направление потока управления. Это позволяет нам уменьшить связанность и повысить зацепление компонентов нашей системы. Так же сделав это у нас может появиться объект C который так же будет дергать объект A. Если говорить о UI - мы просто можем сделать несколько реализаций UI.

    То есть если еще упростить - фреймворк должен дергать ваш код, а не код дергать код фреймворка. Тем самым мы снижаем связанность одного от другого.

    Роутер и контроллеры как реализация UI

    Что бы отвязать приложение от логики формирования представления, вынесем это все в отдельный "слой" и назовем этот слой - контроллеры. Точнее это будет как цепочка адаптеров. Один адаптер (фронт-контроллер по сути) получает Request и делает какие-нибудь вещи с ним. Например проверяет можем ли мы вообще делать подобный запрос. Другой адаптер вызывает роутер и выясняет какой дальше адаптер вызвать. Если следующий адаптер не вызван - надо вернуть 404-ую ошибку. Если же все пошло хорошо - мы вызываем еще один адаптер, который уже будет конвертировать HTTP запрос в какое-то действие приложения (вызов метода приложения по сути).

    Так а инверсия зависимости это что?

    Инверсия зависимости - очень похожа на инверсию контроля но действует чуть по другому. Проще всего будет вглянуть на картинку:

    Dependency_inversion.png

    стрелочка зависимости на первой фигуре выходит за пределы нашего "модуля" и залазит в "чужой", тем самым наш модуль становится зависимым от другого модуля. Яркий пример - у нас есть например SwiftMailer для отправки почты. Нашему коду нужен просто способ отправлять сообщения, а SwiftMailer просто конкретная реализация.

    Если мы не хотим завязываться на SwiftMailer, и дать возможность в будущем изменить способ отправки почты, мы можем в рамках нашего модуля объявить интерфейс а в другом модуле уже его реализовать с применением SwiftMailer. Для упрощение под модулями мы можем понимать неймспейсы например.

    Нужно ли соблюдать принцип инверсии зависимости в случае контроллеров?

    Нет. Контроллеру нужна конкретная реализация какой-то части нашего приложения (ибо приложение главнее UI-ки), иначе в них нет особо смысла. И наше приложение вообще не должно париться о том что есть какие-то там контроллеры.

    будет ли правильным передавать зависимости в роутинге

    Это уже вопрос реализации IoC. Конкретно вы хотите получить что-то вроде Dependency Injection. Вы можете забрать зависимости из аргументов метода экшена. или аргументов конструктора контроллера.... или просто использовать контейнер зависимостей внутри контроллера.... это совершенно не важно. Контроллеры это то место где высокая связанность на компоненты фреймворка более чем допустимы.

    С другой стороны у вас теперь роутинг совмещает обязанность маршрутизации и разруливания зависимостей. Сами понимаете что это как-то нарушает прицип единой ответственности. Этим может заниматься Controller Resolver какой-нибудь.
    Ответ написан
    2 комментария
  • Как убрать буквы из цены?

    alexyarik
    @alexyarik
    Битрикс разработчик
    Магазин Настройки Мастер магазина - используемые валюты - нужная валюта - изменить:
    Языковые настройки - Строка формата для вывода валюты: убираете руб.
    Ответ написан
    Комментировать
  • Как убрать буквы из цены?

    В настройках валют
    Ответ написан
    Комментировать
  • Как узнать с какой кнопки отправлена форма?

    mannaro
    @mannaro Куратор тега JavaScript
    Умею профессионально гуглить
    Сделать в форме
    <input type="hidden" name="button_type" id="button-type" />

    И навесить на кнопки
    $('#button-1').click(function(e) {
      $('#button-type').val("button-1");
    });
    
    $('#button-2').click(function(e) {
      $('#button-type').val("button-2");
    });
    Ответ написан
    2 комментария
  • Как развернуть битрикс на локальной машине?

    Logic87
    @Logic87
    Программист/администратор сайтов на 1С-Битрикс.
    Бекап оригинала делать с админки битрикса.
    Восстановление сайта - нужно воспользоваться скриптом от битрикса restore.php .
    Используйте OpenServer или Denwer.
    Ответ написан
    7 комментариев
  • Происходит неправильный редирект на новый домен, почему?

    @theEternalStudent Автор вопроса
    Я рак
    Ответ написан
    Комментировать
  • Как на js сделать такое?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    <div>
      <label><input type="checkbox" data-param="param1" class="link-changer">param 1</label>
      <label><input type="checkbox" data-param="param2" class="link-changer">param 2</label>
      <label><input type="checkbox" data-param="param3" class="link-changer">param 3</label>
      <label><input type="checkbox" data-param="param4" class="link-changer">param 4</label>
    </div>
    <div>
      <a href="/test" class="change-on-check">test 1</a><br>
      <a href="/test" class="change-on-check">test 2</a><br>
      <a href="/test" class="change-on-check">test 3</a><br>
    </div>

    var links = document.getElementsByClassName('change-on-check');
    Array.prototype.forEach.call(links, function(link) {
      link.href += '?';
    });
    Array.prototype.forEach.call(
      document.getElementsByClassName('link-changer'),
      function(checkbox) {
        checkbox.addEventListiner('change', onChange, false);
      }
    );
    
    function onChange(event) { 
      var param = '&' + encodeURIComponent(event.target.getAttribute('data-param'));
      var add = event.target.checked;
      Array.prototype.forEach.call(links, function(link) {
        if(add) {
          link.href += param;
        } else {
          link.href = link.href.replace(param, '');
        }
      });
    }
    Ответ написан
    3 комментария
  • Как подходить к решению нетривиальных задач?

    Привет.

    Всегда использую модель боли:

    1) Смотришь задачу
    2) Пытаешься её решить
    3) Понимаешь, что ты тупой идиот, который ничего не может.
    4) Поднимаешь в помощь гугл
    5) Поднимаешь в помощь литературу
    6) Спрашиваешь ребят на тему: "почему так, а не иначе".
    7) Выполняешь задание, осознавая, что ты тупой, раз на решение этой задачи тебе пришлось потратить столько времени.

    Повторить до бесконечности, и ты станешь профи.
    Ответ написан
    7 комментариев
  • Как можно реализовать фильтрацию div блоков на js?

    @Azperin
    Дилетант
    фидлер и кодпен у меня глючат почему-то, попробуй мой топорный вариант:
    <div class="checkbox" >
    	<input type="checkbox" id="all" onclick="showAll();"><label for="all">Показать все</label>
    	<input type="checkbox" id="one" onclick="hideBox();"><label for="one">Показать one</label>
    	<input type="checkbox" id="two" onclick="hideBox();"><label for="two">Показать two</label>
    	<input type="checkbox" id="three" onclick="hideBox();"><label for="three">Показать three</label>
    </div>
    <div class="blocks">
        <div class="one">текст блока one</div>
        <div class="two">текст блока two</div>
        <div class="three">текст блока three</div>
    </div>


    function showAll () {
    $('.blocks div').css('display','block');
    $('.checkbox input').attr('checked', false);
    $('#all').prop('checked', true);
    };
    
    function hideBox() {
    $('#all').attr('checked', false);
    $( ".blocks div" ).each(function(i) {
        var className = $(this).attr("class"); 
        var idBox = $('#'+className).prop("checked");
        if (!idBox) {
          $(this).css('display','none');
        } else {
          $(this).css('display','block');
        };
    });
    };
    Ответ написан
    Комментировать